ホームページ > バックエンド開発 > C++ > .NET を使用して NTFS 代替データ ストリーム (ADS) を読み取り、変更するにはどうすればよいですか?

.NET を使用して NTFS 代替データ ストリーム (ADS) を読み取り、変更するにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-01 07:36:11
オリジナル
861 人が閲覧しました

How to Read and Modify NTFS Alternate Data Streams (ADS) using .NET?

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

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