функция обратного вызова EVT_UCX_CONTROLLER_USBDEVICE_ADD (ucxcontroller.h)
Реализация драйвера клиента, которая вызывается UCX при обнаружении нового USB-устройства.
Синтаксис
EVT_UCX_CONTROLLER_USBDEVICE_ADD EvtUcxControllerUsbdeviceAdd;
NTSTATUS EvtUcxControllerUsbdeviceAdd(
[in] UCXCONTROLLER UcxController,
[in] PUCXUSBDEVICE_INFO UcxUsbDeviceInfo,
[in] PUCXUSBDEVICE_INIT UsbDeviceInit
)
{...}
Параметры
[in] UcxController
Дескриптор контроллера UCX, который драйвер клиента получил в предыдущем вызове метода UcxControllerCreate .
[in] UcxUsbDeviceInfo
Указатель на структуру UCXUSBDEVICE_INFO .
[in] UsbDeviceInit
Указатель на непрозрачную структуру, содержащую сведения об инициализации. Обратные вызовы для объекта устройства связаны с этой структурой. Эта структура управляется UCX.
Возвращаемое значение
Если операция выполнена успешно, функция обратного вызова должна возвращать STATUS_SUCCESS или другое значение состояния, для которого NT_SUCCESS(status) равно TRUE. В противном случае он должен возвращать значение состояния, для которого NT_SUCCESS(status) равно FALSE.
Комментарии
Драйвер клиента UCX регистрирует свою реализацию EVT_UCX_CONTROLLER_USBDEVICE_ADD в расширении USB-контроллера узла (UCX), вызывая метод UcxControllerCreate .
Эта функция обратного вызова создает новый объект USB-устройства и регистрирует функции обратного вызова объекта USB-устройства, вызывая UcxUsbDeviceCreate. Функции может потребоваться выделить общий буфер, который будет использоваться в качестве контекста устройства.
Примеры
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;
}
Требования
Требование | Значение |
---|---|
Целевая платформа | Windows |
Минимальная версия KMDF | 1,0 |
Минимальная версия UMDF | 2,0 |
Верхняя часть | ucxcontroller.h (включая Ucxclass.h) |
IRQL | PASSIVE_LEVEL |