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 だと動くのか…。
訳が分からないよ・ω・
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を呼び出す必要はないという仕様です。
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を呼び出す必要はないという仕様です。
おおう、そうでしたか・ω・ これはびっくり。ありがとうございます
おおう、そうでしたか・ω・ これはびっくり。ありがとうございます