Изменението на файла дневник USN

файлови системи NTFS и литературата, имат регистър промяна. Той призова USN. След като даден файл е променен, дневника се записва информация за него. Тази информация може да бъде извлечен от списанието. Списанието не е безкрайна, броя на записите в него е ограничен. Ето защо, за конкретен записи на файлове в дневника не могат да бъдат, например, ако той вече е доказал zatorta повече нови рекорди. Ако на местно обем на файловете са много и те постоянно се променя, влизането на списанието няма да живее дълго.

Подкрепяте ли сеч

Така, например, на произволен файл. Целта е да се получи в списанието на промяна USN и издърпайте информация за най-новата продукция с файловите операции. Файлът трябва да бъде разположен на NTFS файлова система или литератури. Тези файлови системи са журнал. Първо в Windows NTFS поддържа само сеч. Но сега двама от тези файлови системи. Изведнъж ще има нова файлова система USN списание за в бъдеще? Следователно, за да се определи дали има някакво списание USN, или не е на местно обем, няма да сравни имената на файловата система, и ще изглежда знамена възможности на файловата система. Каквото и да беше, стари или нови, флагът ще ни покаже дали това подкрепя USN списание файловата система или не. Ето как:

След този разговор, за търсене на името на файла система lpFileSystemNameBuffer, както и знамената на своите възможности в dwFsFlags. По-специално, наличието на журнал се проверява, както следва:

Измислянето версия USN списание

Има две текущи версии на списанието USN - версия 2.0 и версия 3.0. Последният се характеризира с факта, че в нея 128-битови файлове идентификатори. Под тези две списание използват различни структури от данни, с различен размер. По подразбиране, ако не укажете целите, структурата ще се върне към 2.0. Но аз ще ви покажа как да получите данните и новата версия, ако тази версия се поддържа от системата.

Подгответе два параметъра, pReadUSN и uReadUSNSize, за по-нататъшна употреба с FSCTL_READ_FILE_USN_DATA за повикване. Или pReadUSN точки на буфер с тип READ_FILE_USN_DATA, или точки на NULL.

Първи брой USN-запис на файлове Хендли

За да изтеглите данни от досието на USN-дневник, трябва да разполага с документ номер на файла. Тя може да бъде получена чрез FSCTL_READ_FILE_USN_DATA повикване. Номер отстранен от структурата, която има две различни версии, които са с различни размери, е необходимо да се вземат предвид. За да се отчете това, от началото USN_RECORD структури трябва да прочете версия, а след това да обработва данните от него.

4K е с достатъчен размер, за да съхраните USN-информация за даден файл. Дори един Kb ще бъде достатъчно.

Сега uUsnNumber имаме редица USN-запис. Предполагаме, че това е вярно, въпреки че не може да се случи. Това може да е рекорден брой, който вече е в списанието zatorta други записи. Това число може да има скрит запис напълно различен файл. Или пък може да е число рекорд в предишния списание USN, който бе отстранен и пресъздадени. Ето защо, след като получи информация от списание USN, трябва да се провери дали информацията е там наистина се отнася до нашия файл. Това се прави чрез сравняване на идентификаторите на файла. идентификатор на файла, трябва първо да получи (как да направите това е описано тук).

Също така, на следните въпроси ще бъдат да се справят с обема, а не на файла. Ние трябва да се справя с обема (hVolume), на която се намира файла.

Взима USN-вестник

URD - READ_USN_JOURNAL_DATA структура може да бъде вариант 0 или версия 1, но те се различават само по две допълнителни елементи в края на структурата във версия 1. Поради това, от буфера за двете структури са еднакви и се различават само да бъде размера на структурата, която се минава в поканата (urd_size). Тези две допълнителни елементи инициализират като 2 и 3, тоест, DeviceIoControl на повикване след това можем да се върне информация за USN или версия 2.0 или 3.0.

Извършване на повиквания FSCTL_QUERY_USN_JOURNAL, за да получите ID на настоящите обеми USN списания, след което да се направи едно последно предизвикателство с тази опция. В резултат на това в променлива тип URD READ_USN_JOURNAL_DATA писмено получена преди USN-стайни журналните записи, и в резултат на този етап на идентификатора на списание.

Качваме се на записа от USN вестник

Сега, след като формира READ_USN_JOURNAL_DATA структура, можете да направите последния разговор, който ще извлече информация от дневника. Тя го предизвикателство FSCTL_READ_USN_JOURNAL прави.

Като цяло, в резултат на поканата, както на нашата urv2 показалка и буфер urv3 посочва къде се намира или USN_RECORD_V2 структура, независимо дали USN_RECORD_V3. Необходимо е да се чете поле MajorVersion (за всяка индикация) и след това съответно да използва един от двата стрелките за съответната версия информация за USN-запис.

Сравнете идентификатори на USN v2.0

Но все пак е необходимо да се провери дали записът имаме, независимо дали то е свързано с нашия файл, но не на друго. Трябва да се сравни идентификаторите. Този код е различен във версия 2.0 и 3.0, тъй като количеството на различни идентификатори. сравнение Версия 2.0 USN изглежда така:

Вижте. Функция код GetFileId () тук.

Сравнете идентификатори на USN v3.0

Във версия 3.0 на сравнението USN изглежда така:

Вижте. GetFileIdEx функция код () тук.

Стойност рекорд поле на USN вестник

В MSDN USN_RECORD описано структура. Има и вижте описанието на полетата на структурата. Най-интересното е поле Основание и SourceInfo. Те ви позволяват да се знае точно какви действия са довели до създаването на записи в дневника USN. Това е, нека да разберете какво всъщност се променя във файла?

Изглежда, че най-първото предизвикателство FSCTL_READ_FILE_USN_DATA и така се връща USN_RECORD структура, какви други разговори? И тогава, когато този разговор FSCTL_READ_FILE_USN_DATA Така получената структура USN_RECORD Причина поле и SourceInfo винаги 0. Това е дори написан на MSDN. Ето защо, една единствена FSCTL_READ_FILE_USN_DATA разговор няма смисъл. Той казва, че нищо полезно за файла, с изключение на номер USN рекорд. В края на краищата, останалата част от структурата на областта, с изключение на Причина и SourceInfo също могат да бъдат получени чрез по-традиционни методи.

Изменението на файла дневник USN

Информация от списание USN