Heim > Backend-Entwicklung > C++ > Wie kann ich alternative NTFS-Datenströme in .NET lesen, schreiben und löschen?

Wie kann ich alternative NTFS-Datenströme in .NET lesen, schreiben und löschen?

Barbara Streisand
Freigeben: 2025-01-04 18:37:39
Original
397 Leute haben es durchsucht

How Can I Read, Write, and Delete NTFS Alternate Data Streams in .NET?

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
    );

}
Nach dem Login kopieren

Rufen Sie CreateFileW mit dem Dateinamen auf, gefolgt vom Stream-Namen, getrennt durch einen Doppelpunkt (:). Zum Beispiel:

var stream = NativeMethods.CreateFileW("testfile:stream", ...);
Nach dem Login kopieren

Ä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
    );

}
Nach dem Login kopieren

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);
}
Nach dem Login kopieren

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage