次の理解を考慮
regsvr32
を登録/登録解除する場合、ターゲットのロード後にエントリポイントDllRegisterServer
/DllUnregisterServer
を呼び出しますDLL = LoadLIbrary
を介してそのアドレス空間に。C:\Windows\SysWOW64
にあります。しかし、2008 R2ボックスでは、64ビットのregsvr32によって32ビットのdllを登録することができました。それはどのようにして可能でしたか?何か不足していますか?
スクリーンショットで強調したい例は、ダイアログがポップアップする最後のものでした。
これはそれがどのように正確に起こるかを説明するはずです:
(ソース: alax.info )
regsvr32
は、DLLのビット数と一致するように、内部で別のビット数ツインを開始します。これが登録が成功する方法です。 regsvr32
の32ビットバージョンと64ビットバージョンのどちらを起動しても、不一致が処理されるため、気にする必要はありません。
注意が必要なシナリオは、デバッグホストとしてVisual Studioからregsvr32
を起動するときです。実際の登録を持つ子プロセスはデバッガーの外部で実行され、コードをステップ実行できないため、そこで正しいビット数が必要です。
マットと私の想定は正しかったようです。 MSは64ビットのregsvr32を再設計して、ターゲットdllのビット数に基づいて、%SYSWOW64%から新しい32ビットのregsvr32プロセスを生成してDLLを登録できるようにしました。この点を証明するために、私はprocexpを起動し、32ビットのポップアップウィンドウをスパイしましたDLLそして、これが表示されたものです。
注意すべきいくつかのこと