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을 호출합니다.
드라이버는 WdfUsbTargetDeviceRequestForUrb 를 호출하기 전에 WdfUsbTargetDeviceCreateUrb를 호출하여 URB 구조를 할당할 수 있습니다.
WdfUsbTargetDeviceCreateUrb 는 WdfMemoryCreate와 작동 중인 것과 유사합니다. 두 메서드 모두 프레임워크 메모리 개체를 할당하고 두 메서드 모두 메모리 개체와 연결된 버퍼(이 경우 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