[警告: UMDF 2 是最新版本的 UMDF,取代了 UMDF 1。 所有新的 UMDF 驱动程序都应使用 UMDF 2 编写。 没有将新功能添加到 UMDF 1,并且对较新版本的 Windows 10 上的 UMDF 1 的支持有限。 通用 Windows 驱动程序必须使用 UMDF 2。 有关详细信息,请参阅 UMDF入门 。]
RetrieveInputMemory 方法检索表示 I/O 请求输入缓冲区的框架内存对象的 IWDFMemory 接口。
语法
HRESULT RetrieveInputMemory(
[out] IWDFMemory **Memory
);
参数
[out] Memory
接收指向 UMDF 内存对象的 IWDFMemory 接口的位置的地址。
返回值
如果作成功,RetrieveInputMemory 返回S_OK。 否则,此方法可以返回以下值:
| 返回代码 | 描述 |
|---|---|
|
I/O 请求未提供输出缓冲区。 |
|
没有足够的内存可用于检索缓冲区。 驱动程序应使用错误状态值完成请求。 |
此方法可能会返回 Winerror.h 包含的其他值之一。
言论
请求的输入缓冲区包含要写入磁盘的信息,例如要写入到请求的发起方的数据。 驱动程序可以调用 RetrieveInputMemory 以获取写入请求或设备 I/O 控制请求的输入缓冲区,但不能用于读取请求(因为读取请求不提供输入数据)。
RetrieveInputMemory 方法检索使用 缓冲 I/O 或 直接 I/O 方法访问数据缓冲区的 I/O 请求的输入缓冲区。
如果 RetrieveInputMemory 返回S_OK,驱动程序将收到一个指向表示输入缓冲区的 UMDF 内存对象的 IWDFMemory 接口的指针。 若要访问缓冲区,驱动程序必须调用 IWDFMemory::GetDataBuffer。
驱动程序可以访问检索到的框架内存对象,直到它 完成 I/O 请求。 在驱动程序完成 I/O 请求之前,它必须调用 IWDFMemory::Release。
驱动程序可以调用 IWDFIoRequest2::RetrieveInputBuffer(用于检索缓冲区的地址和长度),而不是调用 RetrieveInputMemory。
有关访问 I/O 请求的数据缓冲区的详细信息,请参阅 访问 UMDF-Based 驱动程序中的数据缓冲区。
例子
下面的代码示例演示 IQueueCallbackWrite::OnWrite 回调函数如何获取表示写入请求的输入缓冲区的框架内存对象的 IWDFMemory 接口。 然后,该示例格式化写入请求并将其发送到 USB I/O 目标。
VOID
STDMETHODCALLTYPE
CMyQueue::OnWrite(
__in IWDFIoQueue *pWdfQueue,
__in IWDFIoRequest *pWdfRequest,
__in SIZE_T BytesToWrite
)
{
HRESULT hr = S_OK;
IWDFMemory * pInputMemory = NULL;
IWDFUsbTargetPipe * pOutputPipe = m_Device->GetOutputPipe();
//
// Declare an IWDFIoRequest2 interface pointer and obtain the
// IWDFIoRequest2 interface from the IWDFIoRequest interface.
//
CComQIPtr<IWDFIoRequest2> r2 = pWdfRequest;
hr = r2->RetrieveInputMemory(&pInputMemory);
if (FAILED(hr)) goto Exit;
hr = pOutputPipe->FormatRequestForWrite(
pWdfRequest,
NULL, //pFile
pInputMemory,
NULL, //Memory offset
NULL //DeviceOffset
);
Exit:
if (FAILED(hr))
{
pWdfRequest->Complete(hr);
}
else
{
ForwardFormattedRequest(pWdfRequest, pOutputPipe);
}
SAFE_RELEASE(pInputMemory);
return;
}
要求
| 要求 | 价值 |
|---|---|
| 终止支持 | 在 UMDF 2.0 及更高版本中不可用。 |
| 目标平台 | 桌面 |
| 最低 UMDF 版本 | 1.9 |
| 标头 | wudfddi.h (包括 Wudfddi.h) |
| DLL | WUDFx.dll |
另请参阅
IWDFIoRequest2::RetrieveInputBuffer
IWDFIoRequest2::RetrieveOutputBuffer