다음을 통해 공유


USBD_UrbAllocate 함수(usbdlib.h)

USBD_UrbAllocate 루틴은 URB(USB 요청 블록)를 할당합니다.

구문

NTSTATUS USBD_UrbAllocate(
  [in]  USBD_HANDLE USBDHandle,
  [out] PURB        *Urb
);

매개 변수

[in] USBDHandle

USBD_CreateHandle 루틴에 대한 이전 호출에서 클라이언트 드라이버가 검색한 USBD 핸들입니다.

[out] Urb

새로 할당된 URB 구조체에 대한 포인터입니다. 구조체의 모든 멤버는 0으로 설정됩니다. 클라이언트 드라이버는 드라이버가 USBD_UrbFree 호출하여 URB 사용을 완료한 경우 URB를 해제해야 합니다.

반환 값

USBD_UrbAllocate 루틴은 요청이 성공하면 STATUS_SUCCESS 반환합니다. 그렇지 않으면 USBD_UrbAllocateUrb 를 NULL로 설정하고 실패 코드를 반환합니다.

가능한 값은 NULL에서 USBDHandle 또는 Urb로 전달된 호출자를 나타내는 STATUS_INVALID_PARAMETER 포함하지만 이에 국한되지 않습니다.

설명

USBD_UrbAllocate 루틴을 사용하면 기본 USB 드라이버 스택이 URB에 대해 불투명 URB 컨텍스트를 할당할 수 있습니다. URB 컨텍스트를 사용하면 USB 드라이버 스택이 요청을 보다 효율적이고 안정적으로 처리할 수 있습니다. 이러한 최적화는 Windows 8 포함된 USB 3.0 드라이버 스택에서 제공됩니다. 클라이언트 드라이버는 URB 컨텍스트에 액세스할 수 없습니다. 컨텍스트는 버스 드라이버에서 내부적으로 사용됩니다.

호스트 컨트롤러의 USB 프로토콜 버전, 기본 USB 드라이버 스택, 대상 운영 체제에 관계없이 클라이언트 드라이버는 항상 URB 구조를 할당하기 위해 USBD_UrbAllocate 호출해야 합니다. USBD_UrbAllocateExAllocatePoolWithTag와 같은 이전 할당 메커니즘을 대체하거나 스택에 할당합니다.

클라이언트 드라이버는 USBD_UrbAllocate 사용하지 않아야 합니다.

  • 등시 전송에 대한 URB와 같이 길이가 가변적인 URB를 할당하려면 대신 클라이언트 드라이버는 USBD_IsochUrbAllocate 호출해야 합니다.
  • 대상 운영 체제가 WINDOWS XP SP2(서비스 팩 2) 또는 이전 버전의 Windows인 경우
대체 루틴에 대한 자세한 내용은 URL 할당 및 빌드를 참조하세요.

USBD_UrbFree 호출하여 USBD_UrbAllocate 할당한 URB 를 해제해야 합니다.

예제

다음 코드 예제에서는 URB를 할당, 제출 및 해제하는 방법을 보여줍니다. 이 예제에서는 URB를 동기적으로 제출합니다. SubmitUrbSync 함수의 구현은 URB를 제출하는 방법의 예제 섹션을 참조하세요.

NTSTATUS CreateandSubmitURBSynchronously (
    _In_ USBD_HANDLE USBDHandle 
{
    PURB    Urb = NULL;

    NTSTATUS status;

    status = USBD_UrbAllocate(USBDHandle, &Urb);

    if (!NT_SUCCESS(status))
    {
        goto CreateandSubmitURBExit;
    }

    //Format the URB for the request. Not Shown.
    status = BuildURBForBulkTransfer (Urb);

    if (!NT_SUCCESS(status))
    {
        goto CreateandSubmitURBExit;
    }

    status = SubmitUrbSync( TargetDeviceObject,
        Urb)  

    if (!NT_SUCCESS(status))
    {
        goto CreateandSubmitURBExit;
    }

CreateandSubmitURBExit:

    if (Urb)
    {
        USBD_UrbFree( USBDHandle, Urb); 
    }

    return status;

}

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 8 WDK가 필요합니다. Windows Vista 이상 버전의 Windows 운영 체제를 대상으로 합니다.
대상 플랫폼 데스크톱
머리글 usbdlib.h
라이브러리 Usbdex.lib
IRQL DISPATCH_LEVEL

추가 정보

URL 할당 및 빌드

USB 디바이스에 요청 보내기

USBD_UrbFree