다음을 통해 공유


_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

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

대상이 기본 컨트롤 엔드포인트인 경우 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
디바이스에서 데이터를 요청하도록 설정됩니다. 디바이스로 데이터를 전송하려면 이 플래그가 명확해야 합니다.
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

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

TransferBufferMDL

TransferBuffer제공된 경우 상주 버퍼를 설명하거나 NULL MDL에 대한 포인터입니다. 버퍼의 내용은 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