共用方式為


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 例程的指標。

言論

文件系統篩選驅動程式和文件系統會呼叫 FsRtlRegisterFileSystemFileSystemFilterCallbacks 例程,以註冊基礎文件系統執行特定作業時要叫用的通知回呼例程。

所有回呼進入點都是選擇性的,而且可以 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

另請參閱

FS_FILTER_CALLBACK_DATA

FsRtlRegisterFileSystemFilterCallbacks