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 |
---|---|
|
迷你篩選驅動程序的實例正在損毀。 這是錯誤碼。 |
|
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_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 |