上篇《Windows 驱动开发 - 2》我们已经添加了事件,但是我们还没有增加内容。
对于USB来说主要进行2步操作:
1. 建立USB目标
使用方法来建立USB设备。
-
NTSTATUS WdfUsbTargetDeviceCreate(
-
[in] WDFDEVICE Device,
-
[in, optional] PWDF_OBJECT_ATTRIBUTES Attributes,
-
[out] WDFUSBDEVICE *UsbDevice
-
);
(1) Context
为了针对USB设备,我们需要建立一个带USBDEVICE成员的结构指针。
-
typedef struct _DEVICE_CONTEXT {
-
WDFUSBDEVICE UsbDevice;
-
WDFUSBINTERFACE UsbInterface;
-
} DEVICE_CONTEXT, *PDEVICE_CONTEXT;
(2) Create Usb
-
status = WdfUsbTargetDeviceCreate(Device,
-
WDF_NO_OBJECT_ATTRIBUTES,
-
&pDeviceContext->UsbDevice);
2. 配置他
使用方法来配置usb设备。
-
NTSTATUS WdfUsbTargetDeviceSelectConfig(
-
[in] WDFUSBDEVICE UsbDevice,
-
[in, optional] PWDF_OBJECT_ATTRIBUTES PipeAttributes,
-
[in, out] PWDF_USB_DEVICE_SELECT_CONFIG_PARAMS Params
-
);
(1) 初始化USB配置
使用
-
VOID WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_SINGLE_INTERFACE(
-
_Out_ PWDF_USB_DEVICE_SELECT_CONFIG_PARAMS Params
-
);
初始化结构变量地址。
-
WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_SINGLE_INTERFACE(&configParams);
(2) 完成配置
-
status = WdfUsbTargetDeviceSelectConfig(pDeviceContext->UsbDevice,
-
WDF_NO_OBJECT_ATTRIBUTES,
-
&configParams);
附:代码(EvtDevicePrepareHardware事件)
-
NTSTATUS
-
EvtDevicePrepareHardware(
-
IN WDFDEVICE Device,
-
IN WDFCMRESLIST ResourceList,
-
IN WDFCMRESLIST ResourceListTranslated
-
)
-
{
-
NTSTATUS status;
-
PDEVICE_CONTEXT pDeviceContext;
-
WDF_USB_DEVICE_SELECT_CONFIG_PARAMS configParams;
-
-
UNREFERENCED_PARAMETER(ResourceList);
-
UNREFERENCED_PARAMETER(ResourceListTranslated);
-
-
pDeviceContext = GetDeviceContext(Device);
-
-
//
-
// Create the USB device if it is not already created.
-
//
-
if (pDeviceContext->UsbDevice == NULL) {
-
status = WdfUsbTargetDeviceCreate(Device,
-
WDF_NO_OBJECT_ATTRIBUTES,
-
&pDeviceContext->UsbDevice);
-
if (!NT_SUCCESS(status)) {
-
KdPrint(("WdfUsbTargetDeviceCreate failed 0x%x\n", status));
-
return status;
-
}
-
}
-
-
WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_SINGLE_INTERFACE(&configParams);
-
-
status = WdfUsbTargetDeviceSelectConfig(pDeviceContext->UsbDevice,
-
WDF_NO_OBJECT_ATTRIBUTES,
-
&configParams);
-
if(!NT_SUCCESS(status)) {
-
KdPrint(("WdfUsbTargetDeviceSelectConfig failed 0x%x\n", status));
-
return status;
-
}
-
-
pDeviceContext->UsbInterface =
-
configParams.Types.SingleInterface.ConfiguredUsbInterface;
-
-
return status;
-
}
阅读(1258) | 评论(0) | 转发(0) |