Мне нужно открыть том с помощью CreateFile из PInvoke:
[DllImport("kernel32.dll", SetLastError = true)]
static extern SafeFileHandle CreateFile(string lpFileName, uint dwDesiredAccess, FileShare dwShareMode, IntPtr securityAttrs, FileMode dwCreationDisposition, FileOptions dwFlagsAndAttributes, IntPtr hTemplateFile);
Но когда я его использую:
var fileName = @"C:\Users\myuser\Desktop\file.txt"
var root = Path.GetPathRoot(fileName);
var volumePath = @"\\.\" + root.Substring(0, root.Length - 1);
var volume = CreateFile(volumePath, GENERIC_READ, FileShare.Read, IntPtr.Zero, FileMode.Open, FileOptions.None, IntPtr.Zero);
if (volume.IsInvalid)
throw new Win32Exception(Marshal.GetLastWin32Error());
Он печатает:
В доступе отказано
Однако, если я открою его с повышенными привилегиями, он напечатает:
Процесс не может получить доступ к файлу, потому что он используется другим процессом
Я все пробовал, даже набирал код из множества мест, но не могу заставить его работать.