다음을 통해 공유


_URB_HEADER 구조체(usb.h)

_URB_HEADER 구조는 USB 클라이언트 드라이버에서 호스트 컨트롤러 드라이버로 전송되는 요청에 대한 기본 정보를 제공하는 데 사용됩니다.

구문

struct _URB_HEADER {
  USHORT      Length;
  USHORT      Function;
  USBD_STATUS Status;
  PVOID       UsbdDeviceHandle;
  ULONG       UsbdFlags;
};

멤버

Length

URB의 길이(바이트)를 지정합니다. _URB_HEADER 이외의 데이터 구조를 사용하는 URB 요청의 경우 이 멤버는 _URB_HEADER 크기가 아닌 전체 URB 요청 구조의 길이로 설정해야 합니다.

Function

이 URB에 대해 요청된 작업을 나타내는 숫자 코드를 지정합니다. 다음 값 중 하나를 설정해야 합니다.

URB_FUNCTION_SELECT_CONFIGURATION

구성을 선택할 호스트 컨트롤러 드라이버에 나타냅니다. 설정된 경우 URB는 데이터 구조로 URB_SELECT_CONFIGURATION 함께 사용됩니다.

URB_FUNCTION_SELECT_INTERFACE

인터페이스에 대해 대체 인터페이스 설정이 선택되고 있음을 호스트 컨트롤러 드라이버에 나타냅니다. 설정된 경우 URB는 데이터 구조로 _URB_SELECT_INTERFACE 함께 사용됩니다.

URB_FUNCTION_ABORT_PIPE

파이프에 대한 모든 미해결 요청을 취소해야 했음을 나타냅니다. 설정된 경우 URB는 데이터 구조로 _URB_PIPE_REQUEST 함께 사용됩니다. 이 범용 요청을 사용하면 클라이언트가 지정된 파이프에 대해 보류 중인 모든 전송을 취소할 수 있습니다. 파이프 상태 및 엔드포인트 상태는 영향을 받지 않습니다. 모든 미해결 요청이 완료되기 전에 중단 요청이 완료될 수 있습니다. 중단 요청의 완료가 다른 모든 미해결 요청이 완료되었다는 것을 의미한다고 가정 하지 마세요.

URB_FUNCTION_TAKE_FRAME_LENGTH_CONTROL

이 URB 함수는 Windows 2000 이상 운영 체제에서 더 이상 사용되지 않으며 Microsoft에서 지원되지 않습니다. 사용하지 마십시오. URB 요청으로 이 함수를 지정하면 요청이 실패하고 시스템에서 오류를 보고합니다.

URB_FUNCTION_RELEASE_FRAME_LENGTH_CONTROL

이 URB 함수는 Windows 2000 이상 운영 체제에서 더 이상 사용되지 않으며 Microsoft에서 지원되지 않습니다. 사용하지 마십시오. URB 요청으로 이 함수를 지정하면 요청이 실패하고 시스템에서 오류를 보고합니다.

URB_FUNCTION_GET_FRAME_LENGTH

이 URB 함수는 Windows 2000 이상 운영 체제에서 더 이상 사용되지 않으며 Microsoft에서 지원되지 않습니다. 사용하지 마십시오. URB 요청과 함께 이 함수를 사용하는 경우 요청이 실패하고 시스템에서 오류를 보고합니다.

URB_FUNCTION_SET_FRAME_LENGTH

이 URB 함수는 Windows 2000 이상 운영 체제에서 더 이상 사용되지 않으며 Microsoft에서 지원되지 않습니다. 사용하지 마십시오. URB 요청과 함께 사용하는 경우 요청이 실패하고 시스템에서 오류를 보고합니다.

URB_FUNCTION_GET_CURRENT_FRAME_NUMBER

호스트 컨트롤러 드라이버에서 현재 프레임 번호를 요청합니다. 설정된 경우 URB는 데이터 구조로 _URB_GET_CURRENT_FRAME_NUMBER 함께 사용됩니다.

