FsRtlNotifyFullChangeDirectory 函式 (ntifs.h)
FsRtlNotifyFullChangeDirectory 例程會建立通知要求的通知結構,並將它新增至指定的通知清單。
語法
void FsRtlNotifyFullChangeDirectory(
[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] NotifySync
目前磁碟區之通知清單的不透明同步處理物件的指標。
[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,這表示刪除此檔案物件所代表的檔案數據流。
[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結構的指標。 FsRtlNotifyFullChangeDirectory 會釋放內容,並在使用它之後釋放結構。 如果 NotifyIrp 為 NULL,則會忽略。 如果提供 TraverseCallback 例程, SubjectContext 會當做 SubjectContext 參數傳遞至該例程。
傳回值
無
備註
FsRtlNotifyFullChangeDirectory 是由已收到通知變更要求的文件系統呼叫。 此要求會以 IRP 的形式接收,其中包含主要函式程式代碼IRP_MJ_DIRECTORY_CONTROL、次要函式程式代碼IRP_MN_NOTIFY_CHANGE_DIRECTORY。
如果 NotifyIrp 為 NULL,FsRtlNotifyFullChangeDirectory 會檢查通知清單是否包含參考此檔案對象的擱置 IRP,如果是的話,請使用STATUS_DELETE_PENDING完成它。
如果 NotifyIrp 不是 NULL,FsRtlNotifyFullChangeDirectory 會執行下列動作:
檢查檔案物件是否已進行清除。 若是如此, FsRtlNotifyFullChangeDirectory 會以狀態STATUS_NOTIFY_CLEANUP完成通知 IRP。
如果檔案物件尚未進行清除, FsRtlNotifyFullChangeDirectory 會檢查此磁碟區的通知清單是否已經包含這項變更的通知結構。 如果是, FsRtlNotifyFullChangeDirectory 會完成任何擱置的 IRP。 如果沒有, FsRtlNotifyFullChangeDirectory 會將通知 IRP 標示為擱置中、建立通知結構,然後將它插入清單中。
規格需求
需求 | 值 |
---|---|
目標平台 | Universal |
標頭 | ntifs.h (包含 Ntifs.h) |
程式庫 | NtosKrnl.lib |
Dll | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
DDI 合規性規則 | HwStorPortProhibitedDDIs (storport) 、 PowerIrpDDis (wdm) |
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應