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 대상의 완료 상태 값을 반환합니다. 그렇지 않으면 이 메서드는 다음 값 중 하나를 반환할 수 있습니다.
반환 코드 | 설명 |
---|---|
|
RequestOptions 매개 변수가 지정한 WDF_REQUEST_SEND_OPTIONS 구조체의 크기가 잘못되었습니다. |
|
잘못된 핸들이 검색되었습니다. |
|
메모리가 부족했습니다. |
|
호출자의 IRQL이 PASSIVE_LEVEL 않았거나 지정된 I/O 요청이 이미 I/O 대상에 큐에 대기되었습니다. |
|
드라이버가 시간 제한 값을 제공했으며 할당된 시간 내에 요청이 완료되지 않았습니다. |
이 메서드는 다른 NTSTATUS 값을 반환할 수도 있습니다.
드라이버가 잘못된 개체 핸들을 제공하는 경우 버그 검사 발생합니다.
설명
WdfUsbTargetPipeAbortSynchronously 메서드를 사용하여 USB 중단 요청을 동기적으로 보냅니다. 이러한 요청을 비동기적으로 보내려면 WdfUsbTargetPipeFormatRequestForAbort와 WdfRequestSend를 사용합니다.
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 를 호출하여 요청을 취소할 수 있습니다.
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) |
추가 정보
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기