URB_FUNCTION_CONTROL_TRANSFER

제어 파이프로 또는 컨트롤 파이프에서 데이터를 전송합니다. 설정된 경우 URB는 데이터 구조로 _URB_CONTROL_TRANSFER 함께 사용됩니다.

URB_FUNCTION_CONTROL_TRANSFER_EX

시간 제한 값으로 지정된 시간 제한 없이 컨트롤 파이프로 또는 컨트롤 파이프에서 데이터를 전송합니다. 설정된 경우 URB는 데이터 구조로 URB_CONTROL_TRANSFER_EX 함께 사용됩니다.

Windows Vista 이상 운영 체제에서 사용할 수 있습니다.

URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER

대량 파이프 또는 인터럽트 파이프 또는 대량 파이프로 데이터를 전송합니다. 설정된 경우 URB는 데이터 구조로 _URB_BULK_OR_INTERRUPT_TRANSFER 함께 사용됩니다.

URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER_USING_CHAINED_MDL

연결된 MDL을 사용하여 대량 파이프 또는 인터럽트 파이프에서 데이터를 전송합니다. 설정된 경우 URB는 데이터 구조로 _URB_BULK_OR_INTERRUPT_TRANSFER 함께 사용됩니다. 클라이언트 드라이버는 TransferBufferMDL 멤버를 전송 버퍼를 포함하는 체인의 첫 번째 MDL 구조로 설정해야 합니다. USB 드라이버 스택은 이 URB를 처리할 때 TransferBuffer 멤버를 무시합니다.

Windows 8 사용할 수 있습니다. 연결된 MDL을 사용하는 방법에 대한 자세한 내용은 연결된 MDL을 보내는 방법">연결된 MDL을 보내는 방법을 참조하세요.

URB_FUNCTION_ISOCH_TRANSFER

등시 파이프로 또는 다른 파이프에서 데이터를 전송합니다. 설정된 경우 URB는 데이터 구조로 _URB_ISOCH_TRANSFER 함께 사용됩니다.

URB_FUNCTION_ISOCH_TRANSFER_USING_CHAINED_MDL

연결된 MDL을 사용하여 등시 파이프로 데이터를 전송합니다. 설정된 경우 URB는 데이터 구조로 _URB_ISOCH_TRANSFER 함께 사용됩니다. 클라이언트 드라이버는 TransferBufferMDL 멤버를 전송 버퍼를 포함하는 체인의 첫 번째 MDL 로 설정해야 합니다. USB 드라이버 스택은 이 URB를 처리할 때 TransferBuffer 멤버를 무시합니다.

Windows 8 사용할 수 있습니다. 연결된 MDL을 사용하는 방법에 대한 자세한 내용은 연결된 MDL을 보내는 방법">연결된 MDL을 보내는 방법을 참조하세요.

URB_FUNCTION_RESET_PIPE

URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL 참조하세요.

URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL

표시된 파이프를 다시 설정합니다. 설정된 경우 이 URB는 _URB_PIPE_REQUEST 함께 사용됩니다.

참고

이 URB는 URB_FUNCTION_RESET_PIPE 대체합니다.

버스 드라이버는 이 URB에 대한 응답으로 세 가지 작업을 수행합니다.

먼저 등시 파이프를 제외한 모든 파이프에 대해 이 URB는 CLEAR_FEATURE 요청을 보내 디바이스의 ENDPOINT_HALT 기능을 지웁니다.

