IWDFIoRequest2::RetrieveInputBuffer 方法 (wudfddi.h)

[警告: UMDF 2 是最新版本的 UMDF,并取代 UMDF 1。 所有新的 UMDF 驱动程序都应使用 UMDF 2 编写。 不会向 UMDF 1 添加任何新功能,并且较新版本的 Windows 10 上对 UMDF 1 的支持有限。 通用 Windows 驱动程序必须使用 UMDF 2。 有关详细信息,请参阅使用 UMDF 入门。]

RequestRetrieveInputBuffer 方法检索 I/O 请求的输入缓冲区。

语法

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

参数

[in] MinimumRequiredCb

驱动程序处理 I/O 请求所需的最小缓冲区大小(以字节为单位)。 如果没有最小缓冲区大小,此值可以为零。

[out] Buffer

指向接收缓冲区地址的位置的指针。

[out, optional] BufferCb

指向接收缓冲区大小(以字节为单位)的位置的指针。 此参数是可选的,可以为 NULL

返回值

如果操作成功,RequestRetrieveInputBuffer 将返回S_OK。 否则,此方法可返回以下值:

返回代码 说明
HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER)
I/O 请求未提供输入缓冲区,或者输入缓冲区的大小小于 MinimumRequiredCb 指定的最小大小。
E_OUTOFMEMORY
没有足够的内存可用于检索缓冲区。 驱动程序应使用错误状态值完成请求。
 

此方法可能返回 Winerror.h 包含的其他值之一。

注解

请求的输入缓冲区包含请求的发起者提供的信息,例如要写入磁盘的数据。 驱动程序可以调用 RequestRetrieveInputBuffer 来获取写入请求或设备 I/O 控制请求的输入缓冲区,但对于读取请求 (,因为读取请求不提供输入数据) 。

RequestRetrieveInputBuffer 方法检索使用缓冲 I/O 或直接 I/O 方法来访问数据缓冲区的 I/O 请求的输入缓冲区。

如果 RequestRetrieveInputBuffer 返回S_OK,驱动程序将接收地址以及输入缓冲区的大小(可选)。

驱动程序可以访问检索到的缓冲区,直到 它完成 I/O 请求。

驱动程序可以调用 IWDFIoRequest2::RetrieveInputMemory,这将创建表示缓冲区的框架内存对象,而不是调用 RequestRetrieveInputBuffer

有关访问 I/O 请求的数据缓冲区的详细信息,请参阅 访问 UMDF-Based 驱动程序中的数据缓冲区

示例

下面的代码示例演示串行端口驱动程序的 IQueueCallbackDeviceIoControl::OnDeviceIoControl 回调函数的段。 从 I/O 请求的输入缓冲区,代码段获取应为设备设置的波特率。

VOID
STDMETHODCALLTYPE
  CMyQueue::OnDeviceIoControl(
    __in IWDFIoQueue*  FxQueue,
    __in IWDFIoRequest*  FxRequest,
    __in ULONG  ControlCode,
    __in SIZE_T  InputBufferCb,
    __in SIZE_T  OutputBufferCb
    )
{
    PBYTE buffer;
    SIZE_T bufferSize;
    HRESULT hr;
    //
    // Declare an IWDFIoRequest2 interface pointer and obtain the
    // IWDFIoRequest2 interface from the IWDFIoRequest interface.
    //
    CComQIPtr<IWDFIoRequest2> r2 = FxRequest;

    switch (ControlCode)
    {
        case IOCTL_SERIAL_SET_BAUD_RATE: 
        {
            //
            // Obtain the baud rate from the write request's input buffer.
            //
            hr = r2->RetrieveInputBuffer(sizeof(SERIAL_BAUD_RATE),
                                         (PVOID*) &buffer, 
                                         &bufferSize);
...
        }
    }
}

要求

要求
结束支持 在 UMDF 2.0 及更高版本中不可用。
目标平台 桌面
最低 UMDF 版本 1.9
标头 wudfddi.h (包括 Wudfddi.h)
DLL WUDFx.dll

另请参阅

IWDFIoRequest2

IWDFIoRequest2::RetrieveInputMemory

IWDFIoRequest2::RetrieveOutputBuffer

IWDFIoRequest2::RetrieveOutputMemory

IWDFIoRequest::GetInputMemory

IWDFIoRequest::GetOutputMemory