.NET을 사용하여 NTFS 대체 데이터 스트림 읽기 및 수정
NTFS 대체 데이터 스트림(ADS)은 일반 파일과 연결된 숨겨진 데이터 스트림입니다. 신기술 파일 시스템(NTFS). 이러한 스트림은 기본 파일 데이터에 영향을 주지 않고 사용자 댓글, 버전 기록, 멀티미디어 콘텐츠 등의 추가 정보를 저장하는 데 사용할 수 있습니다.
ADS 읽기
ADS를 읽으려면 dwDesiredAccess 매개변수를 GENERIC_WRITE로 설정하여 CreateFileW 함수를 사용할 수 있습니다. 그러면 읽기와 쓰기 모두를 위한 스트림이 열립니다. 그런 다음 ReadFile 함수를 사용하여 스트림의 내용을 읽을 수 있습니다.
ADS 수정
ADS를 수정하려면 dwDesiredAccess 매개변수가 다음으로 설정된 CreateFileW 함수를 사용할 수 있습니다. 일반_쓰기. 그러면 읽기와 쓰기 모두를 위한 스트림이 열립니다. 그런 다음 WriteFile 함수를 사용하여 스트림에 새 콘텐츠를 쓸 수 있습니다.
다음은 ADS를 읽고 수정하는 방법에 대한 C# 예입니다.
using System.Runtime.InteropServices; class Program { static void Main(string[] args) { // Open the main file stream var mainStream = NativeMethods.CreateFileW( "testfile", NativeConstants.GENERIC_WRITE, NativeConstants.FILE_SHARE_WRITE, IntPtr.Zero, NativeConstants.OPEN_ALWAYS, 0, IntPtr.Zero); // Open the ADS stream var stream = NativeMethods.CreateFileW( "testfile:stream", NativeConstants.GENERIC_WRITE, NativeConstants.FILE_SHARE_WRITE, IntPtr.Zero, NativeConstants.OPEN_ALWAYS, 0, IntPtr.Zero); // Write data to the ADS stream var data = "Hello world!"; NativeMethods.WriteFile(stream, data, data.Length, out var bytesWritten, IntPtr.Zero); // Close the ADS stream NativeMethods.CloseHandle(stream); // Close the main file stream NativeMethods.CloseHandle(mainStream); } } 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 ); /// Return Type: BOOL->int ///hFile: HANDLE->void* ///lpBuffer: LPVOID->void* ///nNumberOfBytesToWrite: DWORD->unsigned int ///lpNumberOfBytesWritten: LPDWORD->DWORD* ///lpOverlapped: LPOVERLAPPED->_OVERLAPPED* [DllImportAttribute("kernel32.dll", EntryPoint = "WriteFile")] public static extern int WriteFile( System.IntPtr hFile, [InAttribute()] System.IntPtr lpBuffer, uint nNumberOfBytesToWrite, out uint lpNumberOfBytesWritten, [InAttribute()] System.IntPtr lpOverlapped ); /// Return Type: BOOL->int ///hObject: HANDLE->void* [DllImportAttribute("kernel32.dll", EntryPoint = "CloseHandle")] public static extern int CloseHandle( [InAttribute()] System.IntPtr hObject ); } 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 대체 데이터 스트림을 읽고 수정하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!