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 并为其请求对象指定 EvtCleanupCallback 或 EvtDestroyCallback 回调函数,则框架仅在删除关联的 I/O 队列时为其保留的请求对象调用这些回调函数。
驱动程序 的请求处理程序 可以调用 WdfRequestIsReserved ,以确定是否正在使用保留的请求对象。
有关如何使用对象上下文空间的详细信息,请参阅 框架对象上下文空间。
如果回调函数成功分配资源,则它应返回STATUS_SUCCESS。
如果发生资源分配错误(例如内存不足的情况),回调函数必须返回错误状态值。 在这种情况下,框架停止分配保留的请求对象,并使用回调函数的返回值作为 WdfIoQueueAssignForwardProgressPolicy 的返回值。
有关 EvtIoAllocateResourcesForReservedRequest 回调函数的详细信息,请参阅 保证 I/O 操作的向前进度。
要求
要求 | 值 |
---|---|
目标平台 | 通用 |
最低 KMDF 版本 | 1.9 |
标头 | wdfio.h (包括 Wdf.h) |
IRQL | <=DISPATCH_LEVEL |