9

32 ビット モードでコンパイルされたプログラムから SetupDiCallClassInstaller を呼び出そうとすると、64 ビット Windows で失敗します。

どうやらこれは仕様のようですが、理由を知りたいです。

4

2 に答える 2

3

MSDNによると:

64 ビット システムでのデバイスのインストール:

アプリケーションの 32 ビット バージョンは、UpdateDriverForPlugAndPlayDevices によって返される値を確認する必要があります。戻り値が ERROR_IN_WOW64 の場合、32 ビット アプリケーションは 64 ビット プラットフォームで実行されており、インボックス ドライバーを更新できません。代わりに、CreateProcess (Windows SDK のドキュメントで説明されています) を呼び出して、64 ビット バージョンのアプリケーションを起動する必要があります。次に、64 ビット バージョンは UpdateDriverForPlugAndPlayDevices を呼び出し、すべてのファイルの 64 ビット バージョンの場所を識別する FullInfPath パラメーターを指定します。

したがって、報告するように設計された API は、WOW64 で動作しないように特別に意図されているように見えますERROR_IN_WOW64。32 ビット プロセスは、API を呼び出すために 64 ビット プロセスを呼び出す必要があります。

于 2014-08-08T17:50:14.690 に答える
-1

64 ビット OS 上の 32 ビット プロセスからその呼び出しを行っている場合、レジストリの 64 ビット部分のいくつかのレジストリ キーを変更する必要があるため失敗します。それ以外の場合、64 ビット OS 上の 64 ビット プロセスからその呼び出しを行う場合、32 ビット OS 上の 32 ビット プロセスでも同様に成功します。

于 2014-08-08T16:23:31.657 に答える