>백엔드 개발 >C++ >.NET에서 NTFS 대체 데이터 스트림을 어떻게 읽고, 쓰고, 삭제할 수 있습니까?

.NET에서 NTFS 대체 데이터 스트림을 어떻게 읽고, 쓰고, 삭제할 수 있습니까?

Barbara Streisand
Barbara Streisand원래의
2025-01-04 18:37:39352검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.