共用方式為


WdfRequestRetrieveOutputWdmMdl 函式 (wdfrequest.h)

[僅適用於 KMDF]

WdfRequestRetrieveOutputWdmMdl 方法會擷取代表 I/O 要求輸出緩衝區的記憶體描述項清單 (MDL)。

語法

NTSTATUS WdfRequestRetrieveOutputWdmMdl(
  [in]  WDFREQUEST Request,
  [out] PMDL       *Mdl
);

參數

[in] Request

架構要求物件的句柄。

[out] Mdl

接收 MDL 指標的位置指標。

傳回值

如果作業成功,WdfRequestRetrieveOutputWdmMdl 會傳回STATUS_SUCCESS。 否則,此方法可能會傳回下列其中一個值:

傳回碼 描述
STATUS_INVALID_PARAMETER
輸入參數無效。
STATUS_INVALID_DEVICE_REQUEST
要求類型無效,或要求未使用 緩衝處理或直接 I/O。 如需存取數據緩衝區所支援方法的詳細資訊,請參閱下列一節。
STATUS_INTERNAL_ERROR
要求已經完成。
STATUS_BUFFER_TOO_SMALL
輸入緩衝區的長度為零。
STATUS_INSUFFICIENT_RESOURCES
記憶體不足。
 

此方法也可能 傳回其他NTSTATUS 值。

如果驅動程式提供無效的物件句柄,就會發生錯誤檢查。

言論

要求的輸出緩衝區會接收資訊,例如來自磁碟的數據,驅動程式會提供給要求的發源者。 您的驅動程式可以針對讀取要求或裝置 I/O 控制要求呼叫 WdfRequestRetrieveOutputWdmMdl,但不能呼叫寫入要求(因為寫入要求不提供輸出數據)。

WdfRequestRetrieveOutputWdmMdl 方法會針對 I/O 要求擷取輸出緩衝區的 MDL,這些要求會使用 緩衝的 I/O 方法或用於存取數據緩衝區的 直接 I/O 方法。 如果要求的 I/O 控制程式代碼是 IRP_MJ_INTERNAL_DEVICE_CONTROL,或要求來自另一個內核模式驅動程式,WdfRequestRetrieveOutputWdmMdl 也支援使用 未緩衝處理或直接 I/O的 I/O 要求。

如果 WdfRequestRetrieveOutputWdmMdl 傳回STATUS_SUCCESS,驅動程式會收到描述輸出緩衝區的 MDL 指標。

完成 I/O 要求之後,驅動程式不得存取要求的 MDL

如需 WdfRequestRetrieveOutputWdmMdl的詳細資訊,請參閱 Framework-Based Drivers 中存取數據緩衝區

例子

下列程式代碼範例是 EvtIoRead 回呼函式的一部分,該函式會取得 I/O 要求的輸入緩衝區的 MDL。 如果呼叫 WdfRequestRetrieveOutputWdmMdl 失敗,驅動程式就會完成要求,並傳回 WdfRequestRetrieveOutputWdmMdl 傳回的錯誤狀態。

VOID 
MyDrvEvtIoRead(
    IN WDFQUEUE  Queue,
    IN WDFREQUEST  Request,
    IN size_t  Length
    )
{
    NTSTATUS  status;
    PMDL  mdl = NULL;
...
    status = WdfRequestRetrieveOutputWdmMdl(
                                            Request,
                                            &mdl
                                            );
    if (!NT_SUCCESS(status))
    {
        WdfRequestCompleteWithInformation(
                                          Request,
                                          status,
                                          0
                                          );
    }
...
}

要求

要求 價值
目標平臺 普遍
最低 KMDF 版本 1.0
標頭 wdfrequest.h (包括 Wdf.h)
連結庫 Wdf01000.sys (請參閱架構連結庫版本控制。)
IRQL <=DISPATCH_LEVEL
DDI 合規性規則 DriverCreate(kmdf)InvalidReqAccess(kmdf)InvalidReqAccessLocal(kmdf)KmdfIrql(kmdf)KmdfIrql2(kmdf),KmdfIrqlExplicit(kmdf),MdlAfterReqCompletedIntIoctl(kmdf)MdlAfterReqCompletedIntIoctlA(kmdf)MdlAfterReqCompletedIoctl(kmdf)MdlAfterReqCompletedIoctlA(kmdf)MdlAfterReqCompletedRead(kmdf)MdlAfterReqCompletedReadA(kmdf)MdlAfterReqCompletedWrite(kmdf)OutputBufferAPI(kmdf)

另請參閱

WdfRequestRetrieveInputWdmMdl