我在枚举更改日志记录时遇到问题。
//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
. 但是,由于某种原因,我正在观察完全不同的行为:DeviceIoControl
withFSCTL_READ_USN_JOURNAL
和其他列出的参数可能需要几分钟 - 直到文件系统中发生了一些新的更改。为什么READ_USN_JOURNAL_DATA.Timeout
不限制FSCTL_READ_USN_JOURNAL
请求的持续时间?