C# PInvoke Я не могу открыть том с помощью CreateFile - PullRequest
0 голосов
/ 06 мая 2020

Мне нужно открыть том с помощью 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());

Он печатает:

В доступе отказано

Однако, если я открою его с повышенными привилегиями, он напечатает:

Процесс не может получить доступ к файлу, потому что он используется другим процессом

Я все пробовал, даже набирал код из множества мест, но не могу заставить его работать.

1 Ответ

0 голосов
/ 06 мая 2020

Используя код PInvoke, взятый из здесь :

var volume = CreateFile(volumePath, EFileAccess.GenericRead, EFileShare.Read|EFileShare.Write, IntPtr.Zero, ECreationDisposition.OpenExisting, 0, IntPtr.Zero);

Мне удалось заставить его работать.

...