다음을 통해 공유


SpbRequestCaptureIoOtherTransferList 함수(spbcx.h)

SpbRequestCaptureIoOtherTransferList 메서드는 사용자 지정 IOCTL 요청의 입력 버퍼에서 SPB_TRANSFER_LIST 구조를 검색합니다.

통사론

NTSTATUS SpbRequestCaptureIoOtherTransferList(
  SPBREQUEST Request
);

매개 변수

Request

사용자 지정 IOCTL 요청에 대한 SPBREQUEST 핸들입니다. SPB 컨트롤러 드라이버는 이전에 등록된 이벤트 콜백 함수중 하나를 통해 이 핸들을 받았습니다.

반환 값

SpbRequestCaptureIoOtherTransferList 호출에 성공하면 STATUS_SUCCESS 반환합니다. 가능한 반환 값에는 다음 오류 코드가 포함됩니다.

반환 값 묘사
STATUS_INVALID_PARAMETER
SPBREQUEST 매개 변수가 잘못되었거나 요청의 SPB_TRANSFER_LIST 구조체의 형식이 잘못되었습니다.
STATUS_INSUFFICIENT_RESOURCES
이 작업에 필요한 시스템 리소스를 할당할 수 없습니다.

발언

이 메서드는 버퍼 주소가 유효한 프로세스의 컨텍스트에서 호출되어야 합니다. 일반적으로 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 비고를 참조하세요.

참고 항목

EvtIoInCallerContext

SPBREQUEST

SPB_TRANSFER_LIST

SpbControllerSetIoOtherCallback

WdfRequestGetRequestorMode