EVT_UCX_USBDEVICE_DEFAULT_ENDPOINT_ADD コールバック関数 (ucxusbdevice.h)
UCX が USB デバイスの新しい既定のエンドポイントを追加するために呼び出すクライアント ドライバーの実装。
構文
EVT_UCX_USBDEVICE_DEFAULT_ENDPOINT_ADD EvtUcxUsbdeviceDefaultEndpointAdd;
NTSTATUS EvtUcxUsbdeviceDefaultEndpointAdd(
[in] UCXCONTROLLER UcxController,
[in] UCXUSBDEVICE UcxUsbDevice,
[in] ULONG MaxPacketSize,
[in] PUCXENDPOINT_INIT UcxEndpointInit
)
{...}
パラメーター
[in] UcxController
UcxControllerCreate メソッドの以前の呼び出しでクライアント ドライバーが受信した UCX コントローラーへのハンドル。
[in] UcxUsbDevice
USB デバイスを表す UCX オブジェクトへのハンドル。
[in] MaxPacketSize
このエンドポイントでの転送の最大パケット サイズ。
[in] UcxEndpointInit
初期化情報を含む不透明な構造体へのポインター。 エンドポイント オブジェクトのコールバックは、この構造体に関連付けられます。 この構造は UCX によって管理されます。
戻り値
操作が成功した場合、コールバック関数は STATUS_SUCCESS、またはNT_SUCCESS(status) が TRUE と等しい別の状態値を返す必要があります。 それ以外の場合は、NT_SUCCESS(status) が FALSE の状態値を返す必要があります。
注釈
UCX クライアント ドライバーは、 UcxUsbDeviceCreate メソッドを呼び出すことによって、USB ホスト コントローラー拡張機能 (UCX) にこのコールバック関数を登録します。
コールバック関数は UcxEndpointCreate を呼び出して、新しい既定のエンドポイント オブジェクトを作成し、その既定のエンドポイント オブジェクトコールバック関数を登録します。
その後、コールバック関数は通常、エンドポイント オブジェクトに関連付けられた WDF キューを作成します。 クラス拡張機能によって開始されるまで、キューは要求を受け取りません。
例
NTSTATUS
Endpoint_EvtUcxUsbDeviceDefaultEndpointAdd(
UCXCONTROLLER UcxController,
UCXUSBDEVICE UcxUsbDevice,
ULONG MaxPacketSize,
PUCXENDPOINT_INIT EndpointInit
)
{
NTSTATUS status = STATUS_SUCCESS;
UCX_DEFAULT_ENDPOINT_EVENT_CALLBACKS ucxDefaultEndpointEventCallbacks;
WDF_OBJECT_ATTRIBUTES objectAttributes;
PUCX_CONTROLLER_CONTEXT ucxControllerContext;
UCXENDPOINT ucxEndpoint;
PUCX_ENDPOINT_CONTEXT ucxEndpointContext;
WDF_IO_QUEUE_CONFIG queueConfig;
WDFQUEUE wdfQueue;
UCX_DEFAULT_ENDPOINT_EVENT_CALLBACKS_INIT(&ucxDefaultEndpointEventCallbacks,
Endpoint_EvtUcxEndpointPurge,
Endpoint_EvtUcxEndpointStart,
Endpoint_EvtUcxEndpointAbort,
Endpoint_EvtUcxEndpointOkToCancelTransfers,
Endpoint_EvtUcxDefaultEndpointUpdate);
UcxDefaultEndpointInitSetEventCallbacks(EndpointInit, &ucxDefaultEndpointEventCallbacks);
WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(&objectAttributes, UCX_ENDPOINT_CONTEXT);
ucxControllerContext = GetUcxControllerContext(UcxController);
status = UcxEndpointCreate(UcxUsbDevice,
&EndpointInit,
&objectAttributes,
&ucxEndpoint);
if (!NT_SUCCESS(status)) {
DbgTrace(TL_ERROR, Endpoint, "UcxEndpoint Failed %!STATUS!", status);
goto EvtUsbDeviceDefaultEndpointAddEnd;
}
DbgTrace(TL_INFO, Endpoint, "UcxEndpoint created");
ucxEndpointContext = GetUcxEndpointContext(ucxEndpoint);
ucxEndpointContext->IsDefault = TRUE;
ucxEndpointContext->MaxPacketSize = MaxPacketSize;
WDF_IO_QUEUE_CONFIG_INIT(&queueConfig, WdfIoQueueDispatchManual);
status = WdfIoQueueCreate(ucxControllerContext->WdfDevice,
&queueConfig,
WDF_NO_OBJECT_ATTRIBUTES,
&wdfQueue);
if (!NT_SUCCESS(status)) {
DbgTrace(TL_ERROR, Endpoint, "WdfIoQueueCreate Failed %!STATUS!", status);
goto EvtUsbDeviceDefaultEndpointAddEnd;
}
UcxEndpointSetWdfIoQueue(ucxEndpoint, wdfQueue);
EvtUsbDeviceDefaultEndpointAddEnd:
return status;
}
要件
要件 | 値 |
---|---|
対象プラットフォーム | Windows |
最小 KMDF バージョン | 1.0 |
最小 UMDF バージョン | 2.0 |
Header | ucxusbdevice.h (Ucxclass.h を含む) |
IRQL | PASSIVE_LEVEL |