다음을 통해 공유


_URB_BULK_OR_INTERRUPT_TRANSFER 구조체(usb.h)

_URB_BULK_OR_INTERRUPT_TRANSFER 구조는 USB 클라이언트 드라이버가 대량 파이프 또는 인터럽트 파이프에서 데이터를 보내거나 받는 데 사용됩니다.

구문

struct _URB_BULK_OR_INTERRUPT_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;
};

멤버

Hdr

URB 헤더 정보를 지정하는 _URB_HEADER 구조체에 대한 포인터입니다. Hdr.Function 은 URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER, Hdr.Length 는 로 sizeof(_URB_BULK_OR_INTERRUPT_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_ENDPOINT_DESCRIPTOR 구조체(엔드포인트 설명자)의 wMaxPacketSize 멤버에 보고됩니다. 호스트 컨트롤러가 대량 또는 인터럽트 엔드포인트에서 wMaxPacketSize 보다 짧은 패킷을 받으면 호스트 컨트롤러는 즉시 엔드포인트에서 데이터 요청을 중지하고 전송을 완료합니다. USBD_SHORT_TRANSFER_OK 플래그가 설정되지 않은 경우 호스트 컨트롤러는 오류와 함께 전송을 완료합니다.

USBD_TRANSFER_DIRECTION_IN 설정되지 않는 한 이 플래그를 설정하면 안 됩니다. 참고 EHCI 호스트 컨트롤러에서 대량 및 인터럽트 엔드포인트에 대해 USBD_SHORT_TRANSFER_OK 무시됩니다. EHCI 컨트롤러에서 짧은 패킷을 전송해도 오류 조건이 발생하지 않습니다.

UHCI 및 OHCI 호스트 컨트롤러에서 대량 또는 인터럽트 전송에 대해 USBD_SHORT_TRANSFER_OK 설정되지 않은 경우 짧은 패킷 전송은 엔드포인트를 중지하고 전송에 대한 오류 코드가 반환됩니다. 클라이언트 드라이버는 엔드포인트에 전송 요청을 제출하기 전에 URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL 요청을 제출하여 엔드포인트를 다시 시작해야 합니다.

TransferBufferLength

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

TransferBuffer

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

TransferBufferMDL

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

UrbLink

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

hca

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

설명

드라이버는 UsbBuildInterruptOrBulkTransferRequest 서비스 루틴을 사용하여 이 URB의 형식을 지정할 수 있습니다. TransferBuffer에 지정되거나 TransferBufferMDL에 설명된 버퍼는 페이지를 지정할 수 없어야 합니다.

URB에서 TransferBufferTransferBufferMDL 매개 변수는 동시에 NULL이 아닌 값일 수 있습니다. 이 경우 전송 버퍼와 MDL이 TransferBuffer 및 TransferBufferMDL을 가리키는 동일한 버퍼를 가리킵니다.

USB 버스 드라이버는 DISPATCH_LEVEL 이 URB를 처리합니다.

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

요구 사항

요구 사항
헤더 usb.h(Usb.h 포함)

추가 정보

Urb

USB 구조체

_URB_HEADER