EVT_WDF_IO_ALLOCATE_RESOURCES_FOR_RESERVED_REQUEST回调函数 (wdfio.h)

[仅适用于 KMDF]

驱动程序的 EvtIoAllocateResourcesForReservedRequest 回调函数分配特定于请求的资源,驱动程序将来可以使用这些资源来处理 I/O 请求。 框架正在预先分配指定的请求对象,以供将来在内存不足的情况下使用。

语法

EVT_WDF_IO_ALLOCATE_RESOURCES_FOR_RESERVED_REQUEST EvtWdfIoAllocateResourcesForReservedRequest;

NTSTATUS EvtWdfIoAllocateResourcesForReservedRequest(
  [in] WDFQUEUE Queue,
  [in] WDFREQUEST Request
)
{...}

参数

[in] Queue

I/O 队列对象的句柄。

[in] Request

框架创建的请求对象的句柄,用于将来内存不足的情况。

返回值

如果函数没有遇到错误,EvtIoAllocateResourcesForReservedRequest 回调函数必须返回STATUS_SUCCESS或 (状态) 等于 TRUE 的其他状态NT_SUCCESS值。 否则,此函数必须返回状态值,NT_SUCCESS (状态) 等于 FALSE

注解

驱动程序可以在调用 WdfIoQueueAssignForwardProgressPolicy 时注册 EvtIoAllocateResourcesForReservedRequest 回调函数。

如果驱动程序注册 EvtIoAllocateResourcesForReservedRequest 回调函数,框架会在创建请求对象后立即调用该函数,该请求对象保留用于低内存情况。

如果框架由于内存不足而使用保留请求,则回调函数可以分配驱动程序稍后处理请求所需的资源。

若要为特定于请求的资源分配内存, EvtIoAllocateResourcesForReservedRequest 回调函数可以调用 WdfObjectAllocateContext,并指定 Request 参数指定的请求对象句柄。

或者,或者,驱动程序可能会在调用 WdfDeviceCreate 之前调用 WdfDeviceInitSetRequestAttributes 因此,框架会在创建对象时为每个保留的请求对象分配上下文空间。

如果驱动程序为保留请求对象分配对象上下文空间,则驱动程序在完成使用保留请求对象的 I/O 请求时必须重新初始化上下文空间。 使用后,框架不会重新初始化保留请求对象的上下文空间。

如果驱动程序调用 WdfDeviceInitSetRequestAttributes 并为其请求对象指定 EvtCleanupCallbackEvtDestroyCallback 回调函数,则框架仅在删除关联的 I/O 队列时为其保留的请求对象调用这些回调函数。

驱动程序 的请求处理程序 可以调用 WdfRequestIsReserved ,以确定是否正在使用保留的请求对象。

有关如何使用对象上下文空间的详细信息,请参阅 框架对象上下文空间

如果回调函数成功分配资源,则它应返回STATUS_SUCCESS。

如果发生资源分配错误(例如内存不足的情况),回调函数必须返回错误状态值。 在这种情况下,框架停止分配保留的请求对象,并使用回调函数的返回值作为 WdfIoQueueAssignForwardProgressPolicy 的返回值。

有关 EvtIoAllocateResourcesForReservedRequest 回调函数的详细信息,请参阅 保证 I/O 操作的向前进度

要求

要求
目标平台 通用
最低 KMDF 版本 1.9
标头 wdfio.h (包括 Wdf.h)
IRQL <=DISPATCH_LEVEL

另请参阅

EvtIoAllocateRequestResources

WdfIoQueueAssignForwardProgressPolicy

WdfRequestIsReserved