共用方式為


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

另請參閱

FS_FILTER_CALLBACK_DATA

FsRtlRegisterFileSystemFilterCallbacks