GUID тома NTFS
В настоящее время я экспериментирую со своим собственным программным обеспечением для резервного копирования и просто удивляюсь, где на самом деле хранится GUID тома NTFS (то есть тот, который отображается как \?\Volume{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}), со смещением, на раздел? Это всегда с вычисляемым смещением, или это часть записи $MFT или $Volume или что-то в этом роде?
2 ответа
Я провел часы перед разделом с моим шестнадцатеричным редактором и обнаружил, что атрибут $VOLUME_NAME метафайла $Volume на самом деле - это текстовое имя тома, которое можно увидеть в "Компьютере", и тому подобное - то есть "Мой диск"
Оказывается, стиль GUID, о котором я спрашивал выше, хранится только в базе данных менеджера монтирования в реестре на MountingDevices. В конечном итоге меня привело к тому, что один и тот же диск (с тем же серийным номером в разделе NTFS) получит другой GUID, если вы подключите его к другой машине.
Я потратил некоторое время, пытаясь ответить на этот вопрос.
В конце концов я нашел это для дисков MBR:
Шаг 1.
GUID формируется как{UUUUUUUU-0000-0000-PPPP-PPPPPPPPPPPP}
, где
-
UUUUUUUU
- это UNIQUEID диска (можно увидеть/изменить в diskpartuniqueid disk
команда) -
0000-0000
всегда нули -
PPPP-PPPPPPPPPPPP
это смещение байтов раздела (можно увидеть в diskpartdetail partition
команда), шестнадцатеричное кодирование с обратным порядком байтов.
Шаг 2
- Если драйвер поддерживает , то любой возвращаемый GUID будет использоваться в качестве GUID тома. В противном случае,
ExUuidCreate()
используется для создания нового GUID. - До Вин10,
IOCTL_MOUNTDEV_QUERY_STABLE_GUID
не поддерживается для дисков MBR. - Начиная с Win10, для MBR-дисков, если они несъемные + какие-то другие неизвестные условия, в качестве GUID тома используется GUID из шага 1. В результате в нем будет много нулей.
Шаг 3.
Полученный GUID сохраняется вHKLM\SYSTEM\MountedDevices
. Он сопоставляет GUID тома (имя значения) с идентификатором тома (возвращаемымIOCTL_MOUNTDEV_QUERY_UNIQUE_ID
). Для дисков MBR идентификатор соответствует GUID из шага 1.
Если UNIQEID диска будет изменен, Windows не сможет загрузиться (поскольку она больше не сможет найти загрузочный том). Если конфигурация загрузки исправлена путем запускаbootrec /rebuildbcd
после восстановления загрузка Windows и том будут иметь новый GUID, где только первые 4 байта изменятся в соответствии с UNIQUEID нового диска.
Некоторые соответствующие места в коде Windows:
-
mountmgr!CreateNewVolumeName
-
mountmgr!QueryDeviceInformation
-
volmgr!VmpQueryStableGuid