Interested Article - GUID

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

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

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

{6F9619FF-8B86-D011-B42D-00CF4FC964FF}

Реализация Microsoft

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

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

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

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 (2 128 -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 , доступный только на ОС Windows 8 и выше. В 2019м году алгоритм был опубликован.

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

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

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

Примечания

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

Ссылки

Источник —

Same as GUID