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

4

1 に答える 1