我有一个 NDIS 驱动程序,它在连接属性的已安装项目列表和设备管理器中都列出;问题是,我如何编写一个用于管理驱动程序属性的扩展,以及如何安装它?
当然,一个普通的 GUI 程序可以与驱动程序通信、设置属性、获取版本号和其他统计信息等,这就是 DeviceIoControl 存在的目的;但是,这是否意味着不存在通知驱动程序配置更改的专用接口?
如果有人可以将此问题转发到 eggheadcafe/osr 的 ntdev 列表,那就太好了。
我有一个 NDIS 驱动程序,它在连接属性的已安装项目列表和设备管理器中都列出;问题是,我如何编写一个用于管理驱动程序属性的扩展,以及如何安装它?
当然,一个普通的 GUI 程序可以与驱动程序通信、设置属性、获取版本号和其他统计信息等,这就是 DeviceIoControl 存在的目的;但是,这是否意味着不存在通知驱动程序配置更改的专用接口?
如果有人可以将此问题转发到 eggheadcafe/osr 的 ntdev 列表,那就太好了。
如果您希望网络驱动程序在 LAN 属性对话框中有一些 UI,那么您需要执行以下操作:
创建一个 NotifyObject(如果您还没有)
NotifyObject 本质上是一个与您的驱动程序关联的 COM 对象。做一个,
DllGetClassObject
,一个继承的 C++ 类来自CComObjectRoot
和CComCoClass
, 调用OBJECT_ENTRY_AUTO
, 和 aBEGIN_COM_MAP
如果您是 COM 新手。)ClsId={guid}
通过将和ComponentDll=filename
放入您的 INF将您的 COM 对象与驱动程序相关联。在 COM 对象上实现INetCfgComponentPropertyUi
关键方法是MergePropPages
。在此方法中,您分配属性表页面并将它们合并到适配器属性中。此操作类似于以下伪代码:
HPROPSHEETPAGE *psharray = CoTaskMemAlloc(NUMBER_OF_PAGES * sizeof(HPROPSHEETPAGE);
for (i = 0; i < NUMBER_OF_PAGES; i++)
psharray[i] = CreatePropertySheetPage(&psp);
API 是事务性的。确保在ApplyProperties
方法中应用任何更改,并(如果适用)在CancelProperties
.
QueryPropertyUi
or中执行任何操作SetContext
,但如果您需要获取注册表项位置,您可能希望保存上下文。测试您的更改
如果一切顺利,那么每次有任何网络配置更改时,都会加载新的通知对象。如果正在显示 GUI,则 Windows 将查询您的类以获取 INetCfgComponentPropertyUi 接口并调用MergePropPages
.
我发现在我的 DLL 中的关键位置放置硬编码断点很有帮助,然后附加一个内核调试器,这样我就可以始终找到 DLL,无论哪个进程正在加载它。(在 Windows 7 上,您将被加载到 drvinst.exe,使用用户模式调试器很难找到它。)