Lesen und Ändern von alternativen NTFS-Datenströmen mit .NET
Einführung
Alternative Datenströme (ADS) sind eine Funktion des NTFS-Dateisystems, die das Anhängen zusätzlicher Daten an Dateien über ihren primären Datenstrom hinaus ermöglicht. Diese hinzugefügten Daten können für verschiedene Zwecke nützlich sein, beispielsweise zum Speichern von Metadaten, Anhängen oder Versionsinformationen.
ADS lesen
Zum Lesen eines ADS aus einer Datei mit . NET können Sie die Funktion „CreateFileW“ in der Bibliothek „kernel32.dll“ verwenden. Die Funktion „CreateFileW“ verwendet einen Dateipfad und einen Stream-Namen als Parameter. Wenn der Stream vorhanden ist, gibt die Funktion ein Handle an den Stream zurück, das Sie dann zum Lesen von Daten verwenden können.
ADS ändern
Um ein vorhandenes ADS zu ändern oder zu erstellen Um ein neues zu erstellen, können Sie die WriteFile-Funktion verwenden. Die WriteFile-Funktion benötigt ein Dateihandle und einen Datenpuffer als Parameter. Sie können den Stream-Namen im Dateipfad angeben, wenn Sie CreateFileW aufrufen, um einen bestimmten Stream zum Schreiben auszuwählen.
Beispiel
Hier ist ein Beispiel für das Lesen und Ändern ein ADS mit .NET:
using System.Runtime.InteropServices; class Program { static void Main(string[] args) { var mainStream = NativeMethods.CreateFileW( "testfile", NativeConstants.GENERIC_WRITE, NativeConstants.FILE_SHARE_WRITE, IntPtr.Zero, NativeConstants.OPEN_ALWAYS, 0, IntPtr.Zero); var stream = NativeMethods.CreateFileW( "testfile:stream", NativeConstants.GENERIC_WRITE, NativeConstants.FILE_SHARE_WRITE, IntPtr.Zero, NativeConstants.OPEN_ALWAYS, 0, IntPtr.Zero); } } public partial class NativeMethods { /// Return Type: HANDLE->void* ///lpFileName: LPCWSTR->WCHAR* ///dwDesiredAccess: DWORD->unsigned int ///dwShareMode: DWORD->unsigned int ///lpSecurityAttributes: LPSECURITY_ATTRIBUTES->_SECURITY_ATTRIBUTES* ///dwCreationDisposition: DWORD->unsigned int ///dwFlagsAndAttributes: DWORD->unsigned int ///hTemplateFile: HANDLE->void* [DllImportAttribute("kernel32.dll", EntryPoint = "CreateFileW")] public static extern System.IntPtr CreateFileW( [InAttribute()] [MarshalAsAttribute(UnmanagedType.LPWStr)] string lpFileName, uint dwDesiredAccess, uint dwShareMode, [InAttribute()] System.IntPtr lpSecurityAttributes, uint dwCreationDisposition, uint dwFlagsAndAttributes, [InAttribute()] System.IntPtr hTemplateFile ); } public partial class NativeConstants { /// GENERIC_WRITE -> (0x40000000L) public const int GENERIC_WRITE = 1073741824; /// FILE_SHARE_DELETE -> 0x00000004 public const int FILE_SHARE_DELETE = 4; /// FILE_SHARE_WRITE -> 0x00000002 public const int FILE_SHARE_WRITE = 2; /// FILE_SHARE_READ -> 0x00000001 public const int FILE_SHARE_READ = 1; /// OPEN_ALWAYS -> 4 public const int OPEN_ALWAYS = 4; }
Das obige ist der detaillierte Inhalt vonWie lese und ändere ich NTFS Alternate Data Streams (ADS) mit .NET?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!