[KMDF에만 적용]
WdfUsbTargetDeviceFormatRequestForCyclePort 메서드는 지정된 디바이스가 연결된 포트에 대한 전원 주기 요청을 빌드하지만 요청을 보내지는 않습니다.
통사론
NTSTATUS WdfUsbTargetDeviceFormatRequestForCyclePort(
[in] WDFUSBDEVICE UsbDevice,
[in] WDFREQUEST Request
);
매개 변수
[in] UsbDevice
WdfUsbTargetDeviceCreateWithParameters대한 이전 호출에서 가져온 USB 디바이스 개체에 대한 핸들입니다.
[in] Request
프레임워크 요청 개체에 대한 핸들입니다. 자세한 내용은 다음 설명 섹션을 참조하세요.
반환 값
WdfUsbTargetDeviceFormatRequestForCyclePort 작업이 성공하면 STATUS_SUCCESS 반환합니다. 그렇지 않으면 이 메서드는 다음 값 중 하나를 반환할 수 있습니다.
반환 코드 | 묘사 |
---|---|
|
디바이스의 USB 디바이스를 사용할 수 없습니다. |
|
메모리가 부족했습니다. |
이 메서드는 다른NTSTATUS 값을 반환할 수도 있습니다.
드라이버에서 잘못된 개체 핸들을 제공하면 버그 검사가 수행됩니다.
발언
WdfUsbTargetDeviceFormatRequestForCyclePort사용하고 WdfRequestSend사용하여 동기 또는 비동기적으로 전원 주기 요청을 보냅니다. 또는 WdfUsbTargetDeviceCyclePortSynchronously 메서드를 사용하여 요청을 동기적으로 보냅니다.
드라이버가 WdfRequestSend호출하기 전에 WdfIoTargetStop 호출해야 하며 완료하거나 I/O 대상에 보낸 모든 I/O 요청에 취소할 합니다. 드라이버는 주기 요청이 완료될 때까지 I/O 대상에 추가 I/O 요청을 보내지 않아야 합니다.
드라이버가 I/O 큐에서 받은 I/O 요청을 전달하거나 새 요청을 만들고 보낼 수 있습니다.
드라이버가 I/O 큐에서 받은 I/O 요청을 전달하려면 WdfUsbTargetDeviceFormatRequestForCyclePort 메서드의 Request 매개 변수에 대해 수신된 요청 핸들을 지정합니다.
새 I/O 요청을 만들려면 WdfRequestCreate 호출하여 요청 개체를 미리 할당합니다. WdfUsbTargetDeviceFormatRequestForCyclePort 메서드의 Request 매개 변수에 대한 요청 핸들을 제공합니다. WdfRequestReuse호출하여 요청 개체를 다시 사용할 수 있습니다. 드라이버의 EvtDriverDeviceAdd 콜백 함수는 디바이스에 대한 요청 개체를 미리 할당할 수 있습니다.
WdfUsbTargetDeviceFormatRequestForCyclePort 호출하여 I/O 요청의 형식을 지정한 후 드라이버는 WdfRequestSend 호출하여 요청을 I/O 대상으로 보내야 합니다(동기 또는 비동기식). WdfRequestSend 대한 이 호출은 IRQL = PASSIVE_LEVEL 만들어야 합니다.
동일한 요청을 사용하는 WdfUsbTargetDeviceFormatRequestForCyclePort 여러 번의 호출로 인해 추가 리소스 할당이 발생하지 않습니다. 따라서 WdfRequestCreate STATUS_INSUFFICIENT_RESOURCES 반환할 가능성을 줄이기 위해 드라이버의 EvtDriverDeviceAdd 콜백 함수는 WdfRequestCreate 호출하여 디바이스에 대한 하나 이상의 요청 개체를 미리 할당할 수 있습니다. 이후에 드라이버는 다시 사용(WdfRequestReuse호출), reformat(WdfUsbTargetDeviceFormatRequestForCyclePort호출)할 수 있습니다. 이후 WdfRequestCreate호출에서 STATUS_INSUFFICIENT_RESOURCES 반환 값을 위험하지 않고 각 요청 개체를 다시 (WdfRequestSend호출)합니다. 다시 사용된 요청 개체에 대한 WdfUsbTargetDeviceFormatRequestForCyclePort 대한 모든 후속 호출은 매개 변수 값이 변경되지 않으면 STATUS_SUCCESS 반환합니다. (드라이버가 매번 동일한 요청 형식 지정 메서드를 호출하지 않으면 추가 리소스가 할당될 수 있습니다.)
WdfUsbTargetDeviceFormatRequestForCyclePort 메서드 및 USB I/O 대상에 대한 자세한 내용은 USB I/O 대상참조하세요.
예제
다음 코드 예제에서는 전원 주기 요청 형식을 지정하고, CompletionRoutine 콜백 함수를 등록하고, I/O 대상으로 요청을 보냅니다.
status = WdfUsbTargetDeviceFormatRequestForCyclePort(
UsbDevice,
request
);
if (!NT_SUCCESS(status)){
return status;
}
WdfRequestSetCompletionRoutine(
request,
MyCompletionRoutine,
NULL
);
if (WdfRequestSend(
request,
WdfUsbTargetDeviceGetIoTarget(UsbDevice),
NULL
) == FALSE) {
status = WdfRequestGetStatus(request);
}
요구 사항
요구 | 값 |
---|---|
대상 플랫폼 | 보편적 |
최소 KMDF 버전 | 1.0 |
헤더 | wdfusb.h(Wdfusb.h 포함) |
라이브러리 | Wdf01000.sys(프레임워크 라이브러리 버전 관리 참조) |
IRQL | <=DISPATCH_LEVEL |
DDI 규정 준수 규칙 | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), RequestFormattedValid(kmdf), RequestSendAndForgetNoFormatting(kmdf), RequestSendAndForgetNoFormatting2(kmdf), UsbKmdfIrql(kmdf), UsbKmdfIrql2(kmdf), UsbKmdfIrqlExplicit(kmdf) |