_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 플래그를 지우는 것과 같습니다. |
|
호스트 컨트롤러가 엔드포인트의 최대 패킷 크기보다 짧은 패킷을 디바이스에서 수신할 때 오류를 반환하지 않도록 지시하도록 설정됩니다. 엔드포인트의 최대 패킷 크기는 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
전송에 대한 상주 버퍼에 대한 포인터이거나 TransferBufferMDL에 MDL이 제공된 경우 NULL입니다. 이 버퍼의 내용은 TransferFlags의 값에 따라 달라집니다. USBD_TRANSFER_DIRECTION_IN 지정된 경우 이 버퍼는 호스트 컨트롤러 드라이버에서 반환될 때 디바이스에서 읽은 데이터를 포함합니다. 그렇지 않으면 이 버퍼에는 디바이스로 전송하기 위해 드라이버 제공 데이터가 포함됩니다.
TransferBufferMDL
상주 버퍼를 설명하는 MDL에 대한 포인터이거나 TransferBuffer에 버퍼가 제공된 경우 NULL입니다. 버퍼의 내용은 TransferFlags 값에 따라 달라집니다. USBD_TRANSFER_DIRECTION_IN 지정한 경우 설명된 버퍼에는 호스트 컨트롤러 드라이버에서 반환할 때 디바이스에서 읽은 데이터가 포함됩니다. 그렇지 않으면 버퍼에 디바이스로 전송하기 위해 드라이버 제공 데이터가 포함됩니다. 이 MDL은 페이지가 없는 풀에서 할당해야 합니다.
UrbLink
예약되어 있습니다. 사용하지 마십시오.
hca
예약되어 있습니다. 사용하지 마십시오.
설명
드라이버는 UsbBuildInterruptOrBulkTransferRequest 서비스 루틴을 사용하여 이 URB의 형식을 지정할 수 있습니다. TransferBuffer에 지정되거나 TransferBufferMDL에 설명된 버퍼는 페이징할 수 없어야 합니다.
URB에서 TransferBuffer 및 TransferBufferMDL 매개 변수는 모두 NULL이 아닌 값일 수 있습니다. 이 경우 전송 버퍼와 MDL이 TransferBuffer 및 TransferBufferMDL을 가리키는 동일한 버퍼를 가리킵니다.
USB 버스 드라이버는 DISPATCH_LEVEL 이 URB를 처리합니다.
이 구조체의 예약된 멤버는 불투명으로 처리되어야 하며 시스템 사용을 위해 예약되어 있어야 합니다.
요구 사항
| 헤더 | usb.h(Usb.h 포함) |
참고 항목
피드백
다음에 대한 사용자 의견 제출 및 보기