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; }
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!