共用方式為


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 開始提供。
目標平台 Universal
標頭 spbcx.h
程式庫 Spbcxstubs.lib
IRQL 請參閱<備註>。

另請參閱

EvtIoInCallerContext

SPBREQUEST

SPB_TRANSFER_LIST

SpbControllerSetIoOtherCallback

WdfRequestGetRequestorMode