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인 경우
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 |