変更ジャーナル レコードの列挙に問題があります。
//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
数秒待機してから、範囲内のすべての (0 個以上の) 使用可能なレコードを返す必要があることを理解しましたBytesToWaitFor
。ただし、何らかの理由で、完全に異なる動作を監視しています。DeviceIoControl
withFSCTL_READ_USN_JOURNAL
およびその他のリストされたパラメーターには、ファイル システムで新しい変更が発生するまで数分かかる場合があります。リクエストREAD_USN_JOURNAL_DATA.Timeout
の期間を制限しないのはなぜですか?FSCTL_READ_USN_JOURNAL