windows网络适配器驱动开发-开发 WiFiCx 客户端驱动程序(三) Wi-Fi 直接设备功能WIFI_WIFIDIRECT_CAPABILITIES 表示以前通过WDI_P2P_CAPABILITIES和WDI_AP_CAPABILITIES TLV 在 WDI 中设置的所有相关功能。 客户端驱动程序调用 WifiDeviceSetWiFiDirectCapabilities 以在设置设备功能阶段向 WiFiCx 报告 Wi-Fi 直接功能。WIFI_WIFIDIRECT_CAPABILITIES wfdCapabilities {}; // Set values wfdCapabilities.ConcurrentGOCount 1; wfdCapabilities.ConcurrentClientCount 1; // Report capabilities to WiFiCx WifiDeviceSetWiFiDirectCapabilities(Device, wfdCapabilities);Wi-Fi“WfdDevice”的直接事件回调对于 Wi-Fi Direct“WfdDevice”是一个没有数据路径功能的控件对象。 因此WiFiCx 具有名为 WIFIDIRECTDEVICE 的新 WDFObject。 在其 EvtWifiDeviceCreateWifiDirectDevice 回调函数中客户端驱动程序调用 WifiDirectDeviceCreate 以创建 WIFIDIRECTDEVICE 对象。调用 WifiDirectDeviceInitialize 以初始化对象。调用 WifiDirectDeviceGetPortId 来确定端口 ID在命令消息中使用。此示例演示如何创建和初始化 WIFIDIRECTDEVICE 对象。NTSTATUS EvtWifiDeviceCreateWifiDirectDevice( WDFDEVICE Device, WIFIDIRECT_DEVICE_INIT * WfdDeviceInit ) { WDF_OBJECT_ATTRIBUTES wfdDeviceAttributes; WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(wfdDeviceAttributes, WIFI_WFDDEVICE_CONTEXT); wfdDeviceAttributes.EvtCleanupCallback EvtWifiDirectDeviceContextCleanup; WIFIDIRECTDEVICE wfdDevice; NTSTATUS ntStatus WifiDirectDeviceCreate(WfdDeviceInit, wfdDeviceAttributes, wfdDevice); if (!NT_SUCCESS(ntStatus)) { TraceEvents(TRACE_LEVEL_ERROR, DBG_DEVICE, %!FUNC!: WifiDirectDeviceCreate failed, status0x%x\n, ntStatus); return ntStatus; } ntStatus WifiDirectDeviceInitialize(wfdDevice); if (!NT_SUCCESS(ntStatus)) { TraceEvents(TRACE_LEVEL_ERROR, DBG_DEVICE, %!FUNC!: WifiDirectDeviceInitialize failed with %!STATUS!\n, ntStatus); return ntStatus; } ntStatus ClientDriverInitWifiDirectDeviceContext( Device, wfdDevice, WifiDirectDeviceGetPortId(wfdDevice)); if (!NT_SUCCESS(ntStatus)) { TraceEvents(TRACE_LEVEL_ERROR, DBG_DEVICE, %!FUNC!: ClientDriverInitWifiDirectDeviceContext failed with %!STATUS!\n, ntStatus); return ntStatus; } return ntStatus; }