GUID

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

GUID (Globally Unique Identifier)статистическиуникальный 128-битныйидентификатор.Его главная особенность —уникальность,которая позволяет создавать расширяемые сервисы и приложения без опасения конфликтов, вызванных совпадением идентификаторов. Хотя уникальность каждого отдельного GUID не гарантируется, общее количество уникальных ключей настолько велико (2128или 3,4028×1038), что вероятность того, что в мире будут независимо сгенерированы два совпадающих ключа, крайне мала.

«GUID» называют некоторые реализации стандарта, имеющего названиеUniversally Unique Identifier(UUID).

В тексте GUID записывается в виде строки из тридцати двух шестнадцатеричных цифр, разбитой на группы дефисами и опционально окружённой фигурными скобками:

{6F9619FF-8B86-D011-B42D-00CF4FC964FF}[1]

Реализация Microsoft

[править|править код]

Структура идентификатора:

GUID STRUCT
Data1 dd
Data2 dw
Data3 dw
Data4 dw
Data5 dp
GUID ENDS

UUID-идентификаторы часто записывают в виде текстовой строки {G4G3G2G1-G6G5-G8G7-G9G10-G11G12G13G14G15G16}, где Gx — значение соответствующего байта структуры в шестнадцатеричном представлении[1]:

Data1 = G4G3G2G1 Data2 = G6G5 Data3 = G8G7 Data4 = G9G10 Data5 = G11G12G13G14G15G16

Например, '22345200-abe8-4f60-90c8-0d43c5f6c0f6' соответствует шестнадцатеричному 128-битному числу 0xF6C0F6C5430DC8904F60ABE822345200

Максимальное значение в GUID соответствует десятичному числу 340 282 366 920 938 463 463 374 607 431 768 211 455 (2128-1).

Microsoftприменяет GUID вOLE,COM,DCOMиWindows Runtime— например, в качестве идентификаторов для классов (CLSID), интерфейсов (IID), параметризуемых интерфейсов (PIID),библиотек типов(LIBID). Использование GUID гарантирует, что две (возможно, несовместимые) версии одного компонента могут иметь одно и то же имя, но быть отличимыми по GUID.

Случайные GUID (UUIDv4)

[править|править код]

Алгоритм, который Microsoft использовала для генерации GUID, был широко раскритикован. В частности, в качестве основы для генерации части цифр GUID использовалсяMAC-адрессетевого адаптера,что означало, например, что по данному документуMS Word(также получающему при создании свой уникальный GUID) можно было определитькомпьютер,на котором он был создан. Позже Microsoft изменилаалгоритмтаким образом, чтобы он не включал в себя MAC-адрес.

Вычисляемые GUID (UUIDv5)

[править|править код]

Проекция Windows Runtime, общая для всех нативных языков программирования, повторно использует механизмы COM. В Windows Runtime активно используются интерфейсы, параметризуемые типом аргумента, которым не было соответствия в COM. С точки зрения COM такие обобщённые интерфейсы не существуют, существуют только их специализации. Обобщённым интерфейсам вместо IID назначается параметрический PIID, а IID их специализаций вычисляется так, чтобы для одинаковых параметров производились одинаковые IID без какого-либо согласования. Программное вычисление IID специализаций требует знания алгоритма. Долгое время в Microsoft не публиковали алгоритм, и единственным способом для разработчиков трансляторов вычислить его был вызов WinAPIRoGetParameterizedTypeInstanceIID,доступный только на ОС Windows 8 и выше. В 2019м году алгоритм был опубликован.

Генерация GUID следует стандарту UUID версии 5 (SHA-1). UUID пространства имён: 11f47ad5-7b73-42c0-abae-878b1e16adee. Хешируемая строка строится из PIID обобщённого интерфейса и списка типовых параметров, закодированного согласно опубликованной грамматике.

Другие реализации

[править|править код]

Также GUID — основаТаблицы разделов GUID,заменыMBRвEFI.

  1. 12Последнее 8-байтное данное при записи часто разбивается на 2+6 (подробнее см. в английской версии статьи).