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 = G9G10G11G12G13G14G15G16
Например, '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 не публиковали алгоритм, и единственным способом для разработчиков трансляторов вычислить его был вызов WinAPI RoGetParameterizedTypeInstanceIID, доступный только на ОС Windows 8 и выше. В 2019м году алгоритм был опубликован.
Генерация GUID следует стандарту UUID версии 5 (SHA-1). UUID пространства имён: 11f47ad5-7b73-42c0-abae-878b1e16adee. Хешируемая строка строится из PIID обобщённого интерфейса и списка типовых параметров, закодированного согласно опубликованной грамматике.
Другие реализации
Также GUID — основа Таблицы разделов GUID, замены MBR в EFI.