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 (状态) 等於 TRUE 的另一個狀態值。 否則,它必須傳回狀態值,NT_SUCCESS (状态) 等於 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
標頭 ucxusbdevice.h (包含 Ucxclass.h)
IRQL PASSIVE_LEVEL

另請參閱