windows如何计算卷唯一ID?

use*_*142 15 windows volume

据我所知,Windows驱动程序(ftdisk)为它在系统上找到的每个卷创建对象"HardDiskVolume"并为其创建注册表记录:

HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices\
\??\Volume{GUID} = BINARY_DATA
Run Code Online (Sandbox Code Playgroud)

从那时起,卷被安装为 \??\Volume{GUID}

BINARY_DATA用于将此驱动器映射到\DosDevices\<DISK_NAME>同一注册表配置单元中,以便磁盘具有字母.

BINARY_DATA必须对于卷是唯一的,即使我把这个磁盘放到另一台PC上也不应该更改,对吧?

我的观点是:

  1. GUID在这里是什么?是每次Windows启动时由ftdisk生成的随机数吗?
  2. Windows如何计算BINARY_DATA?

我读过lpVolumeSerialNumber使用GetVolumeInformation.它只是长整数,看起来不像这样BINARY_DATA.

我相信 BINARY_DATA是函数来自lpVolumeSerialNumber(当卷格式化时由OS生成)和其他东西:

BINARY_DATA= F(VolumeSerialNumber, SOMETHING).
Run Code Online (Sandbox Code Playgroud)

什么是SOMETHING?

我已经阅读了MSDN和Russinovich/Solomon的书,但仍然无法得到它.


哦,我找到了.

它说"注册表存储在基本磁盘卷驱动器号和卷名的值中的数据是Windows NT 4样式磁盘签名和与卷关联的第一个分区的起始偏移量".

但什么是"Windows NT 4风格的磁盘签名"?

从这里:http: //www.microsoft.com/resources/documentation/windowsnt/4/server/reskit/en-us/resguide/diskover.mspx?mfr = true

那就是"每个硬盘的第一个扇区中的四字节磁盘签名"

所以我使用HxD工具,从我的BINARY_DATA中找到了这四个字节,我发现它在第1B0行和第08到0B列.

看起来互联网上还有一个人知道它:http: //www.pcreview.co.uk/forums/image-copy-drive-wont-boot-properly-t3761034.html))

因此,如果我更改磁盘上的MBR,它将丢失其信件:)

Joe*_*nte -1

其一,GUID 就是 GUID。它们只是随机生成的数字序列,出现重复条目​​的可能性非常低。我怀疑每次 Windows 启动时都会生成它,尽管我承认这是可能的。我从来没有注意到它发生变化,因为我不经常看到我的硬盘的 GUID

另外,您是否遵循 lpVolumeSerialNumber?如果没有,您可能会获得一个内存地址。匈牙利表示法“lp”==“长指针...”卷序列号本身看起来像一个 DWORD,一个 32 位整数