.NET を使用した NTFS 代替データ ストリームの読み取りと変更
概要
代替データ ストリーム(ADS) は、追加データを許可する NTFS ファイル システムの機能です。プライマリ データ ストリームを超えてファイルに添付される可能性があります。この追加データは、メタデータ、添付ファイル、バージョン情報の保存など、さまざまな目的に役立ちます。
ADS の読み取り
ファイルから ADS を読み取るには、 を使用します。 NET では、kernel32.dll ライブラリの CreateFileW 関数を使用できます。 CreateFileW 関数は、ファイル パスとストリーム名をパラメータとして受け取ります。ストリームが存在する場合、関数はストリームへのハンドルを返します。これを使用してデータを読み取ることができます。
ADS の変更
既存の ADS を変更するか、ADS を作成するには新しいものを作成するには、WriteFile 関数を使用できます。 WriteFile 関数は、ファイル ハンドルとデータのバッファをパラメータとして受け取ります。 CreateFileW を呼び出すときにファイル パスにストリーム名を指定して、特定のストリームを書き込み対象にすることができます。
例
読み取りおよび変更する方法の例を次に示します。 .NET を使用した ADS:
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 中国語 Web サイトの他の関連記事を参照してください。