_URB_CONTROL_TRANSFER 구조체(usb.h)
_URB_CONTROL_TRANSFER 구조는 USB 클라이언트 드라이버가 제어 파이프 간에 데이터를 전송하는 데 사용됩니다.
통사론
struct _URB_CONTROL_TRANSFER {
struct _URB_HEADER Hdr;
USBD_PIPE_HANDLE PipeHandle;
ULONG TransferFlags;
ULONG TransferBufferLength;
PVOID TransferBuffer;
PMDL TransferBufferMDL;
struct _URB *UrbLink;
struct _URB_HCD_AREA hca;
UCHAR SetupPacket[8];
};
회원
Hdr
URB 헤더 정보를 지정하는 _URB_HEADER 구조체에 대한 포인터입니다.
Hdr.Function URB_FUNCTION_CONTROL_TRANSFER 있어야 하며 hdr.Length sizeof(_URB_CONTROL_TRANSFER)
합니다.
PipeHandle
컨트롤 파이프에 대한 핸들입니다.
대상이 기본 컨트롤 엔드포인트인 경우 PipeHandle NULL 합니다. 이 경우 TransferFlags USBD_DEFAULT_PIPE_TRANSFER 플래그를 포함해야 합니다.
대상이 기본이 아닌 컨트롤 엔드포인트인 경우 PipeHandle 컨트롤 파이프에 대한 불투명 핸들을 지정합니다. 호스트 컨트롤러 드라이버는 클라이언트 드라이버가 URB_FUNCTION_SELECT_CONFIGURATION 형식의 URB를 사용하여 디바이스 구성을 선택하거나 클라이언트 드라이버가 URB_FUNCTION_SELECT_INTERFACE 형식의 URB를 사용하는 인터페이스에 대한 설정을 변경할 때 이 핸들을 반환합니다.
TransferFlags
다음 플래그의 0, 1 또는 조합을 지정합니다.
값 | 의미 |
---|---|
|
디바이스에서 데이터를 요청하도록 설정됩니다. 디바이스로 데이터를 전송하려면 이 플래그가 명확해야 합니다. |
|
디바이스로 데이터를 전송하도록 설정됩니다. 이 플래그를 설정하는 것은 USBD_TRANSFER_DIRECTION_IN 플래그를 지우는 것과 같습니다. |
|
호스트 컨트롤러가 엔드포인트의 최대 패킷 크기보다 짧은 패킷을 디바이스에서 수신할 때 오류를 반환하지 않도록 지시하도록 설정됩니다. 엔드포인트의 최대 패킷 크기는 기본 컨트롤 엔드포인트에 대한 USB_DEVICE_DESCRIPTOR 구조체(디바이스 설명자)의 bMaxPacketSize0 멤버에 보고됩니다. 기본이 아닌 컨트롤 엔드포인트의 경우 USB_ENDPOINT_DESCRIPTOR 구조체(엔드포인트 설명자)의 wMaxPacketSize 멤버에 최대 패킷 크기가 설정됩니다.
호스트 컨트롤러가 컨트롤 엔드포인트에서 wMaxPacketSize 값보다 짧은 패킷을 받으면 호스트 컨트롤러 유형에 따라 동작이 다음과 같습니다.
|
|
호스트 컨트롤러가 기본 컨트롤 파이프에서 컨트롤 전송을 수행하도록 지시하도록 설정됩니다. 이렇게 하면 호출자가 파이프 핸들을 명시적으로 지정하지 않고도 기본 제어 파이프로 명령을 보낼 수 있습니다. |
TransferBufferLength
TransferBuffer 지정되거나 TransferBufferMDL설명된 버퍼의 길이(바이트)를 지정합니다. 호스트 컨트롤러 드라이버는 이 멤버의 파이프에서 보내거나 읽은 바이트 수를 반환합니다.
TransferBuffer
전송에 대한 상주 버퍼에 대한 포인터이거나 TransferBufferMDLMDL이 제공된 경우 NULL . 이 버퍼의 내용은 TransferFlags값에 따라 달라집니다. USBD_TRANSFER_DIRECTION_IN 지정된 경우 이 버퍼는 호스트 컨트롤러 드라이버에서 반환될 때 디바이스에서 읽은 데이터를 포함합니다. 그렇지 않으면 이 버퍼에는 디바이스로 전송하기 위해 드라이버 제공 데이터가 포함됩니다.
TransferBufferMDL
TransferBuffer제공된 경우 상주 버퍼를 설명하거나 NULL MDL에 대한 포인터입니다. 버퍼의 내용은 TransferFlags값에 따라 달라집니다. USBD_TRANSFER_DIRECTION_IN 지정된 경우 설명된 버퍼에는 호스트 컨트롤러 드라이버에서 반환될 때 디바이스에서 읽은 데이터가 포함됩니다. 그렇지 않으면 버퍼에 디바이스로 전송하기 위해 드라이버 제공 데이터가 포함됩니다. 이 MDL은 페이지가 없는 풀에서 할당해야 합니다.
UrbLink
예약. 사용하지 마세요.
hca
예약. 사용하지 마세요.
SetupPacket[8]
USB 정의 요청 설정 패킷을 지정합니다. USB 요청 설정 패킷의 형식은 USB 코어 사양에 있습니다.
발언
URB_CONTROL_TRANSFER_EX 구조체는 제한 시간 필드에 시간 제한 값을 제공한다는 점을 제외하고 URB_CONTROL_TRANSFER동일합니다.
이 구조체의 예약 멤버는 불투명한 것으로 처리되어야 하며 시스템 사용을 위해 예약되어 있어야 합니다.
요구 사항
요구 | 값 |
---|---|
헤더 | usb.h(Usb.h 포함) |