共用方式為


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 值,例如下列其中一項:

傳回碼 Description
STATUS_FLT_DELETING_OBJECT
迷你篩選驅動程序的實例正在損毀。 這是錯誤碼。
STATUS_INSUFFICIENT_RESOURCES
FltRequestOperationStatusCallback 發生集區配置失敗。 這是錯誤碼。
STATUS_INVALID_PARAMETER
FltRequestOperationStatusCallback 是從不是預先操作回呼的例程呼叫, (PFLT_PRE_OPERATION_CALLBACK) 例程,或 I/O 作業是IRP_MJ_CLOSE要求。 這是錯誤碼。

備註

迷你篩選驅動程式可以針對 IRP 型 I/O 作業呼叫 FltRequestOperationStatusCallback ,以取得針對作業傳回 的 IoCallDriver 狀態值。

大部分迷你篩選驅動程式都不需要呼叫 FltRequestOperationStatusCallback。 一般而言,迷你篩選驅動程式只會呼叫此例程,以判斷是否已授與要求的 oplock。

FltRequestOperationStatusCallback 只能從迷你篩選驅動程式的預先操作回呼 (PFLT_PRE_OPERATION_CALLBACK) 例程呼叫。

FltRequestOperationStatusCallback 只能針對非IRP_MJ_CLOSE IRP 型作業呼叫。 若要判斷作業是否為 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

規格需求

需求
目標平台 Universal
標頭 fltkernel.h (包含 Fltkernel.h)
程式庫 Fltmgr.lib
Dll Fltmgr.sys
IRQL <= APC_LEVEL

另請參閱

FLT_CALLBACK_DATA

FLT_IO_PARAMETER_BLOCK

FLT_IS_IRP_OPERATION

FLT_RELATED_OBJECTS

IoCallDriver

PFLT_GET_OPERATION_STATUS_CALLBACK

PFLT_PRE_OPERATION_CALLBACK