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 메서드를 호출하여 UCX(USB 호스트 컨트롤러 확장)에 이 콜백 함수를 등록합니다.
콜백 함수는 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 |
참고 항목
피드백
다음에 대한 사용자 의견 제출 및 보기