Frage

Ich habe einen doppelten Finder in Java geschrieben, aber ich muss harte Link -Unterstützung dafür einfügen. Leider scheint es keine Möglichkeit zu geben, den MFT -Eintrag einer Datei in Java herauszugraben.

Obwohl es in der BasicFileTtributeView -Klasse eine Methode namens FileKey () gibt, funktioniert sie nicht im NTFS -Dateisystem (ich habe sie noch nicht auf ext getestet).

Ich fand auch die Methode IssameFile () (in java.nio.file.path). Weiß jemand, wie diese Methode funktioniert? Es scheint das Richtige zu tun, aber es gibt einen booleschen Wert zurück, also ist es für mich wertlos (ich möchte die Ergebnisse in eine Karte stecken und sie nach ihren MFT -Einträgen gruppieren).

Ich kann immer die Erstellungszeiten, Änderungszeiten usw. für jede Datei vergleichen, aber dies gibt nur auf.

Gibt es eine Möglichkeit, das zu erreichen, was ich in C ++ oder Java zu tun versuche? Ich kümmere mich mehr darum, dass es auf NTFs funktioniert als ext.

War es hilfreich?

Lösung

Sie müssten das verwenden FILE_ID_FULL_DIRECTORY_INFORMATION Struktur zusammen mit dem NtQueryDirectoryFile Funktion (oder die FILE_INTERNAL_INFORMATION Struktur zusammen mit dem NtQueryInformationFile, wenn Sie bereits einen Griff haben) im Inneren ntdll.dll (verfügbar seit Windows XP, falls früher), um die 8-Byte-Datei-IDs zu erhalten und zu überprüfen, ob sie gleich sind.

Dies wird Ihnen sagen, ob sie gleich sind Datei, aber nicht, wenn sie gleich sind Strom der gleichen Datei.

Ich bin mir nicht sicher, wie ich erkennen soll, ob zwei Dateien der gleiche Stream aus dem Benutzermodus sind-es gibt eine Struktur benannt FILE_STREAM_INFORMATION Dies kann alle mit einer Datei verknüpften Streams zurückgeben, aber es sagt Ihnen nicht aus die Stream, den Sie derzeit eröffnet haben.

Andere Tipps

Das Erkennen von harten Links wird normalerweise durch Anrufe erreicht FindFirstFileNameW. Aber es gibt einen niedrigeren Weg.

Versuchen Sie die FSCTL_GET_OBJECT_ID IOCTL -Code.

Es gibt eine eindeutige (bis die Datei gelöscht wird) Identifikator in der BY_HANDLE_FILE_INFORMATION Struktur auch.

Wenn der Band über ein aktiviertes USN Change Journal verfügt, können Sie die ausstellen FSCTL_READ_FILE_USN_DATA IOCTL -Code. Überprüf den FileReferenceNumber Mitglied in der USN_RECORD Struktur

In Java können Sie verwenden sun.nio.ch.FileKey Dies ist ein nicht transparentes Gehäuse für NTFS-Inode. Alle harten Links teilen den gleichen Inode.

Wenn Sie daher harte Links sammeln müssen, können Sie daher erstellen FileKey von jedem Verdächtigen und vergleichen Sie sie (z. Multimap)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top