【问题标题】:programmatically installing NDIS filter driver以编程方式安装 NDIS 过滤器驱动程序
【发布时间】:2012-05-05 17:16:21
【问题描述】:

我正在尝试编写 C++ 代码以编程方式安装 NDIS 6.0 轻量级过滤器驱动程序。 在查看了 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);

【问题讨论】:

    标签: windows networking driver ndis


    【解决方案1】:

    错误代码 0x8004a024 代表 NETCFG_E_NO_WRITE_LOCK。安装功能需要一个写锁,所以尝试使用 INetCfg->AcquireWriteLock 获得一个。不要忘记最终释放锁,然后释放接口。

    【讨论】:

    • 有道理。不幸的是,获得锁并没有解决问题。错误代码更改为 800f0203 。
    • 原来我在 QueryNetCfgClass 中使用了错误的 GUID(GUID_DEVCLASS_NETTRANS 而不是 GUID_DEVCLASS_NETSERVICE)。使用正确的 GUID 一切正常。
    猜你喜欢
    • 2020-03-19
    • 2014-04-06
    • 2013-11-15
    • 2011-01-18
    • 2016-02-23
    • 1970-01-01
    • 2012-02-02
    • 1970-01-01
    • 2013-08-20
    相关资源
    最近更新 更多