FsRtlNotifyFilterChangeDirectory 函式 (ntifs.h)
FsRtlNotifyFilterChangeDirectory 會為IRP_MN_NOTIFY_CHANGE_DIRECTORY要求建立通知結構,並將它新增至指定的通知清單。
語法
void FsRtlNotifyFilterChangeDirectory(
[in] PNOTIFY_SYNC NotifySync,
[in] PLIST_ENTRY NotifyList,
[in] PVOID FsContext,
[in] PSTRING FullDirectoryName,
[in] BOOLEAN WatchTree,
[in] BOOLEAN IgnoreBuffer,
[in] ULONG CompletionFilter,
[in, optional] PIRP NotifyIrp,
[in, optional] PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback,
[in, optional] PSECURITY_SUBJECT_CONTEXT SubjectContext,
[in, optional] PFILTER_REPORT_CHANGE FilterCallback
);
參數
[in] NotifySync
針對 NotifyList 參數所指向之變更目錄通知清單的不透明同步處理物件指標。
[in] NotifyList
目前磁碟區變更目錄通知清單前端的指標。 清單中的每個元素都是不透明的通知結構。
[in] FsContext
文件系統指派的唯一值指標,以識別要建立為屬於特定檔案物件的通知結構。 如果提供 TraverseCallback 例程, FsContext 會當做 NotifyContext 參數傳遞至該例程。
[in] FullDirectoryName
ANSI 或 Unicode 字串的指標,其中包含與此通知結構相關聯之目錄的完整名稱。 如果 NotifyIrp 為 NULL,則會忽略。
[in] WatchTree
如果也應該監看此目錄的所有子目錄,請將 設定為 TRUE。 如果只有目錄本身要監看,則設定為 FALSE。 如果 NotifyIrp 為 NULL,則會忽略。
[in] IgnoreBuffer
設定為TRUE 可忽略任何用戶緩衝區,並強制繼續目錄。 此動作會加速作業。 如果 NotifyIrp 為 NULL,則會忽略。
[in] CompletionFilter
旗標的位掩碼,指定應該使通知清單中 IRP 完成之檔案或目錄的變更類型。 下表描述可能的旗標值。
旗標 | 意義 |
---|---|
FILE_NOTIFY_CHANGE_FILE_NAME (0x0001) | 檔案已在此目錄中新增、刪除或重新命名。 |
FILE_NOTIFY_CHANGE_DIR_NAME (0x0002) | 已建立、移除或重新命名子目錄。 |
FILE_NOTIFY_CHANGE_NAME (0x0003) | 此目錄的名稱已變更。 |
FILE_NOTIFY_CHANGE_ATTRIBUTES (0x0004) | 此檔案的屬性值,例如上次存取時間已變更。 |
FILE_NOTIFY_CHANGE_SIZE (0x0008) | 此檔案的大小已變更。 |
FILE_NOTIFY_CHANGE_LAST_WRITE (0x0010) | 此檔案的上次修改時間已變更。 |
FILE_NOTIFY_CHANGE_LAST_ACCESS (0x0020) | 此檔案的上次存取時間已變更。 |
FILE_NOTIFY_CHANGE_CREATION (0x0040) | 此檔案的建立時間已變更。 |
FILE_NOTIFY_CHANGE_EA (0x0080) | 此檔案的擴充屬性已經過修改。 |
FILE_NOTIFY_CHANGE_SECURITY (0x0100) | 此檔案的安全性資訊已變更。 |
FILE_NOTIFY_CHANGE_STREAM_NAME (0x0200) | 檔案數據流已在此目錄中新增、刪除或重新命名。 |
FILE_NOTIFY_CHANGE_STREAM_SIZE (0x0400) | 此檔案數據流的大小已變更。 |
FILE_NOTIFY_CHANGE_STREAM_WRITE (0x0800) | 此檔案數據流的數據已變更。 |
如果 NotifyIrp 為 NULL,則會忽略 CompletionFilter。
[in, optional] NotifyIrp
要新增至通知清單之 IRP 的指標。 如果 NotifyIrp 為 NULL,這表示檔案物件所代表的檔案數據流 (由 FsContext 參數識別) 遭到刪除。
[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 參數。 如果 NotifyIrp 為 NULL,則會忽略 TraverseCallback。
[in, optional] SubjectContext
要傳遞至 TraverseCallback 之SECURITY_SUBJECT_CONTEXT結構的指標。 FsRtlNotifyFilterChangeDirectory 會釋放內容,並在使用它之後釋放結構。 如果 NotifyIrp 為 NULL,則會忽略此參數。 如果提供 TraverseCallback 例程, SubjectContext 會當做 SubjectContext 參數傳遞至該例程。
[in, optional] FilterCallback
在目錄發生變更時,要叫用回呼例程的選擇性指標。 如果此回呼例程傳回 TRUE,FsRtlNotifyFilterReportChange 會完成通知清單中的擱置IRP_MN_NOTIFY_CHANGE_DIRECTORY要求;否則,它不會。 這類呼叫端提供的例程宣告如下:
BOOLEAN
(*PFILTER_REPORT_CHANGE) (
IN PVOID NotifyContext, // FsContext
IN PVOID FilterContext // Context pointer
);
傳回值
無
備註
FsRtlNotifyFilterChangeDirectory 是由文件系統呼叫,其已收到具有主要函式程式代碼的 IRP IRP_MJ_DIRECTORY_CONTROL、次要函式程式代碼IRP_MN_NOTIFY_CHANGE_DIRECTORY。
文件系統會呼叫 FsRtlNotifyFilterChangeDirectory 來建立通知結構來保存 IRP,並將通知結構新增至目前磁碟區的通知清單。
如果 NotifyIrp 為 NULL,FsRtlNotifyFilterChangeDirectory 會檢查通知清單是否已經包含任何符合指定 FsContext 值之檔案對象的擱置 IRP,如果是的話,請完成具有STATUS_DELETE_PENDING的 IRP。
如果 NotifyIrp 不是 NULL,FsRtlNotifyFilterChangeDirectory 會執行下列動作:
檢查 IRP 的檔案物件是否已進行清除。 若是如此, FsRtlNotifyFilterChangeDirectory 會以狀態STATUS_NOTIFY_CLEANUP完成 IRP,且不會將其新增至通知清單。
如果 IRP 的檔案物件尚未進行清除, FsRtlNotifyFilterChangeDirectory 會檢查通知清單是否已經包含指定 FsContext 值的通知結構。 如果找到這類通知結構,而且有待處理的報表變更, FsRtlNotifyFilterChangeDirectory 就會完成 NotifyIrp。 如果找到通知結構,但沒有要報告的擱置變更, FsRtlNotifyFilterChangeDirectory 會將 NotifyIrp 指向的 IRP 標示為擱置中,並將它插入通知結構中的通知 IRP 清單中。 如果找不到這類通知結構, FsRtlNotifyFilterChangeDirectory 會將 NotifyIrp 指向的 IRP 標示為擱置中、建立通知結構,然後將它插入通知清單中。
當目錄發生變更時,文件系統會呼叫 FsRtlNotifyFilterReportChange 來完成通知清單中的擱置IRP_MN_NOTIFY_CHANGE_DIRECTORY要求。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 2000 SP4 更新匯總;Windowsxp |
目標平台 | Universal |
標頭 | ntifs.h (包含 Ntifs.h) |
程式庫 | NtosKrnl.lib |
Dll | NtosKrnl.exe |
IRQL | < APC_LEVEL |
DDI 合規性規則 | HwStorPortProhibitedDDIs (storport) 、 PowerIrpDDis (wdm) |
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應