以编程方式安装NDIS筛选驱动程序

我正在尝试编写以编程方式安装NDIS 6.0轻量级筛选器驱动程序的C ++代码。 在审查了WinDDK,在线示例和MSDN文档后,我最终得到了下面的代码示例。 (为了清楚起见,error handling被跳过)问题是INetCfgClassSetup :: Install总是返回错误0x8004a024。 (我找不到头文件中的错误代码。)

使用相同的.inf文件手动安装驱动程序就可以。

WinDDK的Bindview示例安装驱动程序就好,只要它调用INetCfgClassSetup :: SelectAndInstall的path即可。 使用INetCfgClassSetup :: Install的替代path不起作用。

内核debugging在我的机器上启用,所以不需要驱动程序签名。

下面的代码有什么问题吗?

谢谢。

.... 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); 

错误代码0x8004a024代表NETCFG_E_NO_WRITE_LOCK。 安装函数需要写入锁定,所以尝试使用INetCfg-> AcquireWriteLock获取。 不要忘记最终释放锁和接口。