둘째, USB 버스 드라이버는 USB 사양에 따라 호스트 쪽에서 데이터 토글을 다시 설정합니다. 버스 드라이버가 ENDPOINT_HALT 기능을 지울 때 USB 디바이스는 디바이스 쪽에서 데이터 토글을 다시 설정해야 합니다. 일부 비준수 디바이스는 이 기능을 지원하지 않으므로 Microsoft는 두 개의 추가 URL인 URB_FUNCTION_SYNC_CLEAR_STALL 및 URB_FUNCTION_SYNC_RESET_PIPE 제공합니다. 이를 통해 클라이언트 드라이버는 호스트 쪽의 데이터 토글에 영향을 주지 않고 디바이스의 ENDPOINT_HALT 기능을 지우거나 호스트 쪽의 파이프를 각각 다시 설정할 수 있습니다. 디바이스가 데이터 토글을 다시 설정하지 않으면 클라이언트 드라이버는 호스트 쪽 데이터 토글을 다시 설정하지 않음으로써 이 결함을 보완할 수 있습니다. 데이터 토글이 호스트 쪽에서 다시 설정되지만 디바이스 쪽에서는 초기화되지 않으면 패킷이 순서를 벗어나고 디바이스가 패킷을 삭제할 수 있습니다.

셋째, 버스 드라이버가 파이프를 성공적으로 재설정한 후 대기하는 다음 URB를 사용하여 전송을 다시 시작합니다.

파이프 재설정 후 다음 큐에 대기된 URB를 사용하여 전송을 다시 시작합니다.

기본 제어 파이프에서 중단 조건을 지울 필요는 없습니다. 기본 제어 파이프는 항상 설정 패킷을 허용해야 하므로 중지되면 USB 스택이 자동으로 중단 조건을 지웁니다. 클라이언트 드라이버는 기본 파이프에서 중단 조건을 지우기 위해 특별한 조치를 취할 필요가 없습니다.

파이프를 다시 설정하기 전에 모든 전송을 중단하거나 취소해야 합니다.

이 URB는 PASSIVE_LEVEL 보내야 합니다.

URB_FUNCTION_SYNC_RESET_PIPE

파이프의 호스트 쪽에서 중단 조건을 지웁니다. 설정된 경우 이 URB는 데이터 구조로 _URB_PIPE_REQUEST 함께 사용됩니다.

이 URB를 사용하면 클라이언트가 데이터 토글을 다시 설정하지 않고 엔드포인트 중단 조건(기능 ENDPOINT_HALT)을 지우지 않고 파이프의 중지된 상태를 지울 수 있습니다. 파이프에서 중단 조건을 지우려면 호스트 쪽 데이터 토글을 다시 설정하여 단일 작업으로 디바이스의 중단을 지우려면 URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL 사용합니다.

다음 상태 코드는 중요하며 표시된 의미를 갖습니다.

USBD_STATUS_INVALID_PIPE_HANDLE

PipeHandle이 잘못되었습니다.

USBD_STATUS_ERROR_BUSY

엔드포인트에 활성 전송이 보류 중입니다.

기본 제어 파이프에서 중단 조건을 지울 필요는 없습니다. 기본 제어 파이프는 항상 설정 패킷을 허용해야 하므로 중지되면 USB 스택이 자동으로 중단 조건을 지웁니다. 클라이언트 드라이버는 기본 파이프에서 중단 조건을 지우기 위해 특별한 조치를 취할 필요가 없습니다.

파이프를 다시 설정하기 전에 모든 전송을 중단하거나 취소해야 합니다.

이 URB는 PASSIVE_LEVEL 보내야 합니다.

Windows XP 이상 운영 체제에서 사용할 수 있습니다.

URB_FUNCTION_SYNC_CLEAR_STALL

엔드포인트에서 중단 조건을 지웁니다. 등시 파이프를 제외한 모든 파이프의 경우 이 URB는 디바이스의 ENDPOINT_HALT 기능을 지우기 위해 CLEAR_FEATURE 요청을 보냅니다. 그러나 RB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL 함수와 달리 이 URB 함수는 파이프의 호스트 쪽에서 데이터 토글을 다시 설정하지 않습니다. USB 사양을 사용하려면 클라이언트가 디바이스의 ENDPOINT_HALT 기능을 지워도 디바이스 쪽 데이터 토글을 다시 설정해야 하지만 일부 비준수 디바이스는 데이터 토글을 제대로 다시 설정하지 않습니다. 이러한 디바이스를 관리하는 클라이언트 드라이버는 파이프를 URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL 다시 설정하는 대신 URB_FUNCTION_SYNC_CLEAR_STALL 직접 중단 조건을 지우면 이 결함을 보완할 수 있습니다. URB_FUNCTION_SYNC_CLEAR_STALL 호스트 쪽 데이터 토글을 다시 설정하지 않고 디바이스의 중단 조건을 지웁니다. 이렇게 하면 비준수 디바이스가 다음 패킷을 재전송으로 해석하고 패킷을 삭제할 수 없습니다.

