【发布时间】:2011-12-17 06:52:41
【问题描述】:
据我了解,Windows 驱动程序 (ftdisk) 为它在系统上找到的每个卷创建对象“HardDiskVolume”并为其创建注册表记录:
HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices\
\??\Volume{GUID} = BINARY_DATA
从那一刻起,卷被挂载为\??\Volume{GUID}
BINARY_DATA 用于将此驱动器映射到同一注册表配置单元中的\DosDevices\<DISK_NAME>,因此磁盘有字母。
BINARY_DATA 对于卷必须是唯一的,即使我将此磁盘放入另一台 PC 也不应更改,对吗?
我的问题是:
- 这里的 GUID 是什么?是每次windows启动时ftdisk生成的随机数吗?
- Windows 如何计算 BINARY_DATA?
我使用GetVolumeInformation 阅读了lpVolumeSerialNumber。它只是一个长整数,看起来不像BINARY_DATA。
我相信BINARY_DATA 是来自lpVolumeSerialNumber 的函数(在格式化卷时由操作系统生成)和其他东西:
BINARY_DATA= F(VolumeSerialNumber, SOMETHING).
什么是东西?
我已经阅读了 MSDN 和 Russinovich/Solomon 的书,但仍然无法得到它..
哦,我找到了。
它说“注册表存储在基本磁盘卷驱动器号和卷名值中的数据是 Windows NT 4 风格的磁盘签名和与卷关联的第一个分区的起始偏移量”。
但是什么是“Windows NT 4 风格的磁盘签名”?
即“每个硬盘第一个扇区中的四字节磁盘签名”
所以我使用 HxD 工具并从我的 BINARY_DATA 中找到了这四个字节 我在 1B0 行和 08 到 0B 列找到它。
看起来互联网上还有一个人知道这件事: http://www.pcreview.co.uk/forums/image-copy-drive-wont-boot-properly-t3761034.html))
所以如果我更改磁盘上的 MBR,它会丢失它的字母:)
【问题讨论】:
-
在答题框中发表你的答案,给自己加分吧!