2

プログラムでNDIS6.0軽量フィルタードライバーをインストールするC++コードを記述しようとしています。WinDDK、オンラインの例、MSDNドキュメントを確認した後、以下のコードサンプルを作成しました。(わかりやすくするためにエラー処理はスキップされます)問題は、INetCfgClassSetup::Installが常にエラー0x8004a024を返すことです。(ヘッダーファイルにエラーコードが見つかりませんでした。)

同じ.infファイルを使用したドライバーの手動インストールは問題なく機能します。

WinDDKのBindviewサンプルは、INetCfgClassSetup :: SelectAndInstallを呼び出すパスをとる限り、ドライバーを正常にインストールします。INetCfgClassSetup::Installを使用した代替パスは機能しません。

私のマシンではカーネルのデバッグが有効になっているため、ドライバーの署名は必要ありません。

以下のコードに何か問題がありますか?

ありがとう。

....
isCopied = SetupCopyOEMInfA(pathToInf, // path to inf file
                            pathToBin, // dir containing driver binary
                            SPOST_PATH,
                            0,
                            DestinationInfFileName,
                            256,
                            NULL,
                            NULL);
....
INetCfg      *pnc = NULL;
INetCfgClassSetup   *pncClassSetup = NULL;
HRESULT      hr;
OBO_TOKEN           OboToken;
....
hr = CoCreateInstance( CLSID_CNetCfg,
                       NULL, CLSCTX_INPROC_SERVER,
                       IID_INetCfg,
                       (void**)&pnc );
....
hr = pnc->QueryNetCfgClass ( &GUID_DEVCLASS_NETSERVICE,
                             IID_INetCfgClassSetup,
                             (void**)&pncClassSetup );
....
ZeroMemory( &OboToken, sizeof(OboToken) );
OboToken.Type = OBO_USER;
//
// this call fails:
hr = pncClassSetup->Install(COMPONENT_ID,
                            &OboToken,
                            0,
                            0,
                            0,
                            0,
                            NULL);
4

1 に答える 1

3

エラー コード 0x8004a024 は、NETCFG_E_NO_WRITE_LOCK を表します。インストール機能には書き込みロックが必要なので、INetCfg->AcquireWriteLock で取得してみてください。最終的にロックを解除してからインターフェースを解除することを忘れないでください。

于 2012-04-27T22:28:27.640 に答える