설정된 경우 URB는 데이터 구조로 _URB_PIPE_REQUEST 함께 사용됩니다.

이 URB 함수는 PASSIVE_LEVEL

Windows XP 이상 운영 체제에서 사용할 수 있습니다.

URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE

특정 USB 디바이스에서 디바이스 설명자를 검색합니다. 설정된 경우 URB는 데이터 구조로 _URB_CONTROL_DESCRIPTOR_REQUEST 함께 사용됩니다.

URB_FUNCTION_GET_DESCRIPTOR_FROM_ENDPOINT

USB 디바이스에 대한 인터페이스의 엔드포인트에서 설명자를 검색합니다. 설정된 경우 URB는 데이터 구조로 _URB_CONTROL_DESCRIPTOR_REQUEST 함께 사용됩니다.

URB_FUNCTION_SET_DESCRIPTOR_TO_DEVICE

디바이스에서 디바이스 설명자를 설정합니다. 설정된 경우 URB는 데이터 구조로 _URB_CONTROL_DESCRIPTOR_REQUEST 함께 사용됩니다.

URB_FUNCTION_SET_DESCRIPTOR_TO_ENDPOINT

인터페이스에 대한 엔드포인트의 엔드포인트 설명자를 설정합니다. 설정된 경우 URB는 데이터 구조로 _URB_CONTROL_DESCRIPTOR_REQUEST 함께 사용됩니다.

URB_FUNCTION_SET_FEATURE_TO_DEVICE

디바이스에서 USB 정의 기능을 설정합니다. 설정된 경우 URB는 데이터 구조로 _URB_CONTROL_FEATURE_REQUEST 함께 사용됩니다.

URB_FUNCTION_SET_FEATURE_TO_INTERFACE

디바이스의 인터페이스에서 USB 정의 기능을 설정합니다. 설정된 경우 URB는 데이터 구조로 _URB_CONTROL_FEATURE_REQUEST 함께 사용됩니다.

URB_FUNCTION_SET_FEATURE_TO_ENDPOINT

USB 디바이스의 인터페이스에 대한 엔드포인트에서 USB 정의 기능을 설정합니다. 설정된 경우 URB는 데이터 구조로 _URB_CONTROL_FEATURE_REQUEST 함께 사용됩니다.

URB_FUNCTION_SET_FEATURE_TO_OTHER

USB 디바이스의 디바이스 정의 대상에서 USB 정의 기능을 설정합니다. 설정된 경우 URB는 데이터 구조로 _URB_CONTROL_FEATURE_REQUEST 함께 사용됩니다.

URB_FUNCTION_CLEAR_FEATURE_TO_DEVICE

디바이스에서 USB 정의 기능을 지웁니다. 설정된 경우 URB는 데이터 구조로 _URB_CONTROL_FEATURE_REQUEST 함께 사용됩니다.

URB_FUNCTION_CLEAR_FEATURE_TO_INTERFACE

디바이스의 인터페이스에서 USB 정의 기능을 지웁니다. 설정된 경우 URB는 데이터 구조로 _URB_CONTROL_FEATURE_REQUEST 함께 사용됩니다.

URB_FUNCTION_CLEAR_FEATURE_TO_ENDPOINT

USB 디바이스의 인터페이스에 대한 엔드포인트의 USB 정의 기능을 지웁니다. 설정된 경우 URB는 데이터 구조로 _URB_CONTROL_FEATURE_REQUEST 함께 사용됩니다.

