FSCTL_DELETE_USN_JOURNAL IOCTL (winioctl.h)
刪除磁碟區上的更新序號 (USN) 變更日誌,或等候變更日誌刪除的通知。
C++ |
---|
BOOL WINAPI DeviceIoControl( (HANDLE) hDevice, // handle to volume FSCTL_DELETE_USN_JOURNAL, // dwIoControlCode(LPVOID) lpInBuffer, // input buffer (DWORD) nInBufferSize, // size of input buffer NULL, // lpOutBuffer0, // nOutBufferSize(LPDWORD) lpBytesReturned, // number of bytes returned (LPOVERLAPPED) lpOverlapped ); // OVERLAPPED structure |
言論
如需此作業上重疊 I/O 的影響,請參閱 DeviceIoControl 主題的一節。
您可以使用 FSCTL_DELETE_USN_JOURNAL 來刪除變更紀錄。 除非在 DeleteFlagsDELETE_USN_JOURNAL_DATA成員中設定 USN_DELETE_FLAG_NOTIFY 旗標,否則 NTFS 文件系統會啟動刪除作業,並立即傳回呼叫進程。
如果同時設定 USN_DELETE_FLAG_NOTIFY 和 USN_DELETE_FLAG_DELETE 旗標,則呼叫 FSCTL_DELETE_USN_JOURNAL 會開始刪除程式。 然後呼叫會封鎖呼叫線程並等候刪除(在同步或非重疊的呼叫上),或使用I/O完成埠或其他機制來設定事件通知,並傳回 (在異步或重疊的呼叫上)。
您也可以使用 FSCTL_DELETE_USN_JOURNAL 來接收變更紀錄刪除已完成的通知,方法是只設定 USN_DELETE_FLAG_NOTIFY。 如果您這樣做,FSCTL_DELETE_USN_JOURNAL 作業會等到刪除完成再傳回之前(在同步或非重疊的呼叫上),或使用 I/O 完成埠或其他機制來設定事件通知(在異步或重疊的呼叫上)。
應用程式接收通知的刪除作業可能已由目前進程或其他進程起始。 例如,當應用程式啟動時,它可以使用 FSCTL_DELETE_USN_JOURNAL 來判斷某個其他進程啟動的刪除是否正在進行中,如果是,則結束。
完整刪除變更日誌需要掃描變更日誌所在的磁碟區,這可能需要很長的時間才能在具有許多檔案的磁碟區上。 即使系統重新啟動,作業仍會繼續完成。 試著在刪除進行時建立、修改、刪除或查詢變更紀錄失敗,並傳回錯誤碼 ERROR_JOURNAL_DELETE_IN_PROGRESS。
FSCTL_DELETE_USN_JOURNAL 作業具有顯著的效能成本,因此應該謹慎使用。 當目前的 USN 值接近最大可能 USN 值的紀錄時,系統管理員應該刪除日誌。
如需詳細資訊,請參閱 建立、修改和刪除變更日誌。
若要擷取磁碟區的句柄,請使用 下列格式的 lpFileName 參數呼叫 createFile:
\\.\X:
在上述字串中,X 是識別磁碟區出現磁碟驅動器的字母。 磁碟區必須是NTFS。
在 Windows 8 和 Windows Server 2012 中,下列技術支援此程序代碼。
科技 | 支援 |
---|---|
伺服器消息塊 (SMB) 3.0 通訊協定 | 不 |
SMB 3.0 透明故障轉移 (TFO) | 不 |
具有向外延展檔案共用的SMB 3.0(SO) | 不 |
叢集共用磁碟區檔案系統 (CsvFS) | 是的 |
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | Windows XP [僅限傳統型應用程式] |
支援的最低伺服器 | Windows Server 2003 [僅限傳統型應用程式] |
標頭 | winioctl.h (包括 Windows.h) |