windows网络适配器驱动开发-NetAdapterCx 驱动程序的启动序列/断电顺序

启动序列

下图显示了 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员王马

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值