如何使用 Win32 API 读取原始磁盘而不锁定/卸载卷?

问题描述 投票:0回答:1

这个 StackOverflow question 有一个答案,要求锁定/卸载卷,但似乎这不一定是必需的。当我使用十六进制编辑器HxD

Tools
>
Open disk
)打开卷(逻辑磁盘)或物理磁盘时,我可以无缝打开
C:
,甚至它所在的SSD。我可以继续使用 C 盘,没有任何问题,HxD 会更新其内容。

此外,当我使用 MSVC 和

fopen("\\\\.\\D:", "rb")
fgetc()
时,我能够读取原始磁盘/卷的第一个字节
D:
。 MinGW 也会发生这种情况,我认为它链接到 MSVC 的库。

那么,我如何使用 Win32 API 来做到这一点?还是 MSVC 正在做 Win32 API 通常不会做的险恶的事情?

windows winapi io
1个回答
0
投票

正如@RbMm所说,

CreateFile("\\\\.\\D:", ...)
可以做到像
fopen("\\\\.\\D:", "rb")
一样。这与 MinGW 和 MSVC 无关。

此外,您应该注意对齐和文件访问要求,当将

CreateFile("\\\\.\\D:", ...)
FILE_FLAG_NO_BUFFERING
一起使用时,数据的大小和偏移量必须是多个扇区大小。

© www.soinside.com 2019 - 2024. All rights reserved.