WdfRequestRetrieveUnsafeUserOutputBuffer 函数 (wdfrequest.h)
[仅适用于 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) |