如何用CreateFile API打开分区?

moh*_*ani 5 c++ winapi

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

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

如何访问磁盘分区?

使用此代码时:

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

并使用GetLastError()错误代码是123.

ERROR_INVALID_NAME

123(0x7B)

文件名,目录名或卷标语法不正确.

来自Microsoft doc: image

但不行!

提前致谢.

Ste*_*eve 5

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

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

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

  • 这在[`CreateFile()`文档](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363858.aspx)中有所介绍. (2认同)