共用方式為


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 參數的詳細資訊,請參閱 FsRtlNotifyFullReportChangeTargetContext 參數。 如果 notifyIrp 為 NULL,則會忽略 TraverseCallback

[in, optional] SubjectContext

要傳遞至 TraverseCallbackSECURITY_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 標示為擱置中、建立通知結構,並將其插入清單中。

要求

要求 價值
目標平臺 普遍
標頭 ntifs.h (include Ntifs.h)
連結庫 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI 合規性規則 HwStorPortProhibitedDIs(storport)PowerIrpDDis(wdm)

另請參閱

FsRtlNotifyFullReportChange

IRP_MJ_DIRECTORY_CONTROL

SECURITY_SUBJECT_CONTEXT