Heim >Backend-Entwicklung >C++ >Wie kann ich alternative NTFS-Datenströme in .NET lesen, schreiben und löschen?
Zugriff auf alternative NTFS-Datenströme in .NET
Die Manipulation alternativer NTFS-Datenströme (ADS) ist für verschiedene Szenarien, einschließlich Sicherheit und Daten, von entscheidender Bedeutung verstecken. .NET bietet Funktionen zum Lesen und Ändern dieser Streams.
ADS lesen
Um einen an eine Datei angehängten Datenstream zu lesen, verwenden Sie die Funktion CreateFileW:
using System.Runtime.InteropServices; 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 ); }
Rufen Sie CreateFileW mit dem Dateinamen auf, gefolgt vom Stream-Namen, getrennt durch einen Doppelpunkt (:). Zum Beispiel:
var stream = NativeMethods.CreateFileW("testfile:stream", ...);
Ändern von ADS
Um in einen Stream zu schreiben oder ihn zu ändern, verwenden Sie einfach das zurückgegebene Dateihandle, um E/A-Vorgänge auszuführen. Um beispielsweise in den Stream zu schreiben:
using System.Runtime.InteropServices; class Program { static void Main(string[] args) { var stream = NativeMethods.CreateFileW("testfile:stream", ...); NativeMethods.WriteFile(stream, ...); } } public partial class NativeMethods { /// Return Type: BOOL->int ///hFile: HANDLE->void* ///lpBuffer: LPCVOID->void* ///nNumberOfBytesToWrite: DWORD->unsigned int ///lpNumberOfBytesWritten: LPDWORD->DWORD* ///lpOverlapped: LPOVERLAPPED->OVERLAPPED* [DllImportAttribute("kernel32.dll", EntryPoint = "WriteFile")] [return: MarshalAsAttribute(UnmanagedType.Bool)] public static extern bool WriteFile( [InAttribute()] System.IntPtr hFile, [InAttribute()] System.IntPtr lpBuffer, uint nNumberOfBytesToWrite, [OutAttribute()] [MarshalAsAttribute(UnmanagedType.U4)] out uint lpNumberOfBytesWritten, [InAttribute()] System.IntPtr lpOverlapped ); }
Ebenso können Sie einen Stream löschen mit:
using System.Runtime.InteropServices; class Program { static void Main(string[] args) { var stream = NativeMethods.CreateFileW("testfile:stream", ...); NativeMethods.DeleteFile(stream); } } public partial class NativeMethods { /// Return Type: BOOL->int ///lpFileName: LPCWSTR->WCHAR* [DllImportAttribute("kernel32.dll", EntryPoint = "DeleteFileW")] [return: MarshalAsAttribute(UnmanagedType.Bool)] public static extern bool DeleteFileW([InAttribute()] [MarshalAsAttribute(UnmanagedType.LPWStr)] string lpFileName); }
Das obige ist der detaillierte Inhalt vonWie kann ich alternative NTFS-Datenströme in .NET lesen, schreiben und löschen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!