- Как узнать и изменить UUID/GUID компьютера?
- uuid — атрибут
- Параметры
- Комментарии
- Generating Interface UUIDs
- What is a UUID?
- Using Uuidgen
- Системный номер раздела диска UUID / GUID / serial number
- В чем отличие UUID от GUID
- Как вытащить дату и время из GUID?
- Использование UUID / GUID как номера раздела (тома) на диске
Как узнать и изменить UUID/GUID компьютера?
Каждый компьютер в сети должен иметь уникальный идентификатор UUID или GUID (в терминологии Microsoft). Он позволяет на базе этого ID аутентифицировать и активировать (при необходимости активации лицензий) компьютер.
Чтобы узнать GUID Windows компьютера, выполните команду Powershell на локальном компьютере:
get-wmiobject Win32_ComputerSystemProduct | Select-Object -ExpandProperty UUID
get-wmiobject Win32_ComputerSystemProduct -computername PC_NAME | Select-Object -ExpandProperty UUID
Это же значение содержится в реестре в ветке HKLM\SOFTWARE\Microsoft\Cryptography\MachineGuid.
Однако, если речь идет о виртуальных машинах, Vmware технически позволяет создать (или клонировать) машины, сохраняя идентичный UUID, что конечно плохо. UUID основан на пути к конфигурационному файлу VM и он генерируется, когда вы первый раз включаете машину или ресетите (сбрасываете до изначального состояния) её. Эта информация записывается в SMBIOS файл конфигурации виртуальной машины — *.vmx. Файл текстовый, его можно редактировать в текстовом редакторе.
Нужная вам строка будет выглядеть примерно так: uuid.bios = «00 11 22 33 44 55 66 77-88 99 aa bb cc dd ee ff»
Соответственно, вы можете поменять значение на уникальное. Все действия необходимо производить на выключенной виртуальной машине.
Альтернативно, вы можете изменить UUID группы виртуальных машин, если они расположены на ESXi, через PowerCLI, используя скрипт на Powershell.
uuid — атрибут
Атрибут интерфейса [ UUID ] обозначает универсальный уникальный идентификатор (UUID), назначенный интерфейсу, который отличает его от других интерфейсов.
Параметры
Задает строку, состоящую из 8 шестнадцатеричных цифр, за которыми следует дефис, затем три группы из четырех шестнадцатеричных цифр, за которыми следует дефис, а затем 12 шестнадцатеричных цифр. Строку UUID можно заключать в кавычки, за исключением случаев, когда используется параметр компилятора MIDL /ОСФ.
Комментарии
Библиотека времени выполнения использует UUID интерфейса, который указывает атрибут [ UUID ] , чтобы обеспечить взаимодействие между клиентскими и серверными приложениями. Атрибут [ UUID ] может присутствовать в списке атрибутов интерфейса либо для интерфейса RPC, либо для COM-интерфейса.
Для интерфейса RPC список атрибутов интерфейса должен содержать либо атрибут [ UUID ] , либо [ локальный ] атрибут, и выбранный вариант должен быть ровно один раз. Если список содержит атрибут [ UUID ] , он также может включать [ атрибут Version ] .
Для COM-интерфейса (определяемого [ ] атрибутом интерфейса объектов) список атрибутов интерфейса должен включать атрибут [ UUID ] , но не может включать атрибут [ Version ] . Список для COM-интерфейса может включать [ локальный ] атрибут, даже если имеется атрибут [ UUID ] .
Microsoft RPC поддерживает расширение для устройства DCE IDL, позволяющее заключать UUID в двойные кавычки («» «). Форма в кавычках необходима для препроцессоров C-компилятора, которые преобразуют числа UUID в виде чисел с плавающей запятой.
Для обеспечения уникальности все значения UUID должны быть сформированы компьютером. Используйте служебную программу uuidgen для создания уникальных значений UUID.
Идентификатор UUID и номер версии интерфейса используются для определения возможности привязки клиента к серверу. Для привязки клиента к серверу UUID, указанный в интерфейсах клиента и сервера, должен быть одинаковым.
Обратите внимание, что интерфейс без атрибутов можно импортировать в базовый IDL-файл. Однако интерфейс должен содержать только типы данными без процедур. Если в интерфейсе содержится даже одна процедура, необходимо указать локальный или UUID.
Generating Interface UUIDs
This section presents information on Universal Unique Identifiers (UUIDs) and the Uuidgen utility in the following topics:
What is a UUID?
All interfaces must be uniquely identified on a network so that clients can find them. On small networks, the interface’s name alone may be sufficient to identify it. However, that is usually not feasible on large networks. Therefore, developers typically assign a Universal Unique Identifier (UUID, interchangeable with the term GUID, or Globally Unique Identifier) to each interface. A UUID is a string that contains a set of hexadecimal digits. Each interface has a different UUID. For details, see String UUID.
The textual representation of a UUID is a string consisting of 8 hexadecimal digits followed by a hyphen, followed by three hyphen-separated groups of 4 hexadecimal digits, followed by a hyphen, followed by 12 hexadecimal digits. The following example is a valid UUID string:
Empty UUIDs are referred to as nil UUIDs rather than NULL UUIDs. The term nil indicates anything that is zero, blank, empty, or uninitialized. An empty string, an empty database record, or an uninitialized UUID are all examples of nil values.
The value NULL is the specific value zero. It is often used in C and C++ programming in conjunction with pointers. Nil is a more general term than NULL. Uninitialized object interface UUIDs should always be referred to as nil UUIDs rather than NULL UUIDs.
Using Uuidgen
Microsoft provides a utility program called Uuidgen to generate your UUIDs. The Uuidgen utility generates the UUID in IDL file format or C-language format.
When you run the Uuidgen utility from the command line, you can use the following command switches.
Uuidgen switch | Description |
---|---|
/I | Outputs UUID to an IDL interface template. |
/s | Outputs UUID as an initialized C structure. |
/o | Redirects output to a file; specified immediately after the /o switch. |
/n | Specifies the number of UUIDs to generate. |
/v | Displays version information about Uuidgen. |
/h or ? | Displays command-option summary. |
Typically, you will use the Uuidgen utility as shown in the following example.
uuidgen -i -oMyApp.idl
This command generates a UUID and stores it in a MIDL file that you can use as a template. When the preceding command is executed, the contents of MyApp.idl are similar to the following:
The next step would be to replace the placeholder name, INTERFACENAME, with the actual name of your interface.
Системный номер раздела диска UUID / GUID / serial number
На чистом диске нет никаких разделов и соответственно нет никаких номеров раздела.
В чем отличие UUID от GUID
UUID (Universally unique identifier «универсальный уникальный идентификатор») – UUID представляет собой 16-байтный (128-битный) номер. В каноническом представлении UUID изображают в виде числа в шестнадцатеричной системе счисления, разделённого дефисами на пять групп в формате 8-4-4-4-12.
GUID (Globally Unique Identifier) – это так называется у Microsoft – фактически это последняя реализация UUID (да, там были свои предыдущие версии и свой зоопарк).
Именно по этому актуальная разметка диска от Microsoft называется GPT (GUID Partition Table), читаем статью
В целом используется как идентификатор (в составе также закодирована дата и время создания):
- раздела на диске
- операционной системы
- загрузчика
- и прочая
Почему такая загадочная запись?
Очень удобно переводить двоичные числа в шестнадцатеричный формат (а в десятичный формат – очень неудобно).
Помним, что для половинки байта (4 бита):
Bin | Hex | Dec |
0000 | 0 | 0 |
0001 | 1 | 1 |
0010 | 2 | 2 |
0011 | 3 | 3 |
0100 | 4 | 4 |
0101 | 5 | 5 |
0110 | 6 | 6 |
0111 | 7 | 7 |
1000 | 8 | 8 |
1001 | 9 | 9 |
1010 | A | 10 |
1011 | B | 11 |
1100 | C | 12 |
1101 | D | 13 |
1110 | E | 14 |
1111 | F | 15 |
Т.е. один байт (8 бит) вида 11111111 легко представляется в виде FF = т.е. каждая половинка байта – это F (15 в десятичной системе).
Поэтому 128 бит легко превращаются в номер из 32 цифр в шестнадцатеричной системе счисления, 128/4 = 32
В номере UUID <8e44ac32-40e2-11ea-93a4-bff4e4da2abb> каждые два разряда фактически кодируют один байт.
Посмотрим на структуру номера
xxxxxxxx-xxxx-Mxxx–Nxxx-xxxxxxxxxxxx
4 бита M обозначают версию (“version”) UUID, а 1-3 старших бита N обозначают вариант (“variant”) UUID.
Первые две цифры кодируют дату и время создания.
Такое разделение на группы основано на структуре UUID:
Название поля | Длина (в байтах) | Длина (число 16-ричных цифр) | Содержимое |
---|---|---|---|
time_low | 4 | 8 | целое число, обозначающее младшие 32 бита времени |
time_mid | 2 | 4 | целое число, обозначающее средние 16 бит времени |
time_hi_and_version | 2 | 4 | 4 старших бита обозначают версию UUID, младшие биты обозначают старшие 12 бит времени |
clock_seq_hi_and_res clock_seq_low | 2 | 4 | 1-3 старших бита обозначают вариант UUID, остальные 13-15 бит обозначают clock sequence |
node | 6 | 12 | 48-битный идентификатор узла |
Как вытащить дату и время из GUID?
bdb62d89-cede-11e4-b12b-d4ae52b5e909
дата содержится в первых символах, bdb62d89-cede-11e4 которые нужно переставить задом наперед: 11e4-cede-bdb62d89
первый символ отбрасываем, убираем “лишние” знаки “-“(тире)
интервал в десятых долях микросекунд (HEX) получается равным: интервал 16= 1E4CEDEBDB62D89
переводим его в десятичный интервал интервал 10 = HexToDec(интервал 16);в результате получаем: интервал 10 = 136 461 344 788 852 105
находим интервал в секундах: интервал Сек = интервал 10 / 10 000 000;
Делаем сдвиг даты от 15.10.1582 г. + 13 646 134 478 + сдвиг на часовой пояс (Московское время) от “мирового времени” (GMT) = 20.03.2015 16:54:38
Использование UUID / GUID как номера раздела (тома) на диске
В LInux изначально используется UUID как системный номер раздела.
В Windows свой зоопарк.
Для FAT 32 – серийный номер из 4 байт = 8 символов в шестнадцатеричной системе
Для NTFS – серийный номер из 8 байт = 16 символов в шестнадцатеричной системе
Системный номер раздела записан непосредственно на диске – создается при форматировании диска. В серийном номер также закодирована дата и время создания раздела.
ВАЖНО: каждый диск “помнит” дату и время создания на нем конкретного раздела, это фактически записано в номере созданного раздела (при форматировании). Нужна шапочка из фольги…
Этот номер мы можем увидеть в свойствах раздела, который показывают программы для управления разделами.
Номер 4610e64f 10e64611 – 16 цифр в шестнадцатеричной системе
Правую половинку номера тома мы также можем увидеть через команду DIR в режиме командной строки
10e6-4611
Он используется Windows уже для регистрации (например раздела) – как устройства, подключенного к системе, вот на фото ниже (как это красиво называется – “точка монтирования” – Mount point).
Этот номер уже записан в недрах реестра – в отличии от серийного номера раздела, записанного в заголовке тома на диске.
Этот же номер мы можем увидеть в bcdedit – как номер основного диска С для работы системы
Видно, что номер GUID используется также для идентификации текущей операционной системы (т.е. в загрузчике явно указано, какую операционную систему нужно загружать и на каком диске она находится).
Вы можете сохранить ссылку на эту страницу себе на компьютер в виде htm файла