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

时间:2012-04-25 02:27:31

标签: windows networking driver ndis

我正在尝试以编程方式编写安装NDIS 6.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);

1 个答案:

答案 0 :(得分:3)

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