WdfUsbTargetDeviceCreateUrb 함수(wdfusb.h)

[KMDF에만 적용]

WdfUsbTargetDeviceCreateUrb 메서드는 URB(USB 요청 블록)를 할당합니다.

구문

NTSTATUS WdfUsbTargetDeviceCreateUrb(
  [in]            WDFUSBDEVICE           UsbDevice,
  [in, optional]  PWDF_OBJECT_ATTRIBUTES Attributes,
  [out]           WDFMEMORY              *UrbMemory,
  [out, optional] PURB                   *Urb
);

매개 변수

[in] UsbDevice

WdfUsbTargetDeviceCreateWithParameters에 대한 이전 호출에서 가져온 USB 디바이스 개체에 대한 핸들입니다.

[in, optional] Attributes

새 메모리 개체에 대한 특성을 포함하는 호출자가 제공한 WDF_OBJECT_ATTRIBUTES 구조체에 대한 포인터입니다. 드라이버가 이 매개 변수를 제공하는 경우 구조체의 ParentObject 멤버는 프레임워크에서 만든 USB 디바이스 개체(WDFUSBDEVICE) 또는 요청 개체(WDFREQUEST) 또는 부모 체인이 이러한 형식 중 하나로 이어지는 개체여야 합니다. 이 매개 변수는 선택 사항이며 WDF_NO_OBJECT_ATTRIBUTES 수 있습니다.

[out] UrbMemory

프레임워크 메모리 개체에 대한 핸들을 수신하는 WDFMEMORY 형식 위치에 대한 포인터입니다.

[out, optional] Urb

새로 할당된 URB의 주소를 수신하는 URB 구조체에 대한 포인터입니다. 이 매개 변수는 선택 사항이며 NULL일 수 있습니다.

반환 값

WdfUsbTargetDeviceCreateUrb 는 작업이 성공하면 STATUS_SUCCESS 반환합니다. 그렇지 않으면 이 메서드는 다음 값 중 하나를 반환할 수 있습니다.

반환 코드 설명
STATUS_INVALID_PARAMETER
잘못된 매개 변수가 감지되었습니다.
STATUS_INVALID_DEVICE_STATE
드라이버가 WDF_USB_DEVICE_CREATE_CONFIG_INIT 호출할 때 클라이언트 계약 버전을 지정하지 않았습니다.
STATUS_INSUFFICIENT_RESOURCES
새 URB를 만들 메모리가 부족했습니다.
 

이 메서드는 다른 NTSTATUS 값을 반환할 수도 있습니다.

설명

WdfUsbTargetDeviceCreateUrb를 호출하기 전에 드라이버는 WdfUsbTargetDeviceCreateWithParameters를 호출해야 합니다. 성공하면 WdfUsbTargetDeviceCreateUrb 는 새로 할당된 URB를 설명하는 프레임워크 메모리 개체에 대한 핸들을 반환합니다. 일반적으로 드라이버는 요청 처리기 내에서 WdfUsbTargetDeviceCreateUrb을 호출합니다.

드라이버는 WdfUsbTargetDeviceRequestForUrb 를 호출하기 전에 WdfUsbTargetDeviceCreateUrb를 호출하여 URB 구조를 할당할 수 있습니다.

WdfUsbTargetDeviceCreateUrbWdfMemoryCreate와 작동 중인 것과 유사합니다. 두 메서드 모두 프레임워크 메모리 개체를 할당하고 두 메서드 모두 메모리 개체와 연결된 버퍼(이 경우 URB)를 수신하는 옵션도 제공합니다. 두 경우 모두 호출자는 나중에 WdfMemoryGetBuffer를 호출하여 버퍼를 검색할 수도 있습니다.

드라이버가 WdfUsbTargetDeviceCreateUrb를 호출할 때 Urb 매개 변수를 제공하는 경우 수동으로 또는 UsbBuildXxx 루틴을 호출하여 URB의 형식을 지정할 수 있습니다.

부모 개체가 삭제되면 메모리 개체와 해당 버퍼가 삭제됩니다. 또한 드라이버는 WdfObjectDelete를 호출하여 메모리 개체와 해당 버퍼를 삭제할 수 있습니다.

예제

다음 코드 예제에서는 프레임워크 메모리 개체를 선언합니다. 이 예제 에서는 WdfUsbTargetDeviceCreateUrb 를 호출하여 USB 요청 블록을 할당한 다음 WdfUsbTargetDeviceFormatRequestForUrb 를 호출하여 URB 구조체의 콘텐츠를 사용하는 요청의 형식을 지정합니다. 마지막으로, 이 예제에서는 CompletionRoutine 콜백 함수를 등록하고 I/O 대상에 요청을 보냅니다.

WDFMEMORY memory;
PURB urb = NULL;

WDF_OBJECT_ATTRIBUTES_INIT(&objectAttribs);
objectAttribs.ParentObject = UsbDevice;

status = WdfUsbTargetDeviceCreateUrb(
    pDevContext->WdfUsbTargetDevice,
    &objectAttribs,
    &memory,
    &urb);

status = WdfUsbTargetDeviceFormatRequestForUrb(
    deviceContext->WdfUsbTargetDevice,
    request,
    memory,
    NULL);

WdfRequestSetCompletionRoutine(
    request,
    MyCompletionRoutine,
    NULL);

if (!WdfRequestSend(
        request,
        WdfUsbTargetDeviceGetIoTarget(UsbDevice),
        NULL)) {
    status = WdfRequestGetStatus(request);
}

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows Vista
대상 플랫폼 유니버설
최소 KMDF 버전 1.11
머리글 wdfusb.h(Wdfusb.h 포함)
라이브러리 Wdf01000.sys(프레임워크 라이브러리 버전 관리 참조)
IRQL <=DISPATCH_LEVEL
DDI 규정 준수 규칙 DriverCreate(kmdf)

추가 정보

WDF_USB_DEVICE_CREATE_CONFIG_INIT

WdfUsbTargetDeviceCreateIsochUrb

WdfUsbTargetDeviceCreateWithParameters

WdfUsbTargetDeviceFormatRequestForUrb