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 반환합니다. 그렇지 않으면 이 메서드는 다음 값 중 하나를 반환할 수 있습니다.
반환 코드 | 묘사 |
---|---|
|
잘못된 매개 변수가 검색되었습니다. |
|
드라이버가 WDF_USB_DEVICE_CREATE_CONFIG_INIT호출할 때 클라이언트 계약 버전을 지정하지 않았습니다. |
|
새 URB를 만들 메모리가 부족했습니다. |
이 메서드는 다른NTSTATUS 값을 반환할 수도 있습니다.
발언
WdfUsbTargetDeviceCreateUrb호출하기 전에 드라이버는 WdfUsbTargetDeviceCreateWithParameters호출해야 합니다. 성공하면 WdfUsbTargetDeviceCreateUrb 새로 할당된 URB를 설명하는 프레임워크 메모리 개체에 대한 핸들을 반환합니다. 일반적으로 드라이버는 요청 처리기내에서 WdfUsbTargetDeviceCreateUrb 호출합니다.
드라이버는 WdfUsbTargetDeviceFormatRequestForUrb호출하기 전에 WdfUsbTargetDeviceCreateUrb 호출하여 URB 구조를 할당할 수 있습니다.
WdfUsbTargetDeviceCreateUrb WdfMemoryCreate 작동합니다. 두 메서드 모두 프레임워크 메모리 개체를 할당하며, 두 메서드 모두 메모리 개체와 연결된 버퍼(이 경우 URB)를 수신하는 옵션도 제공합니다. 두 경우 모두 호출자는 나중에 WdfMemoryGetBuffer호출하여 버퍼를 검색할 수도 있습니다.
드라이버가 WdfUsbTargetDeviceCreateUrb 호출할 때 Urb 매개 변수를 제공하는 경우 URB를 수동으로 또는 UsbBuildXxx 루틴을 호출하여 형식을 지정할 수 있습니다.
부모 개체가 삭제되면 메모리 개체와 해당 버퍼가 삭제됩니다. 또한 드라이버는 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