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.