【问题标题】:how to open partition with CreateFile API?如何使用 CreateFile API 打开分区?
【发布时间】:2016-04-27 13:57:02
【问题描述】:

我想从驱动器C:/获取句柄。我可以通过以下方式从磁盘获取句柄:

HANDLE hd = CreateFile("\\\\.\\PhysicalDrive0", GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, 0, OPEN_EXISTING, 0, NULL);

如何访问磁盘的分区?

当使用此代码时:

HANDLE hd = CreateFile("\\.\C", GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, 0, OPEN_EXISTING, 0, NULL);

并使用GetLastError() 错误代码为123。

ERROR_INVALID_NAME

123 (0x7B)

文件名、目录名或卷标语法不正确。

来自微软文档: image

但不行!

提前致谢。

【问题讨论】:

    标签: c++ winapi


    【解决方案1】:

    您应该用来打开卷的名称是C:,并确保反斜杠被适当地转义。

    HANDLE hd = CreateFile("\\\\.\\C:", GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, 0, OPEN_EXISTING, 0, NULL);
    

    请注意,您可能会收到错误 5(拒绝访问),除非该 exe 以管理员权限运行。

    【讨论】:

    • @mohammadmadani 哎呀,我花了一分钟才意识到反斜杠没有正确转义。答案已更新。
    • 这在CreateFile() documentation 中有介绍。
    • 怎么打开写?我将上述代码与 GENERIC_WRITE 一起使用,但得到错误代码 32:该进程无法访问该文件,因为它正在被另一个进程使用
    猜你喜欢
    • 2019-06-14
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    • 1970-01-01
    • 1970-01-01
    • 2015-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多