EVT_UCX_CONTROLLER_USBDEVICE_ADD回呼函式 (ucxcontroller.h)
偵測到新 USB 裝置時,UCX 呼叫的用戶端驅動程式實作。
語法
EVT_UCX_CONTROLLER_USBDEVICE_ADD EvtUcxControllerUsbdeviceAdd;
NTSTATUS EvtUcxControllerUsbdeviceAdd(
[in] UCXCONTROLLER UcxController,
[in] PUCXUSBDEVICE_INFO UcxUsbDeviceInfo,
[in] PUCXUSBDEVICE_INIT UsbDeviceInit
)
{...}
參數
[in] UcxController
用戶端驅動程式在先前呼叫 UcxControllerCreate 方法時收到的 UCX 控制器句柄。
[in] UcxUsbDeviceInfo
UCXUSBDEVICE_INFO 結構的指標。
[in] UsbDeviceInit
包含初始化資訊的不透明結構的指標。 裝置物件的回呼與此結構相關聯。 此結構是由UCX管理。
傳回值
如果作業成功,回呼函式必須傳回STATUS_SUCCESS,或NT_SUCCESS(status) 等於 TRUE 的另一個狀態值。 否則,它必須傳回狀態值,NT_SUCCESS(status) 等於 FALSE。
言論
UCX 用戶端驅動程式會呼叫 UcxControllerCreate 方法,向 USB 主機控制器延伸模組 (UCX) 註冊其 EVT_UCX_CONTROLLER_USBDEVICE_ADD 實作。
此回呼函式會建立新的USB裝置物件,並藉由呼叫 UcxUsbDeviceCreate來註冊 USB 裝置物件回呼函式。 函式可能需要配置將用作裝置內容的通用緩衝區。
例子
NTSTATUS
UsbDevice_EvtControllerUsbDeviceAdd(
UCXCONTROLLER UcxController,
PUCXUSBDEVICE_INFO UsbDeviceInfo,
PUCXUSBDEVICE_INIT UsbDeviceInit
)
{
NTSTATUS status = STATUS_SUCCESS;
WDF_OBJECT_ATTRIBUTES objectAttributes;
UCX_USBDEVICE_EVENT_CALLBACKS callbacks;
UCXUSBDEVICE ucxUsbDevice;
PUCX_USB_DEVICE_CONTEXT ucxUsbDeviceContext;
WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(&objectAttributes, UCX_USB_DEVICE_CONTEXT);
//
// Set the event callbacks for the USB device.
//
UCX_USBDEVICE_EVENT_CALLBACKS_INIT(&callbacks,
UsbDevice_EvtUcxUsbDeviceEndpointsConfigure,
UsbDevice_EvtUcxUsbDeviceEnable,
UsbDevice_EvtUcxUsbDeviceDisable,
UsbDevice_EvtUcxUsbDeviceReset,
UsbDevice_EvtUcxUsbDeviceAddress,
UsbDevice_EvtUcxUsbDeviceUpdate,
UsbDevice_EvtUcxUsbDeviceHubInfo,
Endpoint_EvtUcxUsbDeviceDefaultEndpointAdd,
Endpoint_EvtUcxUsbDeviceEndpointAdd);
UcxUsbDeviceInitSetEventCallbacks(UsbDeviceInit, &callbacks);
//
// Create the device
//
status = UcxUsbDeviceCreate(UcxController,
&UsbDeviceInit,
&objectAttributes,
&ucxUsbDevice);
if (!NT_SUCCESS(status)) {
DbgTrace(TL_ERROR, UsbDevice, "UcxUsbDeviceCreate Failed %!STATUS!", status);
goto EvtControllerUsbDeviceAddEnd;
}
ucxUsbDeviceContext = GetUcxUsbDeviceContext(ucxUsbDevice);
ucxUsbDeviceContext->DeviceSpeed = UsbDeviceInfo->DeviceSpeed;
ucxUsbDeviceContext->TtHub = UsbDeviceInfo->TtHub;
RtlCopyMemory(&ucxUsbDeviceContext->PortPath,
&UsbDeviceInfo->PortPath,
sizeof(USB_DEVICE_PORT_PATH));
DbgTrace(TL_INFO, UsbDevice, "UsbDevice_EvtControllerUsbDeviceAdd");
EvtControllerUsbDeviceAddEnd:
return status;
}
要求
要求 | 價值 |
---|---|
目標平臺 | 窗戶 |
最低 KMDF 版本 | 1.0 |
最低 UMDF 版本 | 2.0 |
標頭 | ucxcontroller.h (include Ucxclass.h) |
IRQL | PASSIVE_LEVEL |