URB_FUNCTION_CLEAR_FEATURE_TO_OTHER

USB 디바이스의 디바이스 정의 대상에서 USB 정의 기능을 지웁니다. 설정된 경우 URB는 데이터 구조로 _URB_CONTROL_FEATURE_REQUEST 함께 사용됩니다.

URB_FUNCTION_GET_STATUS_FROM_DEVICE

USB 디바이스에서 상태 검색합니다. 설정된 경우 URB는 데이터 구조로 _URB_CONTROL_GET_STATUS_REQUEST 함께 사용됩니다.

URB_FUNCTION_GET_STATUS_FROM_INTERFACE

USB 디바이스의 인터페이스에서 상태 검색합니다. 설정된 경우 URB는 데이터 구조로 _URB_CONTROL_GET_STATUS_REQUEST 함께 사용됩니다.

URB_FUNCTION_GET_STATUS_FROM_ENDPOINT

USB 디바이스의 인터페이스에 대한 엔드포인트에서 상태 검색합니다. 설정된 경우 URB는 데이터 구조로 _URB_CONTROL_GET_STATUS_REQUEST 함께 사용됩니다.

URB_FUNCTION_GET_STATUS_FROM_OTHER

USB 디바이스의 디바이스 정의 대상에서 상태 검색합니다. 설정된 경우 URB는 데이터 구조로 _URB_CONTROL_GET_STATUS_REQUEST 함께 사용됩니다.

URB_FUNCTION_VENDOR_DEVICE

공급업체별 명령을 USB 디바이스로 보냅니다. 설정된 경우 URB는 데이터 구조로 _URB_CONTROL_VENDOR_OR_CLASS_REQUEST 함께 사용됩니다.

URB_FUNCTION_VENDOR_INTERFACE

USB 디바이스의 인터페이스에 대한 공급업체별 명령을 보냅니다. 설정된 경우 URB는 데이터 구조로 _URB_CONTROL_VENDOR_OR_CLASS_REQUEST 함께 사용됩니다.

URB_FUNCTION_VENDOR_ENDPOINT

USB 디바이스의 인터페이스에서 엔드포인트에 대한 공급업체별 명령을 보냅니다. 설정된 경우 URB는 데이터 구조로 _URB_CONTROL_VENDOR_OR_CLASS_REQUEST 함께 사용됩니다.

URB_FUNCTION_VENDOR_OTHER

공급업체별 명령을 USB 디바이스의 디바이스 정의 대상에 보냅니다. 설정된 경우 URB는 데이터 구조로 _URB_CONTROL_VENDOR_OR_CLASS_REQUEST 함께 사용됩니다.

URB_FUNCTION_CLASS_DEVICE

USB 정의 클래스별 명령을 USB 디바이스에 보냅니다. 설정된 경우 URB는 데이터 구조로 _URB_CONTROL_VENDOR_OR_CLASS_REQUEST 함께 사용됩니다.

URB_FUNCTION_CLASS_INTERFACE

USB 정의 클래스별 명령을 USB 디바이스의 인터페이스로 보냅니다. 설정된 경우 URB는 데이터 구조로 _URB_CONTROL_VENDOR_OR_CLASS_REQUEST 함께 사용됩니다.

URB_FUNCTION_CLASS_ENDPOINT

USB 정의 클래스별 명령을 USB 디바이스의 인터페이스에 있는 엔드포인트로 보냅니다. 설정된 경우 URB는 데이터 구조로 _URB_CONTROL_VENDOR_OR_CLASS_REQUEST 함께 사용됩니다.

URB_FUNCTION_CLASS_OTHER

USB 정의 클래스별 명령을 USB 디바이스의 디바이스 정의 대상에 보냅니다. 설정된 경우 URB는 데이터 구조로 _URB_CONTROL_VENDOR_OR_CLASS_REQUEST 함께 사용됩니다.

URB_FUNCTION_GET_CONFIGURATION

