2013-04-07 4 views
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. Однако по какой-то причине я наблюдаю совершенно другое поведение: DeviceIoControl с FSCTL_READ_USN_JOURNAL и другие перечисленные параметры могут занимать несколько минут - до тех пор, пока в файловой системе не произойдут какие-либо НОВЫЕ изменения. Почему READ_USN_JOURNAL_DATA.Timeout не ограничивает продолжительность FSCTL_READ_USN_JOURNAL?

ответ

2

Он ведет себя точно так, как это предполагают, чтобы вести себя, чтобы быть конкретным:

В любом случае, после тайм-аута любые новые данные добавляются в журнал изменений обрабатывается. Если по-прежнему нет записей для возврата из указанного набора, период тайм-аута повторяется. В этом режиме FSCTL_READ_USN_JOURNAL остается невыполненным, пока не будет возвращена хотя бы одна запись или I/O будет отменен.

См MSDN, section Timeout

+0

Спасибо ... Я просто не понял назначение этих параметров. Дополнительную информацию можно найти здесь (http://www.microsoft.com/msj/0999/journal/journal.aspx) (Timeout и BytesToWaitFor) – akekir

+0

Да, это хорошее введение в журналы NTFS. В любом случае, достаточно полный источник информации о журналах NTFS находится здесь: http://msdn.microsoft.com/en-us/library/aa363798.aspx –

Смежные вопросы