_URB_CONTROL_TRANSFER_EX 구조체(usb.h)

_URB_CONTROL_TRANSFER_EX 구조는 USB 클라이언트 드라이버가 제어 파이프에서 데이터를 전송하는 데 사용되며, 허용 가능한 전송 시간을 제한하는 시간 제한이 있습니다.

구문

struct _URB_CONTROL_TRANSFER_EX {
  struct _URB_HEADER   Hdr;
  USBD_PIPE_HANDLE     PipeHandle;
  ULONG                TransferFlags;
  ULONG                TransferBufferLength;
  PVOID                TransferBuffer;
  PMDL                 TransferBufferMDL;
  ULONG                Timeout;
  ULONG                Pad;
  struct _URB_HCD_AREA hca;
  UCHAR                SetupPacket[8];
};

멤버

Hdr

URB 헤더 정보를 지정하는 _URB_HEADER 구조체에 대한 포인터입니다. Hdr.Function 은 URB_FUNCTION_CONTROL_TRANSFER_EX, Hdr.Length 는 이어야 sizeof(_URB_CONTROL_TRANSFER_EX)합니다.

PipeHandle

파이프에 대한 핸들입니다.

target이 기본 제어 엔드포인트인 경우 PipeHandleNULL이어야 합니다. 이 경우 TransferFlags 에는 USBD_DEFAULT_PIPE_TRANSFER 플래그가 포함되어야 합니다.

target이 기본이 아닌 컨트롤 엔드포인트인 경우 PipeHandle 은 컨트롤 파이프에 대한 불투명 핸들을 지정합니다. 호스트 컨트롤러 드라이버는 클라이언트 드라이버가 URB_FUNCTION_SELECT_CONFIGURATION 형식의 URB를 사용하여 디바이스 구성을 선택하거나 클라이언트 드라이버가 URB_FUNCTION_SELECT_INTERFACE 형식의 URB를 사용하는 인터페이스에 대한 설정을 변경할 때 이 핸들을 반환합니다.

TransferFlags

다음 플래그의 0, 1 또는 조합을 지정합니다.

의미
USBD_TRANSFER_DIRECTION_IN
디바이스에서 데이터를 요청하도록 설정됩니다. 디바이스로 데이터를 전송하려면 이 플래그가 명확해야 합니다.
USBD_TRANSFER_DIRECTION_OUT
디바이스로 데이터를 전송하도록 설정됩니다. 이 플래그를 설정하는 것은 USBD_TRANSFER_DIRECTION_IN 플래그를 지우는 것과 같습니다.
USBD_SHORT_TRANSFER_OK
엔드포인트의 최대 패킷 크기보다 짧은 디바이스에서 패킷을 수신할 때 호스트 컨트롤러가 오류를 반환하지 않도록 지시하도록 설정됩니다. 엔드포인트의 최대 패킷 크기는 기본 제어 엔드포인트에 대한 USB_DEVICE_DESCRIPTOR 구조체(디바이스 설명자)의 bMaxPacketSize0 멤버에 보고됩니다. 기본이 아닌 컨트롤 엔드포인트의 경우 최대 패킷 크기는 USB_ENDPOINT_DESCRIPTOR 구조체(엔드포인트 설명자)의 wMaxPacketSize 멤버에 설정됩니다.

호스트 컨트롤러가 컨트롤 엔드포인트에서 wMaxPacketSize 값보다 길이가 짧은 패킷을 받으면 호스트 컨트롤러의 유형에 따라 동작이 다음과 같습니다.

  • EHCI 호스트 컨트롤러에서 호스트 컨트롤러는 제어 전송의 상태 단계로 즉시 진행됩니다. USBD_SHORT_TRANSFER_OK 설정되었는지 여부에 관계없이 전송이 성공적으로 완료됩니다.
  • UHCI 및 OHCI 호스트 컨트롤러에서 USBD_SHORT_TRANSFER_OK 설정된 경우 호스트 컨트롤러는 상태 단계로 진행됩니다. USBD_SHORT_TRANSFER_OK 설정되지 않은 경우 호스트 컨트롤러는 제어 전송의 데이터 및 상태 단계를 중단하고 오류와 함께 전송이 완료됩니다.
USBD_DEFAULT_PIPE_TRANSFER
기본 제어 파이프에서 컨트롤 전송을 수행하도록 호스트 컨트롤러에 지시하도록 설정됩니다. 이렇게 하면 호출자가 파이프 핸들을 명시적으로 지정하지 않고도 명령을 기본 제어 파이프로 보낼 수 있습니다.

TransferBufferLength

TransferBuffer에 지정되거나 TransferBufferMDL 설명된 버퍼의 길이(바이트)를 지정합니다. 호스트 컨트롤러 드라이버는 이 멤버의 파이프에서 보내거나 읽은 바이트 수를 반환합니다.

TransferBuffer

전송에 대한 상주 버퍼에 대한 포인터이거나, MDL이 TransferBufferMDL에 제공된 경우 NULL입니다. 이 버퍼의 내용은 TransferFlags 값에 따라 달라집니다. USBD_TRANSFER_DIRECTION_IN 지정된 경우 이 버퍼는 호스트 컨트롤러 드라이버에서 반환될 때 디바이스에서 읽은 데이터를 포함합니다. 그렇지 않으면 이 버퍼에는 디바이스로 전송하기 위해 드라이버에서 제공한 데이터가 포함됩니다.

TransferBufferMDL

상주 버퍼를 설명하는 MDL에 대한 포인터이거나, 버퍼가 TransferBuffer에 제공된 경우 NULL입니다. 버퍼의 내용은 TransferFlags 값에 따라 달라집니다. USBD_TRANSFER_DIRECTION_IN 지정한 경우 설명된 버퍼에는 호스트 컨트롤러 드라이버에서 반환할 때 디바이스에서 읽은 데이터가 포함됩니다. 그렇지 않으면 버퍼에 디바이스로 전송하기 위해 드라이버 제공 데이터가 포함됩니다. 이 MDL은 페이지가 없는 풀에서 할당해야 합니다.

Timeout

URB 시간이 초과되기 전의 시간(밀리초)을 나타냅니다. 값이 0이면 이 URB에 대한 시간 제한이 없음을 나타냅니다.

Pad

예약되어 있습니다. 사용하지 마십시오.

hca

예약되어 있습니다. 사용하지 마십시오.

SetupPacket[8]

USB 정의 요청 설정 패킷을 지정합니다. USB 요청 설정 패킷의 형식은 USB 코어 사양에 있습니다.

설명

이 URB 구조는 시간 제한 멤버가 URB에 대한 시간 제한을 설정한다는 점을 제외하고 _URB_CONTROL_TRANSFER 동일합니다.

이 구조체의 예약 멤버는 불투명으로 처리되어야 하며 시스템 사용을 위해 예약되어 있어야 합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows Vista 이상 운영 체제에서 사용할 수 있습니다.
머리글 usb.h(Usb.h 포함)

추가 정보

Urb

USB 구조체

_URB_CONTROL_TRANSFER

_URB_HEADER