USB 디바이스에서 현재 구성을 검색합니다. 설정된 경우 URB는 데이터 구조로 _URB_CONTROL_GET_CONFIGURATION_REQUEST 함께 사용됩니다.

URB_FUNCTION_GET_INTERFACE

USB 디바이스의 인터페이스에 대한 현재 설정을 검색합니다. 설정된 경우 URB는 데이터 구조로 _URB_CONTROL_GET_INTERFACE_REQUEST 함께 사용됩니다.

Windows 2000 및 Windows Vista 이상 운영 체제에서 사용할 수 있습니다. Windows XP에서는 사용할 수 없습니다.

URB_FUNCTION_GET_DESCRIPTOR_FROM_INTERFACE

USB 디바이스의 인터페이스에서 설명자를 검색합니다. 설정된 경우 URB는 데이터 구조로 _URB_CONTROL_DESCRIPTOR_REQUEST 함께 사용됩니다.

URB_FUNCTION_SET_DESCRIPTOR_TO_INTERFACE

USB 디바이스의 인터페이스에 대한 설명자를 설정합니다. 설정된 경우 URB는 데이터 구조로 _URB_CONTROL_DESCRIPTOR_REQUEST 함께 사용됩니다.

URB_FUNCTION_GET_MS_FEATURE_DESCRIPTOR

USB 디바이스 또는 USB 디바이스의 인터페이스에서 Microsoft OS 기능 설명자를 검색합니다. 설정된 경우 URB는 데이터 구조로 _URB_OS_FEATURE_DESCRIPTOR_REQUEST 함께 사용됩니다.

Windows XP 이상 운영 시스템에서 사용할 수 있습니다.

URB_FUNCTION_OPEN_STATIC_STREAMS

지정된 대량 엔드포인트에서 스트림을 엽니다. 설정된 경우 URB는 데이터 구조로 _URB_OPEN_STATIC_STREAMS 함께 사용됩니다.

Windows 8 사용할 수 있습니다. 오픈 스트림 요청에 대한 URB 형식 지정에 대한 자세한 내용은 USB 대량 엔드포인트에서 정적 스트림을 열고 닫는 방법을 참조하세요.

URB_FUNCTION_CLOSE_STATIC_STREAMS

지정된 대량 엔드포인트에서 열린 모든 스트림을 닫습니다. 설정된 경우 URB는 데이터 구조로 _URB_PIPE_REQUEST 함께 사용됩니다.

Windows 8 사용할 수 있습니다. 오픈 스트림 요청에 대한 URB 형식 지정에 대한 자세한 내용은 USB 대량 엔드포인트에서 정적 스트림을 열고 닫는 방법을 참조하세요.

Status

호스트 컨트롤러 드라이버에서 반환되는 USBD_STATUS_XXX 코드를 포함합니다.

UsbdDeviceHandle

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

UsbdFlags

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

설명

_URB_HEADER 구조는 URB 구조의 일부인 모든 USB 요청의 멤버입니다. _URB_HEADER 구조는 호스트 컨트롤러 드라이버에 각 요청에 대한 일반적인 정보를 제공하는 데 사용됩니다.

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

요구 사항

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

추가 정보

Urb

USB 구조체

_URB_BULK_OR_INTERRUPT_TRANSFER

_URB_CONTROL_DESCRIPTOR_REQUEST

_URB_CONTROL_FEATURE_REQUEST

_URB_CONTROL_GET_CONFIGURATION_REQUEST

_URB_CONTROL_GET_INTERFACE_REQUEST

_URB_CONTROL_GET_STATUS_REQUEST

_URB_CONTROL_TRANSFER

_URB_CONTROL_VENDOR_OR_CLASS_REQUEST

_URB_GET_CURRENT_FRAME_NUMBER

_URB_ISOCH_TRANSFER

_URB_OS_FEATURE_DESCRIPTOR_REQUEST

_URB_PIPE_REQUEST

_URB_SELECT_CONFIGURATION

_URB_SELECT_INTERFACE