WdfRequestRetrieveUnsafeUserOutputBuffer 函数 (wdfrequest.h)

[仅适用于 KMDF]

如果请求访问数据缓冲区的技术既不是缓冲的,也不是直接 I/O,WdfRequestRetrieveUnsafeUserOutputBuffer 方法检索 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。 否则,此方法可能会返回以下值之一:

返回代码 说明
STATUS_INVALID_PARAMETER
输入参数无效。
STATUS_INVALID_DEVICE_REQUEST
如果发生以下情况之一,则返回此值:
STATUS_BUFFER_TOO_SMALL
MinimumRequiredLength 参数指定大于缓冲区实际大小的缓冲区大小。
 

此方法还可能返回其他 NTSTATUS 值

如果驱动程序提供无效的对象句柄,则会发生 bug 检查。

注解

必须从 EvtIoInCallerContext 回调函数调用 WdfRequestRetrieveUnsafeUserOutputBuffer 方法。 调用 WdfRequestRetrieveUnsafeUserOutputBuffer 后,驱动程序必须调用 WdfRequestProbeAndLockUserBufferForWrite

如果请求的 I/O 控制代码IRP_MJ_READIRP_MJ_DEVICE_CONTROL,驱动程序可以调用 WdfRequestRetrieveUnsafeUserOutputBuffer

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

有关 WdfRequestRetrieveUnsafeUserOutputBuffer 的详细信息,请参阅 访问 Framework-Based Drivers 中的数据缓冲区

示例

有关使用 WdfRequestRetrieveUnsafeUserOutputBuffer 的代码示例,请参阅 WdfRequestProbeAndLockUserBufferForRead

要求

要求
目标平台 通用
最低 KMDF 版本 1.0
标头 wdfrequest.h (包括 Wdf.h)
Library Wdf01000.sys (请参阅框架库 Versioning.)
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)

另请参阅

EvtIoInCallerContext

WdfRequestProbeAndLockUserBufferForWrite

WdfRequestRetrieveUnsafeUserInputBuffer