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
Barbara StreisandOriginal
2025-01-04 18:37:39352Durchsuche

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

}

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!

Stellungnahme:
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