WdfUsbTargetPipeAbortSynchronously 함수(wdfusb.h)

[KMDF 및 UMDF에 적용]

WdfUsbTargetPipeAbortSynchronously 메서드는 중단 요청을 빌드하고 지정된 USB 파이프에 동기적으로 보냅니다.

구문

NTSTATUS WdfUsbTargetPipeAbortSynchronously(
  [in]           WDFUSBPIPE                Pipe,
  [in, optional] WDFREQUEST                Request,
  [in, optional] PWDF_REQUEST_SEND_OPTIONS RequestOptions
);

매개 변수

[in] Pipe

WdfUsbInterfaceGetConfiguredPipe를 호출하여 가져온 프레임워크 파이프 개체에 대한 핸들입니다.

[in, optional] Request

프레임워크 요청 개체에 대한 핸들입니다. 이 매개 변수는 선택 사항이며 NULL일 수 있습니다. 자세한 내용은 아래 설명 부분을 참조하십시오.

[in, optional] RequestOptions

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

반환 값

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

반환 코드 설명
STATUS_INFO_LENGTH_MISMATCH
RequestOptions 매개 변수가 지정한 WDF_REQUEST_SEND_OPTIONS 구조체의 크기가 잘못되었습니다.
STATUS_INVALID_PARAMETER
잘못된 핸들이 검색되었습니다.
STATUS_INSUFFICIENT_RESOURCES
메모리가 부족했습니다.
STATUS_INVALID_DEVICE_REQUEST
호출자의 IRQL이 PASSIVE_LEVEL 않았거나 지정된 I/O 요청이 이미 I/O 대상에 큐에 대기되었습니다.
STATUS_IO_TIMEOUT
드라이버가 시간 제한 값을 제공했으며 할당된 시간 내에 요청이 완료되지 않았습니다.
 

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

드라이버가 잘못된 개체 핸들을 제공하는 경우 버그 검사 발생합니다.

설명

WdfUsbTargetPipeAbortSynchronously 메서드를 사용하여 USB 중단 요청을 동기적으로 보냅니다. 이러한 요청을 비동기적으로 보내려면 WdfUsbTargetPipeFormatRequestForAbortWdfRequestSend를 사용합니다.

USB 중단 요청으로 인해 드라이버의 I/O 대상이 파이프로 전송된 모든 I/O 요청을 취소합니다. 드라이버가 WdfUsbTargetPipeAbortSynchronously를 호출하면 프레임워크는 I/O 대상에 URB_FUNCTION_ABORT_PIPE 요청을 보냅니다. USB 파이프("파이프 중단"이라고도 함)에서 작업을 취소하는 방법에 대한 자세한 내용은 USB 사양을 참조하세요.

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

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

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

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

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

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

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

예제

다음 코드 예제에서는 USB 디바이스의 인터페이스에 대해 구성된 모든 파이프에 중단 요청을 보냅니다.

UCHAR  i;
ULONG  count;
NTSTATUS  status;
PDEVICE_CONTEXT  pDevContext;

pDevContext = GetDeviceContext(Device);

count = WdfUsbInterfaceGetNumConfiguredPipes(
                                             pDevContext->UsbInterface
                                             );

for (i = 0; i < count; i++) {
    WDFUSBPIPE pipe;

    pipe = WdfUsbInterfaceGetConfiguredPipe(
                                            pDevContext->UsbInterface,
                                            i,
                                            NULL
                                            );
    status = WdfUsbTargetPipeAbortSynchronously(
                                                pipe,
                                                WDF_NO_HANDLE,
                                                NULL
                                                );
    if (!NT_SUCCESS(status)) {
        break;
    }
}

요구 사항

요구 사항
대상 플랫폼 유니버설
최소 KMDF 버전 1.0
최소 UMDF 버전 2.0
머리글 wdfusb.h(Wdfusb.h 포함)
라이브러리 Wdf01000.sys(KMDF); WUDFx02000.dll(UMDF)
IRQL PASSIVE_LEVEL
DDI 규정 준수 규칙 DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), RequestForUrbXrb(kmdf), UsbKmdfIrql(kmdf), UsbKmdfIrql2(kmdf), UsbKmdfIrqlExplicit(kmdf)

추가 정보

WdfRequestCancelSentRequest

WdfUsbTargetPipeResetSynchronously