gpt4 book ai didi

c# - Kernel32.dll 中的 CreateFile 返回无效句柄

转载 作者:太空狗 更新时间:2023-10-30 01:06:02 25 4
gpt4 key购买 nike

我正在尝试使用 kernel32.dll 的 CreateFile 方法为“C:”创建一个安全文件句柄,它总是返回一个无效句柄。

对我在这里做错了什么有什么帮助吗?"C:

CreateFile(
lpFileName: "C:",
dwDesiredAccess: FileAccess.ReadWrite,
dwShareMode: FileShare.ReadWrite,
lpSecurityAttributes: IntPtr.Zero,
dwCreationDisposition: FileMode.OpenOrCreate,
dwFlagsAndAttributes: FileAttributes.Normal,
hTemplateFile: IntPtr.Zero);

[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern SafeFileHandle CreateFile(
string lpFileName,
[MarshalAs(UnmanagedType.U4)] FileAccess dwDesiredAccess,
[MarshalAs(UnmanagedType.U4)] FileShare dwShareMode,
IntPtr lpSecurityAttributes,
[MarshalAs(UnmanagedType.U4)] FileMode dwCreationDisposition,
[MarshalAs(UnmanagedType.U4)] FileAttributes dwFlagsAndAttributes,
IntPtr hTemplateFile);

最佳答案

有几个参数不太对。

  1. 要打开一个卷,您必须在驱动器盘符前加上 \\.\
  2. 您只能打开具有读取权限的卷。

试试这段代码:

SafeFileHandle handle = CreateFile(
lpFileName: @"\\.\C:",
dwDesiredAccess: FileAccess.Read,
dwShareMode: FileShare.ReadWrite,
lpSecurityAttributes: IntPtr.Zero,
dwCreationDisposition: FileMode.OpenOrCreate,
dwFlagsAndAttributes: FileAttributes.Normal,
hTemplateFile: IntPtr.Zero );

请注意,要以读取权限打开卷句柄,您必须以管理员身份运行,否则您将被拒绝访问(错误代码 5)。作为 Nik Bougalis 和 CreateFile文档指出,如果将 dwDesiredAccess 指定为 0,则不需要管理员权限。

If this parameter is zero, the application can query certain metadata such as file, directory, or device attributes without accessing that file or device, even if GENERIC_READ access would have been denied.

关于c# - Kernel32.dll 中的 CreateFile 返回无效句柄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16679331/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com