IWDFIoRequest2::RetrieveOutputBuffer 方法 (wudfddi.h)
[警告: UMDF 2 是最新版本的 UMDF,並取代 UMDF 1。 所有新的UMDF驅動程式都應該使用UMDF 2撰寫。 未將新功能新增至 UMDF 1,而且較新版本的 Windows 10 上對 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。 否則,此方法可以傳回下列值:
傳回碼 | 描述 |
---|---|
|
I/O 要求未提供輸出緩衝區,或輸出緩衝區的大小小於 MinimumRequiredCb 指定的最小大小。 |
|
記憶體不足,無法擷取緩衝區。 驅動程式應該會以錯誤狀態值完成要求。 |
這個方法可能會傳回 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::RetrieveInputBuffer
IWDFIoRequest2::RetrieveInputMemory