다음을 통해 공유


WdfUsbTargetDeviceSendUrbSynchronously 함수(wdfusb.h)

[KMDF에만 적용]

WdfUsbTargetDeviceSendUrbSynchronously 메서드는 URB설명된 요청 매개 변수를 사용하여 지정된 USB 디바이스에 동기적으로 USB 요청을 보냅니다.

통사론

NTSTATUS WdfUsbTargetDeviceSendUrbSynchronously(
  [in]           WDFUSBDEVICE              UsbDevice,
  [in, optional] WDFREQUEST                Request,
  [in, optional] PWDF_REQUEST_SEND_OPTIONS RequestOptions,
  [in]           PURB                      Urb
);

매개 변수

[in] UsbDevice

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

[in, optional] Request

프레임워크 요청 개체에 대한 핸들입니다. 이 매개 변수는 선택 사항이며 NULL수 있습니다. 자세한 내용은 다음 설명 섹션을 참조하세요.

[in, optional] RequestOptions

요청에 대한 옵션을 지정하는 호출자가 할당한 WDF_REQUEST_SEND_OPTIONS 구조체에 대한 포인터입니다. 이 포인터는 선택 사항이며 NULL수 있습니다. 자세한 내용은 다음 설명 섹션을 참조하세요.

[in] Urb

호출자 초기화된 URB 구조체에 대한 포인터입니다.

이전에 WdfUsbTargetDeviceCreateWithParameters라는 드라이버가 UsbDevice만들기 위해 경우 드라이버는 WdfUsbTargetDeviceCreateUrb 또는 WdfUsbTargetDeviceCreateIsochUrb 사용하여 이 URB를 만들어야 합니다.

반환 값

WdfUsbTargetDeviceSendUrbSynchronously 작업이 성공하면 I/O 대상의 완료 상태 값을 반환합니다. 그렇지 않으면 이 메서드는 다음 값 중 하나를 반환할 수 있습니다.

반환 코드 묘사
STATUS_INVALID_PARAMETER
잘못된 매개 변수가 검색되었습니다.
STATUS_INVALID_DEVICE_REQUEST
호출자의 IRQL이 잘못되었습니다.
STATUS_INSUFFICIENT_RESOURCES
메모리가 부족했습니다.
STATUS_IO_TIMEOUT
드라이버에서 제한 시간 값을 제공했으며 할당된 시간 내에 요청이 완료되지 않았습니다.
 

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

드라이버에서 잘못된 개체 핸들을 제공하면 버그 검사가 수행됩니다.

발언

WdfUsbTargetDeviceSendUrbSynchronously 메서드를 사용하여 USB 제어 전송 요청을 동기적으로 보냅니다. 이러한 요청을 비동기적으로 보내려면 WdfUsbTargetDeviceFormatRequestForUrb사용하고 WdfRequestSend사용합니다.

WdfUsbTargetDeviceSendUrbSynchously 메서드는 요청이 완료될 때까지, 드라이버가 RequestOptions 매개 변수의 WDF_REQUEST_SEND_OPTIONS 구조에 시간 제한 값을 제공하지 않거나 오류가 검색되지 않는 한 반환되지 않습니다.

드라이버가 I/O 큐에서 받은 I/O 요청을 전달하거나 새 요청을 만들고 보낼 수 있습니다.

드라이버가 I/O 큐에서 받은 I/O 요청을 전달하려면 WdfUsbTargetDeviceSendUrbSynchronously 메서드의 Request 매개 변수에 대해 수신된 요청의 핸들을 지정합니다.

새 요청을 만들고 보내려면 Request 매개 변수에 대한 NULL 요청 핸들을 제공하거나 새 요청 개체를 만들고 해당 핸들을 제공합니다.

  • NULL 요청 핸들을 제공하는 경우 프레임워크는 내부 요청 개체를 사용합니다. 이 기술은 사용하기는 간단하지만 드라이버는 요청을 취소할 수 없습니다.
  • WdfRequestCreate 호출하여 하나 이상의 요청 개체를 만드는 경우 WdfRequestReuse호출하여 이러한 요청 개체를 다시 사용할 수 있습니다. 이 기술을 사용하면 드라이버의 EvtDriverDeviceAdd 콜백 함수가 디바이스에 대한 요청 개체를 미리 할당할 수 있습니다. 또한 필요한 경우 다른 드라이버 스레드가 WdfRequestCancelSentRequest 호출하여 요청을 취소할 수 있습니다.
드라이버가NULL이 아닌 또는 NULLRequest 매개 변수를 제공하는지 여부에 관계없이 드라이버에서NULLRequestOptions 매개 변수를 지정할 수 있습니다. 예를 들어 RequestOptions 매개 변수를 사용하여 제한 시간 값을 지정할 수 있습니다.

I/O 요청이 완료된 후 상태 정보를 가져오는 방법에 대한 자세한 내용은 완료 정보 가져오기참조하세요.

WdfUsbTargetDeviceSendUrbSynchronously 메서드 및 USB I/O 대상에 대한 자세한 내용은 USB I/O 대상참조하세요.

예제

다음 코드 예제에서는 URB 구조를 초기화하고 WdfUsbTargetDeviceSendUrbSynchronously호출합니다.

URB Urb;
NTSTATUS status;

Urb.UrbHeader.Function =  URB_FUNCTION_GET_CONFIGURATION;
Urb.UrbHeader.Length = sizeof(struct _URB_CONTROL_GET_CONFIGURATION_REQUEST);
Urb.UrbControlGetConfigurationRequest.TransferBufferLength = 1 ; // Must be 1
Urb.UrbControlGetConfigurationRequest.TransferBufferMDL = NULL;
Urb.UrbControlGetConfigurationRequest.TransferBuffer = outBuffer;
Urb.UrbControlGetConfigurationRequest.UrbLink = NULL;

status = WdfUsbTargetDeviceSendUrbSynchronously(
                                                UsbDevice,
                                                NULL,
                                                NULL,
                                                &Urb
                                                );

요구 사항

요구
대상 플랫폼 보편적
최소 KMDF 버전 1.0
헤더 wdfusb.h(Wdfusb.h 포함)
라이브러리 Wdf01000.sys(프레임워크 라이브러리 버전 관리 참조)
IRQL PASSIVE_LEVEL
DDI 규정 준수 규칙 DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), syncReqSend(kmdf), UsbKmdfIrql(kmdf), UsbKmdfIrql2(kmdf), UsbKmdfIrqlExplicit(kmdf)

참고 항목

EvtDriverDeviceAdd

WDF_REQUEST_SEND_OPTIONS

WdfRequestCancelSentRequest

WdfRequestCreate

WdfRequestReuse

WdfRequestSend

WdfUsbTargetDeviceFormatRequestForUrb