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或其他状态值(如果函数遇到错误),NT_SUCCESS(状态)等于 TRUE。 否则,此函数必须返回一个状态值,NT_SUCCESS(状态)等于 FALSE。
注解
驱动程序可以在调用 WdfIoQueueAssignForwardProgressPolicy时注册 EvtIoAllocateResourcesForReservedRequest 回调函数。
如果驱动程序注册 EvtIoAllocateResourcesForReservedRequest 回调函数,则框架会在创建一个请求对象后立即调用该函数,该函数为低内存情况保留。
如果框架由于内存不足而使用保留请求,回调函数可以分配驱动程序稍后需要处理请求的资源。
若要为特定于请求的资源分配内存,EvtIoAllocateResourcesForReservedRequest 回调函数可能会调用 WdfObjectAllocateContext,并指定 Request 参数指定的请求对象句柄。
或者,在调用 WdfDeviceCreate之前,驱动程序可能会调用 WdfDeviceInitSetRequestAttributes。 因此,框架将在创建对象时为每个保留的请求对象分配上下文空间。
如果驱动程序为保留请求对象分配对象上下文空间,则驱动程序在完成使用保留请求对象的 I/O 请求时必须重新初始化上下文空间。 使用后,框架不会重新初始化保留请求对象的上下文空间。
如果驱动程序 WdfDeviceInitSetRequestAttributes 并指定 EvtCleanupCallback 或 EvtDestroyCallback 回调函数作为其请求对象,则框架仅在删除关联的 I/O 队列时才为其保留请求对象调用这些回调函数。
驱动程序 请求处理程序 可以调用 WdfRequestIsReserved 来确定是否使用了保留的请求对象。
有关如何使用对象上下文空间的详细信息,请参阅 Framework 对象上下文空间。
如果回调函数成功分配资源,它应返回STATUS_SUCCESS。
如果发生资源分配错误(例如内存不足的情况),回调函数必须返回错误状态值。 在这种情况下,框架停止分配保留请求对象,并使用回调函数的返回值作为 WdfIoQueueAssignForwardProgressPolicy的返回值。
有关 EvtIoAllocateResourcesForReservedRequest 回调函数的详细信息,请参阅 保证 I/O作的向前进度。
要求
要求 | 价值 |
---|---|
目标平台 | 普遍 |
最低 KMDF 版本 | 1.9 |
标头 | wdfio.h (包括 Wdf.h) |
IRQL | <=DISPATCH_LEVEL |