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。 否则,此方法可以返回以下值:
返回代码 | 描述 |
---|---|
|
I/O 请求未提供输入缓冲区,或者输入缓冲区的大小小于 MinimumRequiredCb 指定的最小大小。 |
|
没有足够的内存可用于检索缓冲区。 驱动程序应使用错误状态值完成请求。 |
此方法可能会返回 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::RetrieveInputMemory
IWDFIoRequest2::RetrieveOutputBuffer