_URB_CONTROL_VENDOR_OR_CLASS_REQUEST 구조체(usb.h)

_URB_CONTROL_VENDOR_OR_CLASS_REQUEST 구조는 USB 클라이언트 드라이버에서 디바이스, 인터페이스, 엔드포인트 또는 기타 디바이스 정의 대상에 공급업체 또는 클래스별 명령을 발급하는 데 사용됩니다.

구문

struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST {
  struct _URB_HEADER   Hdr;
  PVOID                Reserved;
  ULONG                TransferFlags;
  ULONG                TransferBufferLength;
  PVOID                TransferBuffer;
  PMDL                 TransferBufferMDL;
  struct _URB          *UrbLink;
  struct _URB_HCD_AREA hca;
  UCHAR                RequestTypeReservedBits;
  UCHAR                Request;
  USHORT               Value;
  USHORT               Index;
  USHORT               Reserved1;
};

멤버

Hdr

URB 헤더 정보를 지정하는 _URB_HEADER 구조체에 대한 포인터입니다. Hdr.Function 은 URB_FUNCTION_CLASS_XXX 또는 URB_FUNCTION_VENDOR_XXX GET_STATUS 중 하나여야 하며 Hdr.Length 는 이어야 sizeof(_URB_CONTROL_VENDOR_OR_CLASS_REQUEST)합니다.

Reserved

TransferFlags

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

의미
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_TRANSFER_DIRECTION_IN 설정되지 않는 한 이 플래그를 설정하면 안 됩니다.

TransferBufferLength

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

TransferBuffer

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

TransferBufferMDL

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

UrbLink

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

hca

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

RequestTypeReservedBits

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

Request

디바이스, 인터페이스, 엔드포인트 또는 기타 디바이스 정의 대상에 대한 USB 또는 공급업체 정의 요청 코드를 지정합니다.

Value

대상에 대한 USB 정의 설정 패킷의 일부가 되는 요청과 관련된 값을 지정합니다. 이 값은 요청에 사용되는 코드 작성자에 의해 정의됩니다.

Index

요청이 엔드포인트 또는 인터페이스에 대한 경우 성공적인 구성 요청에 의해 반환되는 디바이스 정의 인덱스를 지정합니다. 그렇지 않으면 인덱스가 0이어야 합니다.

Reserved1

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

설명

드라이버는 이 URB의 UsbBuildVendorRequest 서비스 루틴 형식을 사용할 수 있습니다.

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

요구 사항

   
헤더 usb.h(Usb.h 포함)

참고 항목

Urb

USB 구조체

_URB_HEADER