32ビットモードでコンパイルされたプログラムからSetupDiCallClassInstallerを呼び出そうとすると、64ビットWindowsでエラーが発生します。SetupDiCallClassInstaller関数が64ビットプログラムに制限されているのはなぜですか?
明らかにこれは設計によるものですが、理由を知りたいと思います。
32ビットモードでコンパイルされたプログラムからSetupDiCallClassInstallerを呼び出そうとすると、64ビットWindowsでエラーが発生します。SetupDiCallClassInstaller関数が64ビットプログラムに制限されているのはなぜですか?
明らかにこれは設計によるものですが、理由を知りたいと思います。
64ビットOS上で32ビットプロセスから呼び出しを行う場合、レジストリの64ビット部分の一部のレジストリキーを変更する必要があるため失敗します。 64ビットOS上で64ビットプロセスから呼び出しを行う場合は、32ビットOS上で32ビットプロセスでも同様に成功します。 MSDNによる
32ビットプロセスは、キーを開く/作成するときに 'KEY_WOW64_64KEY'フラグを使用して64ビットレジストリにアクセスすることができるため、WOW64でAPIが動作しない理由の制限要因であってはなりません。単にそのフラグを使用するAPIを有効にしていないだけです。 –
:
Device Installations on 64-Bit Systems:
UpdateDriverForPlugAndPlayDevicesによって返された値をチェックしなければならないアプリケーションの32ビットバージョン。戻り値がERROR_IN_WOW64の場合、32ビットアプリケーションは64ビットプラットフォームで実行されており、受信トレイドライバを更新することはできません。代わりに、アプリケーションの64ビットバージョンを起動するために、CreateProcess(Windows SDKのドキュメントを参照)を呼び出す必要があります。 64ビットバージョンでは、UpdateDriverForPlugAndPlayDevicesを呼び出して、すべてのファイルの64ビットバージョンの場所を識別するFullInfPathパラメータを指定できます。
だから、ERROR_IN_WOW64
が具体的WOW64で動作しないことを意図している報告するように設計された任意のAPIのように見える、32ビットプロセスは、APIを呼び出すために64ビットのプロセスを起動する必要があります。
こんにちは、私はWindows 7、64ビットマシンで "SetupDiCallClassInstaller"と同じ問題に直面しています。これに対する解決策は何ですか? – 2vision2
@ 2vision2これを手に入れたことで幸運が分かるのですか? – amadib
マイクロソフトでは、32ビット版のWow64エミュレータで実行できる32ビット版を実装していませんでした。それが偶然の項目であろうと技術的な制約であろうと、私は後者に対して投票します。 –