FS_FILTER_CALLBACKS 結構 (ntifs.h)
FS_FILTER_CALLBACKS 結構包含呼叫端提供的通知回呼例程進入點。
語法
typedef struct _FS_FILTER_CALLBACKS {
ULONG SizeOfFsFilterCallbacks;
ULONG Reserved;
PFS_FILTER_CALLBACK PreAcquireForSectionSynchronization;
PFS_FILTER_COMPLETION_CALLBACK PostAcquireForSectionSynchronization;
PFS_FILTER_CALLBACK PreReleaseForSectionSynchronization;
PFS_FILTER_COMPLETION_CALLBACK PostReleaseForSectionSynchronization;
PFS_FILTER_CALLBACK PreAcquireForCcFlush;
PFS_FILTER_COMPLETION_CALLBACK PostAcquireForCcFlush;
PFS_FILTER_CALLBACK PreReleaseForCcFlush;
PFS_FILTER_COMPLETION_CALLBACK PostReleaseForCcFlush;
PFS_FILTER_CALLBACK PreAcquireForModifiedPageWriter;
PFS_FILTER_COMPLETION_CALLBACK PostAcquireForModifiedPageWriter;
PFS_FILTER_CALLBACK PreReleaseForModifiedPageWriter;
PFS_FILTER_COMPLETION_CALLBACK PostReleaseForModifiedPageWriter;
PFS_FILTER_CALLBACK PreQueryOpen;
PFS_FILTER_COMPLETION_CALLBACK PostQueryOpen;
} FS_FILTER_CALLBACKS, *PFS_FILTER_CALLBACKS;
成員
SizeOfFsFilterCallbacks
這個結構的大小,以位元組為單位。 設定為 sizeof(FS_FILTER_CALLBACKS)
。 SizeOfFsFilterCallbacks 不得設定為零。
Reserved
保留的。 請勿使用。
PreAcquireForSectionSynchronization
FS_FILTER_CALLBACK PreAcquireForSectionSynchronization 例程的指標。
PostAcquireForSectionSynchronization
FS_FILTER_CALLBACK PostAcquireForSectionSynchronization 例程的指標。
PreReleaseForSectionSynchronization
FS_FILTER_CALLBACK PreReleaseForSectionSynchronization 例程的指標。
PostReleaseForSectionSynchronization
FS_FILTER_CALLBACK PostReleaseForSectionSynchronization 例程的指標。
PreAcquireForCcFlush
FS_FILTER_CALLBACK PreAcquireForCcFlush 例程的指標。
PostAcquireForCcFlush
FS_FILTER_CALLBACK PostAcquireForCcFlush 例程的指標。
PreReleaseForCcFlush
FS_FILTER_CALLBACK PreReleaseForCcFlush 例程的指標。
PostReleaseForCcFlush
FS_FILTER_CALLBACK PostReleaseForCcFlush 例程的指標。
PreAcquireForModifiedPageWriter
FS_FILTER_CALLBACK PreAcquireForModifiedPageWriter 例程的指標。
PostAcquireForModifiedPageWriter
FS_FILTER_CALLBACK PostAcquireForModifiedPageWriter 例程的指標。
PreReleaseForModifiedPageWriter
FS_FILTER_CALLBACK PreReleaseForModifiedPageWriter 例程的指標。
PostReleaseForModifiedPageWriter
FS_FILTER_CALLBACK PostReleaseForModifiedPageWriter 例程的指標。
PreQueryOpen
FS_FILTER_CALLBACK PreQueryOpen 例程的指標。
PostQueryOpen
FS_FILTER_CALLBACK PostQueryOpen 例程的指標。
備註
文件系統篩選驅動程式和文件系統會呼叫 FsRtlRegisterFileSystemFilterCallbacks 例程,以註冊基礎文件系統執行特定作業時要叫用的通知回呼例程。
所有回呼進入點都是選擇性的,而且可以是 NULL。
FS_FILTER_CALLBACK篩選回呼例程及其參數的定義如下:
typedef
NTSTATUS (*PFS_FILTER_CALLBACK) (
IN PFS_FILTER_CALLBACK_DATA Data,
OUT PVOID *CompletionContext
);
參數 | 意義 |
---|---|
資料 | 這個作業 之FS_FILTER_CALLBACK_DATA 結構的指標。 |
CompletionContext | 要傳遞至篩選完成回呼例程的內容資訊。 如果未傳遞任何內容資訊,或沒有對應的篩選完成回呼例程,則設定為 NULL 。 |
FS_FILTER_COMPLETION_CALLBACK篩選完成回呼例程及其參數的定義如下:
typedef
VOID (*PFS_FILTER_COMPLETION_CALLBACK) (
IN PFS_FILTER_CALLBACK_DATA Data,
IN NTSTATUS OperationStatus,
IN PVOID CompletionContext
);
參數 | 意義 |
---|---|
資料 | 這個作業 之FS_FILTER_CALLBACK_DATA 結構的指標。 |
OperationStatus | 作業的狀態。 如果文件系統已成功執行作業,此參數會設定為 STATUS_SUCCESS。 否則,它會設定為適當的錯誤狀態值。 |
CompletionContext | 篩選回呼例程中設定的內容資訊。 如果沒有傳遞任何資訊,或沒有對應的篩選回呼例程,這會設定為 NULL 。 |
回呼例程是針對下列作業所定義的:
作業 | 通知回呼例程 |
---|---|
記憶體管理員會先獨佔取得檔案,再為檔案的一部分建立記憶體對應區段。 針對這項作業, SyncType 會設定為 SyncTypeCreateSection。 | PreAcquireForSectionSynchronization、PostAcquireForSectionSynchronization |
記憶體管理員在為檔案的一部分建立記憶體對應區段之後,釋放檔案。 | PreReleaseForSectionSynchronization、PostReleaseForSectionSynchronization |
核心元件 (,例如快取管理員) 會先獨佔取得檔案,再暫時停用部分檔案的區段建立。 針對這項作業, SyncType 會設定為 SyncTypeOther。 | PreAcquireForSectionSynchronization、PostAcquireForSectionSynchronization。 PreAcquireForSectionSynchronization 應該一律傳回成功狀態代碼 (,例如此作業的STATUS_SUCCESS) 。 |
核心元件 (,例如快取管理員) 在暫時停用部分檔案的區段建立之後釋出檔案。 | PreReleaseForSectionSynchronization、PostReleaseForSectionSynchronization |
快取管理員會先獨佔取得檔案,再從快取排清檔案的一部分。 | PreAcquireForCcFlush、PostAcquireForCcFlush |
快取管理員會在從快取排清部分檔案之後釋出檔案。 | PreReleaseForCcFlush、PostReleaseForCcFlush |
修改的頁面寫入器會先取得檔案,再將檔案的一部分寫入磁碟。 | PreAcquireForModifiedPageWriter、 PostAcquireForModifiedPageWriter |
修改過的頁面寫入器會將檔案寫入磁碟之後釋出檔案。 | PreReleaseForModifiedPageWriter、 PostReleaseForModifiedPageWriter |
元件會依名稱查詢檔案資訊,而不需開啟檔案。 重新導向器永遠不會使用此查詢呼叫,因此不需要實作 PreQueryOpen 或 PostQueryOpen 回呼。 | PreQueryOpen、PostQueryOpen |
在作業要求傳遞至較低層級的篩選驅動程式和基礎文件系統之前,會叫用篩選通知回呼例程。 在回呼例程中,篩選驅動程式應該執行任何必要的處理,並立即傳回STATUS_SUCCESS。 如果篩選驅動程式的回呼例程傳回STATUS_SUCCESS以外的狀態值,這會導致作業要求失敗。 某些要求的重複失敗,例如鎖定要求,可能會停止系統進度。 因此,篩選驅動程式應該只在絕對必要時失敗這類要求。 當失敗這些要求時,篩選驅動程式應該會傳回錯誤狀態值,以盡可能完整且精確地描述錯誤。
注意
篩選驅動程式的通知回呼例程無法讓要求釋放檔系統資源失敗。 如果篩選驅動程式從下列任何通知回呼例程傳回STATUS_SUCCESS以外的狀態值,則會忽略狀態值。
- PreReleaseForSectionSynchronization
- PreReleaseForCcFlush
- PreReleaseForModifiedPageWriter
將作業要求傳遞至較低層級的篩選驅動程式和基礎文件系統之後,就會叫用篩選完成回呼例程。 在完成回呼例程中,篩選驅動程式必須執行任何必要的處理,並立即傳回。
規格需求
需求 | 值 |
---|---|
標頭 | ntifs.h |