FltRequestOperationStatusCallback 函数 (fltkernel.h)
FltRequestOperationStatusCallback 返回给定 I/O作的状态信息。
语法
NTSTATUS FLTAPI FltRequestOperationStatusCallback(
[in] PFLT_CALLBACK_DATA Data,
[in] PFLT_GET_OPERATION_STATUS_CALLBACK CallbackRoutine,
[in, optional] PVOID RequesterContext
);
参数
[in] Data
指向 I/O作的回调数据(FLT_CALLBACK_DATA)结构的指针。 此参数是必需的,不能 NULL。
[in] CallbackRoutine
指向筛选器管理器在 IoCallDriver 返回后调用的回调例程的指针。 此参数是必需的,不能 NULL。
[in, optional] RequesterContext
要传递给 CallbackRoutine的上下文指针。 此参数是可选的,可以 NULL。
返回值
FltRequestOperationStatusCallback 返回STATUS_SUCCESS或适当的 NTSTATUS 值,例如以下值之一:
返回代码 | 描述 |
---|---|
|
微型筛选器驱动程序的实例正在被拆毁。 这是一个错误代码。 |
|
FltRequestOperationStatusCallback 遇到池分配失败。 这是一个错误代码。 |
|
FltRequestOperationStatusCallback 是从不是预作回调(PFLT_PRE_OPERATION_CALLBACK)例程的例程调用的,或者 I/O作是IRP_MJ_CLOSE请求。 这是一个错误代码。 |
言论
微型筛选器驱动程序可以针对基于 IRP 的 I/O作调用 FltRequestOperationStatusCallback,以获取为作返回 IoCallDriver 的状态值。
大多数微型筛选器驱动程序从不需要调用 FltRequestOperationStatusCallback。 通常,微型筛选器驱动程序仅调用此例程来确定是否授予了请求的 oplock。
FltRequestOperationStatusCallback 只能从微型筛选器驱动程序的预作回调(PFLT_PRE_OPERATION_CALLBACK)例程调用。
FltRequestOperationStatusCallback 只能为基于 IRP 的非IRP_MJ_CLOSE作调用。 若要确定作是否为基于 IRP 的作,请使用 FLT_IS_IRP_OPERATION 宏。
如果基于 IRP 的作是IRP_MJ_CLOSE请求,则返回STATUS_INVALID_PARAMETER。
FltRequestOperationStatusCallback 将 I/O 参数块(FLT_IO_PARAMETER_BLOCK)的内容复制到回调数据的 Iopb 成员(FLT_CALLBACK_DATA),这是筛选器管理器将传递给 CallbackRoutine 参数中指定的例程的回调数据。 复制的数据表示在预作回调(PFLT_PRE_OPERATION_CALLBACK)例程调用 FltRequestOperationStatusCallback时 I/O 参数块的快照。 如果预作回调例程在调用 FltRequestOperationStatusCallback后更改 I/O 参数块,筛选器管理器传递给 CallbackRoutine 的 I/O 参数块将不同于筛选器驱动程序在调用 IoCallDriver时传递驱动程序堆栈的 I/O 参数块。
预作回调例程中的以下示例代码演示了这种情况的发生方式:
PFLT_CALLBACK_DATA Data;
PFLT_GET_OPERATION_STATUS_CALLBACK CallbackRoutine;
PVOID RequesterContext;
...
if (iopb->MajorFunction == IRP_MJ_READ) {
FltRequestOperationStatusCallback (Data, CallbackRoutine, RequesterContext);
Data->Iopb->Parameters.Read.ReadBuffer = newBuffer;
...
}
在此示例中,读取缓冲区在调用 FltRequestOperationStatusCallback后更改,因此当筛选器管理器调用 CallbackRoutine时,它将传入指向旧缓冲区的指针而不是新缓冲区。
筛选器管理器在 IRQL <= APC_LEVEL 的发起线程的上下文中调用给定的 CallbackRoutine。
要求
要求 | 价值 |
---|---|
目标平台 | 普遍 |
标头 | fltkernel.h (包括 Fltkernel.h) |
库 | Fltmgr.lib |
DLL | Fltmgr.sys |
IRQL | <= APC_LEVEL |