2012-04-25 65 views
2

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

使用相同的.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); 

回答

3

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

+0

有道理。不幸的是,获得一个锁并没有解决问题。错误代码更改为800f0203。 – glagolig 2012-04-27 23:00:34

+0

原来我在QueryNetCfgClass(GUID_DEVCLASS_NETTRANS而不是GUID_DEVCLASS_NETSERVICE)中使用了错误的GUID。使用正确的GUID一切正常。 – glagolig 2012-04-28 02:12:05

相关问题