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 |