共用方式為


IWDFIoRequest2::RetrieveOutputBuffer 方法 (wudfddi.h)

[警告: UMDF 2 是最新版的 UMDF,並取代 UMDF 1。 所有新的UMDF驅動程式都應該使用UMDF 2撰寫。 未將新功能新增至 UMDF 1,且較新版本的 #DB967AE6399794847828EE762E27F8E2D 上,UMDF 1 的支援有限。 通用 Windows 驅動程式必須使用 UMDF 2。 如需詳細資訊,請參閱使用 UMDF 使用者入門。]

RequestRetrieveOutputBuffer 方法會擷取 I/O 要求的輸出緩衝區。

語法

HRESULT RetrieveOutputBuffer(
  [in]            SIZE_T MinimumRequiredCb,
  [out]           PVOID  *Buffer,
  [out, optional] SIZE_T *BufferCb
);

參數

[in] MinimumRequiredCb

驅動程式需要處理 I/O 要求的最小緩衝區大小,以位元組為單位。 如果沒有緩衝區大小下限,這個值可以是零。

[out] Buffer

接收緩衝區位址之位置的指標。

[out, optional] BufferCb

接收緩衝區大小之位置的指標,以位元組為單位。 這個參數是選擇性的,而且可以是 NULL

傳回值

如果作業成功,RequestRetrieveOutputBuffer 會傳回S_OK。 否則,這個方法可以傳回下列值:

傳回碼 Description
HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER)
I/O 要求未提供輸出緩衝區,或輸出緩衝區的大小小於 MinimumRequiredCb 指定的最小大小。
E_OUTOFMEMORY
記憶體不足,無法擷取緩衝區。 驅動程式應該會以錯誤狀態值完成要求。
 

這個方法可能會傳回 Winerror.h 包含的其他其中一個值。

備註

要求的輸出緩衝區會接收來自磁碟的數據等資訊,驅動程式會提供給要求的來源。 驅動程式可以呼叫 RequestRetrieveOutputBuffer 來取得讀取要求或裝置 I/O 控制要求的輸出緩衝區,但不適用於寫入要求 (,因為寫入要求不提供輸出數據) 。

RequestRetrieveOutputBuffer 方法會擷取 I/O 要求的輸出緩衝區,這些要求會使用緩衝的 I/O直接 I/O 方法來存取數據緩衝區。

如果 RequestRetrieveOutputBuffer 傳回S_OK,驅動程式會收到位址,並選擇性地接收輸出緩衝區的大小。

驅動程式可以存取擷取的緩衝區,直到 它完成 I/O 要求為止。

驅動程式可以呼叫 IWDFIoRequest2::RetrieveOutputMemory,而不是呼叫 RequestRetrieveOutputBuffer,這會建立代表緩衝區的架構記憶體物件。

如需存取 I/O 要求數據緩衝區的詳細資訊,請參閱 存取 UMDF-Based 驅動程式中的數據緩衝區

範例

下列程式代碼範例顯示序列埠驅動程式 IQueueCallbackDeviceIoControl::OnDeviceIoControl 回呼函式的區段。 程式代碼區段會取得 I/O 要求的輸出緩衝區,然後將傳輸速率資訊從裝置傳輸到緩衝區。

VOID
STDMETHODCALLTYPE
  CMyQueue::OnDeviceIoControl(
    __in IWDFIoQueue *pWdfQueue,
    __in IWDFIoRequest *pWdfRequest,
    __in ULONG ControlCode,
    __in SIZE_T InputBufferSizeInBytes,
    __in SIZE_T OutputBufferSizeInBytes
    )
{
    HRESULT hr;
    //
    // Declare an IWDFIoRequest2 interface pointer and obtain the
    // IWDFIoRequest2 interface from the IWDFIoRequest interface.
    //
    CComQIPtr<IWDFIoRequest2> r2 = pWdfRequest;

    switch (ControlCode)
    {
        case IOCTL_SERIAL_GET_BAUD_RATE:
        {
            SERIAL_BAUD_RATE *pBaudRateBuffer;
            hr = pWdfRequest2->RetrieveOutputBuffer(sizeof(SERIAL_BAUD_RATE),
                                                    (PVOID*) &pBaudRateBuffer,
                                                    NULL);
            if (SUCCEEDED(hr))
                  {
                      RtlZeroMemory(pBaudRateBuffer, sizeof(SERIAL_BAUD_RATE));
                      pBaudRateBuffer->BaudRate = m_Device->GetBaudRate();
                      reqCompletionInfo = sizeof(SERIAL_BAUD_RATE);
                  }
            
        }
        break;
        ...
    }
    ...
}

規格需求

需求
終止支援 在 UMDF 2.0 和更新版本中無法使用。
目標平台 桌面
最低UMDF版本 1.9
標頭 wudfddi.h (包含 Wudfddi.h)
Dll WUDFx.dll

另請參閱

IWDFIoRequest2

IWDFIoRequest2::RetrieveInputBuffer

IWDFIoRequest2::RetrieveInputMemory

IWDFIoRequest2::RetrieveOutputMemory

IWDFIoRequest::GetInputMemory

IWDFIoRequest::GetOutputMemory