.NET での NTFS 代替データ ストリーム アクセス
NTFS 代替データ ストリーム (ADS) の操作は、セキュリティやデータなどのさまざまなシナリオに不可欠です隠蔽。 .NET は、これらのストリームの読み取りと変更の両方を行う機能を提供します。
ADS の読み取り
ファイルに添付されたデータ ストリームを読み取るには、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 ); }
ファイル名の後にストリーム名をコロン (:) で区切って指定して、CreateFileW を呼び出します。例:
var stream = NativeMethods.CreateFileW("testfile:stream", ...);
ADS の変更
ストリームに書き込むかストリームを変更するには、返されたファイル ハンドルを使用して I/O 操作を実行するだけです。たとえば、ストリームに書き込むには:
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 ); }
同様に、次を使用してストリームを削除できます:
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); }
以上が.NET で NTFS 代替データ ストリームの読み取り、書き込み、削除を行うにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。