Firefox 54 を Windows 2000で動かす実験 その1

Firefox 54のAurora 版がWindows 2000で動かないというクレームがあったので動かす実験をしてみました

1. SRW 関連の関数を仮実装
2. SHOpenWithDialog を実装
3. dwmapi.dll を拡張
4. AVRT.DLL のStub ライブラリを作成

やったのはここまで

結果、 xul.dll のロード中のクリティカルセクションでクラッシュするんですが、調べてみた所

AcquireSRWLockExclusive が InitializeSRWLock を介さずにコールされていて、初期化エラーで落ちてることが判明…。

そもそも、API初期化せずにエラーにならないとか意味わかんないんですが!

ワザと、バグのあるプログラムを動かして、正しく実装した場合はクラッシュして、適当に実装してある Windows Vista / 7 /10 だと動くのか…。

訳が分からないよ・ω・

おすすめ

4件のフィードバック

  1. emk より:

    MSDNの説明によると
    > An SRW lock must be initialized before it is used. The InitializeSRWLock function is used to initialize a SRW lock dynamically. To initialize the structure statically, assign the constant SRWLOCK_INIT to the structure variable.
    ですから、SRWLOCK_INIT(ゼロ)で初期化されていればInitializeSRWLockを呼び出す必要はないという仕様です。

  2. emk より:

    MSDNの説明によると
    > An SRW lock must be initialized before it is used. The InitializeSRWLock function is used to initialize a SRW lock dynamically. To initialize the structure statically, assign the constant SRWLOCK_INIT to the structure variable.
    ですから、SRWLOCK_INIT(ゼロ)で初期化されていればInitializeSRWLockを呼び出す必要はないという仕様です。

  3. 黒翼猫 より:

    おおう、そうでしたか・ω・ これはびっくり。ありがとうございます

  4. 黒翼猫 より:

    おおう、そうでしたか・ω・ これはびっくり。ありがとうございます

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です