启动序列
下图显示了 NetAdapterCx 在将设备引入完全工作状态时,调用客户端驱动程序事件回调函数的顺序,这一过程从图中底部的设备到达状态开始。

宽横线标记启动设备所涉及的步骤。 图左侧的列描述了该步骤,右侧的列列出了完成该步骤的事件回调。 标有蓝色文本的步骤特定于 NetAdapterCx,而其他步骤则适用于所有基于 WDF 的驱动程序。
在图的底部,该设备不在系统上。 当用户插入设备时,框架首先调用驱动程序的 EvtDriverDeviceAdd 回调,以便驱动程序可以创建设备对象来表示设备。 该框架通过向上遍历序列来继续调用驱动程序的回调例程,直到设备可以运行为止。 请记住,框架按自下而上的顺序调用事件回调,如图所示,因此 EvtDeviceFilterRemoveResourceRequirements 会在 EvtDeviceFilterAddResourceRequirements 等之前被调用,以此类推。 如果设备停止重新平衡资源或实际存在,但处于低功率状态,则不需要执行所有步骤,如图所示。
断电顺序
下图显示了在关闭和删除设备时 NetAdapterCx 调用客户端驱动程序的事件回调函数的顺序。 序列从图的顶部开始,操作设备处于工作电源状态(D0):

宽横线标记关闭设备时所涉及的步骤。 图左侧的列描述了该步骤,右侧的列列出了完成该步骤的事件回调。 标有蓝色文本的步骤特定于 NetAdapterCx,而其他步骤则适用于所有基于 WDF 的驱动程序。
如图所示,断电和移除顺序涉及按相反的顺序调用相应的“撤销”回调,这个顺序与框架中调用使设备投入运行的函数顺序相反。 框架在删除设备对象上下文区域后删除设备对象。
访问配置信息
NetAdapterCx 类扩展支持一组函数,这些函数提供对客户端驱动程序注册表参数的访问。
通常,客户端驱动程序从其 EVT_WDF_DRIVER_DEVICE_ADD 回调函数读取配置信息。
对于 NetAdapter 对象,首先调用 NetAdapterOpenConfiguration 以获取配置对象的句柄。 然后,可以对其进行查询:
NETCONFIGURATION configuration;
status = NetAdapterOpenConfiguration(NetAdapter,
WDF_NO_OBJECT_ATTRIBUTES,
&configuration);
if (!NT_SUCCESS(status)) {
return status;
}
status = NetConfigurationQueryUlong(configuration,
NET_CONFIGURATION_QUERY_ULONG_NO_FLAGS,
&SomeValue,
&myvalue);
NetConfigurationClose(configuration);
打开和查询网络设备的配置对象是类似的:
status = NetDeviceOpenConfiguration(Device,
WDF_NO_OBJECT_ATTRIBUTES,
&configuration);
if(!NT_SUCCESS(status))
{
return status;
}
WDFCOLLECTION myStrings;
DECLARE_CONST_UNICODE_STRING(myValueName, L"ExampleValueName");
status = NetConfigurationQueryMultiString(configuration,
myValueName,
WDF_NO_OBJECT_ATTRIBUTES,
myStrings);
有一些 NetConfiguration* 函数可用于查询 ULONG 数据、字符串、多字符串 (类似于REG_MULTI_SZ) 、二进制 Blob 和软件可配置的网络地址。
- NetConfigurationAssignBinary
- NetConfigurationAssignMultiString
- NetConfigurationAssignUlong
- NetConfigurationAssignUnicodeString
- NetConfigurationClose
- NetConfigurationOpenSubConfiguration
- NetConfigurationQueryBinary
- NetConfigurationQueryMultiString
- NetConfigurationQueryLinkLayerAddress
- NetConfigurationQueryString
- NetConfigurationQueryUlong

322

被折叠的 条评论
为什么被折叠?



