SpbRequestCaptureIoOtherTransferList 함수(spbcx.h)
SpbRequestCaptureIoOtherTransferList 메서드는 사용자 지정 IOCTL 요청의 입력 버퍼에서 SPB_TRANSFER_LIST 구조를 검색합니다.
통사론
NTSTATUS SpbRequestCaptureIoOtherTransferList(
SPBREQUEST Request
);
매개 변수
Request
사용자 지정 IOCTL 요청에 대한 SPBREQUEST 핸들입니다. SPB 컨트롤러 드라이버는 이전에 등록된 이벤트 콜백 함수중 하나를 통해 이 핸들을 받았습니다.
반환 값
SpbRequestCaptureIoOtherTransferList 호출에 성공하면 STATUS_SUCCESS 반환합니다. 가능한 반환 값에는 다음 오류 코드가 포함됩니다.
반환 값 | 묘사 |
---|---|
|
SPBREQUEST 매개 변수가 잘못되었거나 요청의 SPB_TRANSFER_LIST 구조체의 형식이 잘못되었습니다. |
|
이 작업에 필요한 시스템 리소스를 할당할 수 없습니다. |
발언
이 메서드는 버퍼 주소가 유효한 프로세스의 컨텍스트에서 호출되어야 합니다. 일반적으로 SPB 컨트롤러 드라이버는 드라이버가 SpbControllerSetIoOtherCallback 메서드에 입력 매개 변수로 제공하는 EvtIoInCallerContext 이벤트 콜백 함수에서 이 메서드를 호출합니다.
SPB 컨트롤러 드라이버가 이 메서드를 호출할 수 있는 최대 IRQL은 I/O 요청의 시작자가 사용자 모드에서 실행되는지 또는 커널 모드에서 실행되는지에 따라 달라집니다. 요청이 사용자 모드에서 시작된 경우 드라이버는 PASSIVE_LEVEL 이 메서드를 호출해야 합니다. 요청이 커널 모드에서 시작된 경우 드라이버는 IRQL <= DISPATCH_LEVEL 이 메서드를 호출해야 합니다. 드라이버는 WdfRequestGetRequestorMode 메서드를 호출하여 발신자의 모드를 확인할 수 있습니다. 그러나 드라이버가 SPB 프레임워크 확장(SpbCx)을 사용하여 적절한 IRQL에서 드라이버의 EvtIoInCallerContext 함수를 호출할 수 있으므로 이 호출은 일반적으로 필요하지 않습니다.
예제
다음 코드 예제에서는 SPB 컨트롤러 드라이버의 EvtIoInCallerContext 이벤트 콜백 함수가 SpbRequestCaptureIoOtherTransferList 메서드를 사용하여 사용자 지정 IOCTL 요청에서 I/O 버퍼 또는 버퍼를 가져오는 방법을 보여 줍니다.
VOID
EvtIoInCallerContext(
_In_ WDFDEVICE SpbController,
_In_ WDFREQUEST FxRequest
)
{
NTSTATUS status;
//
// NOTE: The driver should check for custom IOCTLs that this
// driver handles. If an IOCTL is not recognized, mark the
// request as STATUS_NOT_SUPPORTED, and complete the request.
//
status = SpbRequestCaptureIoOtherTransferList((SPBREQUEST)FxRequest);
//
// If the preceding call fails, the driver must complete the
// request instead of queueing the request.
//
if (!NT_SUCCESS(status))
{
goto exit;
}
status = WdfDeviceEnqueueRequest(SpbController, FxRequest);
if (!NT_SUCCESS(status))
{
goto exit;
}
exit:
if (!NT_SUCCESS(status))
{
WdfRequestComplete(FxRequest, status);
}
}
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 8부터 사용할 수 있습니다. |
대상 플랫폼 | 보편적 |
헤더 | spbcx.h |
라이브러리 | Spbcxstubs.lib |
IRQL | 비고를 참조하세요. |