[仅适用于 KMDF]
WdfRequestRetrieveUnsafeUserOutputBuffer 方法检索 I/O 请求的输出缓冲区,如果请求访问数据缓冲区的技术 既不是缓冲的,也不是直接的 I/O。
语法
NTSTATUS WdfRequestRetrieveUnsafeUserOutputBuffer(
  [in]            WDFREQUEST Request,
  [in]            size_t     MinimumRequiredLength,
  [out]           PVOID      *OutputBuffer,
  [out, optional] size_t     *Length
);
参数
[in] Request
框架请求对象的句柄。
[in] MinimumRequiredLength
驱动程序处理 I/O 请求所需的最小缓冲区大小(以字节为单位)。
[out] OutputBuffer
指向接收缓冲区地址的位置的指针。
[out, optional] Length
指向接收缓冲区大小(以字节为单位)的位置的指针。 此参数是可选的,可以 NULL。
返回值
WdfRequestRetrieveUnsafeUserOutputBuffer 如果作成功,则返回STATUS_SUCCESS。 否则,此方法可能会返回以下值之一:
| 返回代码 | 描述 | 
|---|---|
| 
 | 输入参数无效。 | 
| 
 | 如果出现以下情况之一,则返回此值: 
 | 
| 
 | MinimumRequiredLength 参数指定大于缓冲区实际大小的缓冲区大小。 | 
此方法也可能返回其他 NTSTATUS 值。
如果驱动程序提供无效的对象句柄,则会发生 bug 检查。
言论
必须从 EvtIoInCallerContext 回调函数调用 WdfRequestRetrieveUnsafeUserOutputBuffer 方法。 调用 WdfRequestRetrieveUnsafeUserOutputBuffer后,驱动程序必须调用 WdfRequestProbeAndLockUserBufferForWrite。
如果请求的 I/O 控件代码 IRP_MJ_READ 或 IRP_MJ_DEVICE_CONTROL,驱动程序可以调用 WdfRequestRetrieveUnsafeUserOutputBuffer。
驱动程序可以访问检索到的缓冲区,直到 完成 请求 参数表示的 I/O 请求。
有关 WdfRequestRetrieveUnsafeUserOutputBuffer的详细信息,请参阅 访问 Framework-Based 驱动程序中的数据缓冲区。
例子
有关使用 WdfRequestRetrieveUnsafeUserOutputBuffer的代码示例,请参阅 WdfRequestProbeAndLockUserBufferForRead。
要求
| 要求 | 价值 | 
|---|---|
| 目标平台 | 普遍 | 
| 最低 KMDF 版本 | 1.0 | 
| 标头 | wdfrequest.h (包括 Wdf.h) | 
| 库 | Wdf01000.sys(请参阅框架库版本控制。 | 
| IRQL | PASSIVE_LEVEL | 
| DDI 符合性规则 | BufAfterReqCompletedIntIoctl(kmdf),BufAfterReqCompletedIntIoctlA(kmdf),BufAfterReqCompletedIoctl(kmdf),BufAfterReqCompletedIoctlA(kmdf),BufAfterReqCompletedRead(kmdf),BufAfterReqCompletedReadA(kmdf), BufAfterReqCompletedWrite(kmdf), DriverCreate(kmdf), InvalidReqAccess(kmdf), InvalidReqAccessLocal(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), OutputBufferAPI(kmdf) |