Maison > développement back-end > C++ > Comment lire et modifier des flux de données alternatifs (ADS) NTFS à l'aide de .NET ?

Comment lire et modifier des flux de données alternatifs (ADS) NTFS à l'aide de .NET ?

Susan Sarandon
Libérer: 2025-01-01 07:36:11
original
861 Les gens l'ont consulté

How to Read and Modify NTFS Alternate Data Streams (ADS) using .NET?

Lecture et modification de flux de données alternatifs NTFS avec .NET

Introduction

Flux de données alternatifs (ADS) sont une fonctionnalité du système de fichiers NTFS qui permet de joindre des données supplémentaires aux fichiers au-delà de leur flux de données principal. Ces données ajoutées peuvent être utiles à diverses fins, telles que le stockage de métadonnées, de pièces jointes ou d'informations de version.

Lecture d'ADS

Pour lire un ADS à partir d'un fichier à l'aide de . NET, vous pouvez utiliser la fonction CreateFileW dans la bibliothèque kernel32.dll. La fonction CreateFileW prend un chemin de fichier et un nom de flux comme paramètres. Si le flux existe, la fonction renvoie un handle vers le flux, que vous pouvez ensuite utiliser pour lire les données.

Modification de l'ADS

Pour modifier un ADS existant ou créer un nouveau, vous pouvez utiliser la fonction WriteFile. La fonction WriteFile prend un descripteur de fichier et un tampon de données comme paramètres. Vous pouvez spécifier le nom du flux dans le chemin du fichier lorsque vous appelez CreateFileW pour cibler un flux spécifique pour l'écriture.

Exemple

Voici un exemple de lecture et de modification une ADS utilisant .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;
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal