如何按名称打开卷

本文关键字:何按名 | 更新日期: 2023-09-27 18:02:20

我需要按名称打开卷(获取卷句柄)。目标卷的名称是"'?'Volume{A25CF44F-8CB3-46E7-B3A7-931385FDF8CB}'"这个应该可以工作。根据CreateFile函数

您也可以通过引用卷的名称来打开卷。

c#代码:
public static class Wrapper
{
    [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
     public static extern SafeFileHandle CreateFile(
     [MarshalAs(UnmanagedType.LPTStr)] string filename,
     [MarshalAs(UnmanagedType.U4)] FileAccess access,
     [MarshalAs(UnmanagedType.U4)] FileShare share,
     IntPtr securityAttributes, // optional SECURITY_ATTRIBUTES struct or IntPtr.Zero
     [MarshalAs(UnmanagedType.U4)] FileMode creationDisposition,
     [MarshalAs(UnmanagedType.U4)] FileAttributes flagsAndAttributes,
     IntPtr templateFile);
}
    static void Main(string[] args)
    {
        string sourceVol = @"''?'Volume{A25CF44F-8CB3-46E7-B3A7-931385FDF8CB}'";
        SafeFileHandle sourceVolHandle = Wrapper.CreateFile(sourceVol, FileAccess.Read, FileShare.ReadWrite | FileShare.Delete, IntPtr.Zero, FileMode.Open, 0, IntPtr.Zero);
        if (sourceVolHandle.IsInvalid)
            throw new Win32Exception(); //Here I got "The system cannot find the path specified"

那么如何按名称打开音量呢?我知道我可以使用驱动器号"''"打开卷。'C:"但这是不可接受的)

如何按名称打开卷

要打开卷,我们需要删除末尾的斜杠,所以:

string sourceVol = @"''?'Volume{A25CF44F-8CB3-46E7-B3A7-931385FDF8CB}";