使用.NET 讀取和修改NTFS 備用資料流
簡介
備用資料🎜>簡介
備用資料流(ADS) 是NTFS檔案系統的一項功能,允許附加資料附加到超出其主要資料流的檔案。新增的資料可用於各種目的,例如儲存元資料、附件或版本控制資訊。
讀取 ADS
使用 . NET,您可以使用kernel32.dll函式庫中的CreateFileW函數。 CreateFileW 函數採用檔案路徑和流名稱作為參數。如果流存在,函數將傳回流的句柄,然後您可以使用該句柄讀取資料。
修改 ADS
修改現有 ADS 或建立新建一個,可以使用WriteFile函數。 WriteFile 函數採用檔案句柄和資料緩衝區作為參數。您可以在呼叫 CreateFileW 時在檔案路徑中指定流名稱,以指定特定流進行寫入。
範例
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; }
以上是如何使用 .NET 讀取和修改 NTFS 備用資料流 (ADS)?的詳細內容。更多資訊請關注PHP中文網其他相關文章!