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 (状态) 等于 TRUE 的另一个状态值。 否则,它必须返回NT_SUCCESS (状态) 等于 FALSE 的状态值。

注解

UCX 客户端驱动程序通过调用 UcxControllerCreate 方法将其EVT_UCX_CONTROLLER_USBDEVICE_ADD实现注册到 USB 主机控制器扩展 (UCX) 。

此回调函数创建新的 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;
}

要求

要求
目标平台 Windows
最低 KMDF 版本 1.0
最低 UMDF 版本 2.0
标头 ucxcontroller.h (包括 Ucxclass.h)
IRQL PASSIVE_LEVEL

另请参阅

UcxControllerCreate