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
Другие вопросы по тегам