ホームページ > バックエンド開発 > C++ > .NET で NTFS 代替データ ストリームの読み取り、書き込み、削除を行うにはどうすればよいですか?

.NET で NTFS 代替データ ストリームの読み取り、書き込み、削除を行うにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-04 18:37:39
オリジナル
352 人が閲覧しました

How Can I Read, Write, and Delete NTFS Alternate Data Streams in .NET?

.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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート