1
我在枚舉更改日記記錄時遇到問題。枚舉所有可用的更改日記記錄
//my params
READ_USN_JOURNAL_DATA read_journal_data;
read_journal_data.StartUsn = ... //next USN
read_journal_data.ReasonMask = 0xFFFFFFFF;
read_journal_data.ReturnOnlyOnClose = FALSE;
read_journal_data.UsnJournalID = ... //ID of current journal
read_journal_data.BytesToWaitFor = 9000;
read_journal_data.Timeout = 5; //5 seconds
BOOL result = DeviceIoControl(this->volume_handle_, FSCTL_READ_USN_JOURNAL,
&read_journal_data, sizeof(read_journal_data), this->change_journal_data_buffer_,
this->change_journal_data_buffer_, &this->valid_bytes_in_buffer_, NULL);
正如你看到的,Timeout
是非零和BytesToWaitFor
不爲零了。 我瞭解到,當FSCTL_READ_USN_JOURNAL
通話到達更改日誌的末尾時,它必須等待Timeout
秒,然後返回BytesToWaitFor
範圍內的所有可用記錄(0或更多) 。然而,出於某種原因,我正在觀察完全不同的行爲:DeviceIoControl
與FSCTL_READ_USN_JOURNAL
和其他列出的參數可能需要幾分鐘 - 直到文件系統中發生了一些NEW更改。 爲什麼READ_USN_JOURNAL_DATA.Timeout
不限制FSCTL_READ_USN_JOURNAL
請求的持續時間?
謝謝...我根本沒有理解這些參數的目的。其他信息可以在這裏找到(http://www.microsoft.com/msj/0999/journal/journal.aspx)(超時和BytesToWaitFor) – akekir 2013-04-07 16:18:36
是的,這是對NTFS日誌的很好介紹。無論如何,關於NTFS日誌的信息非常全面:http://msdn.microsoft.com/en-us/library/aa363798.aspx – 2013-04-07 16:54:14