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 メソッドを呼び出すことによって、その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
Header ucxcontroller.h (Ucxclass.h を含む)
IRQL PASSIVE_LEVEL

こちらもご覧ください

UcxControllerCreate