Udostępnij przez


Korzystanie z identyfikatora dziennika zmian

System plików NTFS kojarzy niepodpisany 64-bitowy identyfikator z każdym dziennikiem zmian. Dziennik jest oznaczany tym identyfikatorem podczas jego tworzenia. System plików oznacza dziennik nowym identyfikatorem w przypadku, gdy istniejące rekordy numeru sekwencji aktualizacji (USN) są lub mogą być bezużyteczne.

Na przykład system plików NTFS nadaje ponownie dziennikowi zmian nowy identyfikator, gdy wolumin przenoszony jest z jednej wersji NTFS do innej, a potem z powrotem. Taki ruch może wystąpić w środowisku z podwójnym rozruchem lub podczas pracy z nośnikiem wymiennym.

Aby uzyskać identyfikator bieżącego dziennika zmian na określonym woluminie, użyj FSCTL_QUERY_USN_JOURNAL kodu sterującego. Aby wykonać te i wszystkie inne operacje dziennika zmian, musisz mieć uprawnienia administratora systemu. Oznacza to, że musisz być członkiem grupy Administratorzy.

Gdy administrator usunie i ponownie utworzy dziennik zmian, na przykład gdy bieżąca wartość USN zbliża się do maksymalnej możliwej wartości USN, wartości USN zaczynają się ponownie od zera. Gdy system plików NTFS oznacza dziennik nowym identyfikatorem zamiast ponownego utworzenia dziennika, nie resetuje USN do zera, ale kontynuuje od bieżącego USN. W obu przypadkach wszystkie obecne USNy są mniejsze niż przyszłe USNy.

Jeśli potrzebujesz informacji na temat określonego zestawu rekordów, użyj FSCTL_QUERY_USN_JOURNAL kodu sterującego, aby uzyskać identyfikator dziennika zmian. Następnie użyj FSCTL_READ_USN_JOURNAL kodu sterującego, aby odczytać interesujące rekordy dziennika. System plików NTFS zwraca tylko rekordy, które są prawidłowe dla dziennika określonego przez identyfikator.

Aplikacja potrzebuje zarówno numerów USN rekordów, jak i identyfikatora do odczytania dziennika. To wymaganie zapewnia sprawdzanie integralności w przypadkach, w których aplikacja powinna ignorować istniejące rekordy w pliku i gdzie rekordy zostały zapisane w poprzednich wystąpieniach dziennika dla tego samego woluminu.

Aby uzyskać rekordy, które cię interesują, musisz zacząć od najstarszego rekordu (czyli z najniższym identyfikatorem USN) i skanować do momentu zlokalizowania pierwszego poszukiwanego rekordu.