共用方式為


FltNotifyFilterChangeDirectory 函式 (fltkernel.h)

FltNotifyFilterChangeDirectory 例程會建立IRP_MN_NOTIFY_CHANGE_DIRECTORY作業的通知結構,並將它新增至指定的通知清單。

語法

VOID FLTAPI FltNotifyFilterChangeDirectory(
  [in, out]      PNOTIFY_SYNC               NotifySync,
  [in, out]      PLIST_ENTRY                NotifyList,
  [in]           PVOID                      FsContext,
  [in]           PSTRING                    FullDirectoryName,
  [in]           BOOLEAN                    WatchTree,
  [in]           BOOLEAN                    IgnoreBuffer,
  [in]           ULONG                      CompletionFilter,
  [in]           PFLT_CALLBACK_DATA         NotifyCallbackData,
  [in, optional] PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback,
  [in, optional] PSECURITY_SUBJECT_CONTEXT  SubjectContext,
  [in, optional] PFILTER_REPORT_CHANGE      FilterCallback
);

參數

[in, out] NotifySync

變更目錄通知清單的不透明同步處理物件的指標,NotifyList 參數指向 。

[in, out] NotifyList

目前磁碟區變更目錄通知清單前端的指標。 清單中的每個元素都是不透明的通知結構。

[in] FsContext

呼叫端指派的唯一值指標,以識別要建立的通知結構。 如果在 TraverseCallback 參數中提供回呼例程,FsContext 會當做 NotifyContext 參數傳遞至該例程。

[in] FullDirectoryName

ANSI 或 Unicode 字串的指標,其中包含與此通知結構相關聯之目錄的完整名稱。

[in] WatchTree

如果也應該監看 FullDirectoryName 參數所指定之目錄的所有子目錄,請設定 為 true。 如果只有要監看目錄本身,請將 設定為 FALSE

[in] IgnoreBuffer

設定為 TRUE 忽略任何用戶緩衝區,並強制繼續目錄。 此動作會加快作業的速度。

[in] CompletionFilter

旗標的位掩碼,指定檔案或目錄的變更類型,這些檔案或目錄應該會導致通知清單中的回呼數據結構完成。 下表說明可能的旗標值。

意義
FILE_NOTIFY_CHANGE_FILE_NAME 此目錄中已新增、刪除或重新命名檔案。
FILE_NOTIFY_CHANGE_DIR_NAME 子目錄已建立、移除或重新命名。
FILE_NOTIFY_CHANGE_NAME 此目錄的名稱已變更。
FILE_NOTIFY_CHANGE_ATTRIBUTES 這個檔案的 屬性值已變更,例如上次存取時間。
FILE_NOTIFY_CHANGE_SIZE 此檔案的大小已變更。
FILE_NOTIFY_CHANGE_LAST_WRITE 此檔案的上次修改時間已變更。
FILE_NOTIFY_CHANGE_LAST_ACCESS 此檔案的上次存取時間已變更。
FILE_NOTIFY_CHANGE_CREATION 此檔案的建立時間已變更。
FILE_NOTIFY_CHANGE_EA 此檔案的擴充屬性已修改。
FILE_NOTIFY_CHANGE_SECURITY 此檔案的安全性資訊已變更。
FILE_NOTIFY_CHANGE_STREAM_NAME 檔案數據流已在此目錄中新增、刪除或重新命名。
FILE_NOTIFY_CHANGE_STREAM_SIZE 此檔案數據流的大小已變更。
FILE_NOTIFY_CHANGE_STREAM_WRITE 此檔案數據流的數據已變更。

[in] NotifyCallbackData

要新增至通知清單之作業之回呼數據結構的指標。 這是必要參數,而且無法 NULL

[in, optional] TraverseCallback

在目錄樹狀目錄中所監看的子目錄中發生變更時,要叫用的回呼例程選擇性指標。 此指標可讓文件系統檢查監看員是否具有該目錄的周遊存取權。 這類呼叫端提供的例程宣告如下:

NTSTATUS
(*PCHECK_FOR_TRAVERSE_ACCESS) (
    IN PVOID NotifyContext,                     // FsContext
    IN PVOID TargetContext,                     // Context pointer
    IN PSECURITY_SUBJECT_CONTEXT SubjectContext // SubjectContext
    );

如需 TargetContext 參數的詳細資訊,請參閱 FsRtlNotifyFullReportChange 例程的 TargetContext 參數。

[in, optional] SubjectContext

要傳遞至 TraverseCallback之內容結構的指標。 FltNotifyFilterChangeDirectory 釋放內容,並在使用它之後釋放結構。 如果提供 TraverseCallback 例程,SubjectContext 會當做 SubjectContext 參數傳遞給該例程。

[in, optional] FilterCallback

當目錄發生變更時要叫用的回呼例程選擇性指標。 如果此回呼例程傳回 trueFsRtlNotifyFilterReportChange 完成通知清單中的暫止IRP_MN_NOTIFY_CHANGE_DIRECTORY作業:否則,則不會。 這類呼叫端提供的例程宣告如下:

BOOLEAN
(*PFILTER_REPORT_CHANGE) (
    IN PVOID NotifyContext,                     // FsContext
    IN PVOID FilterContext                      // Context pointer
    );

傳回值

沒有

言論

小型篩選驅動程式可以從預先作回呼例程 (PFLT_PRE_OPERATION_CALLBACK) 呼叫 FltNotifyFilterChangeDirectory,以處理通知目錄作業。 這些作業具有 IRP_MJ_DIRECTORY_CONTROL 的主要函式程式碼,以及IRP_MN_NOTIFY_CHANGE_DIRECTORY的次要函式程序代碼。

迷你篩選驅動程式會呼叫 FltNotifyFilterChangeDirectory,以建立通知結構來保存作業的回呼數據結構,並將通知結構新增至目前磁碟區的通知清單。

FltNotifyFilterChangeDirectory 會執行下列動作:

  • 檢查作業的檔案物件是否已清除。 如果是,FltNotifyFilterChangeDirectory 會以狀態STATUS_NOTIFY_CLEANUP完成作業,而且不會將其新增至通知清單。
  • 如果作業的檔案物件尚未清除,FltNotifyFilterChangeDirectory 會檢查通知清單是否已經包含指定 FsContext 值的通知結構。 如果找到這類通知結構,而且報表有暫止變更,FltNotifyFilterChangeDirectory 完成 NotifyCallbackData 參數所指向的回呼數據結構。 如果找到通知結構,但沒有暫止的報表變更,FltNotifyFilterChangeDirectory 將作業新增至通知結構。 如果找不到這類通知結構,FltNotifyFilterChangeDirectory 會建立作業的通知結構,並將其插入清單中。
當目錄發生變更時,文件系統會呼叫 FsRtlNotifyFilterReportChange 來完成通知清單中的擱置IRP_MN_NOTIFY_CHANGE_DIRECTORY作業。

要求

要求 價值
目標平臺 普遍
標頭 fltkernel.h (包括 Fltkernel.h)
連結庫 FltMgr.lib
DLL Fltmgr.sys
IRQL <= APC_LEVEL

另請參閱

FsRtlNotifyFilterReportChange

IRP_MJ_DIRECTORY_CONTROL

PFLT_PRE_OPERATION_CALLBACK