Это была ошибка в Windows XP и Windows Server 2003.
MAC-адрес состоит из 48 бит и обычно представляется как:
00-01-02-0A-0B-0C
00:01:02:0a:0b:0c
Первые три байта представляют Организацию, остальные три байта — любую схему нумерации, которую организация хочет использовать. Идентификаторы организации выдаются IEEE.
Для всех общедоступных MAC-адресов 2-й младший (2-й наименее значащий бит) первого байта будет равен нулю. Если вы хотите сгенерировать свои собственные локальные MAC-адреса, вы можете установить бит в 1:
02-01-02-0A-0B-0C
02 - 01 - 02 - 0A - 0B - 0C
/¯¯¯¯¯¯\ /¯¯¯¯¯¯\ /¯¯¯¯¯¯\ /¯¯¯¯¯¯\ /¯¯¯¯¯¯\ /¯¯¯¯¯¯\
00000010-00000001-00000010-00001010-00001011-00001100
^
|
+- 0: Universal
1: Locally Administered
Или изображение взято из Википедии:
![введите здесь описание изображения](https://i.stack.imgur.com/rOh4a.png)
Windows проверила неправильный бит
Ошибка в Windows XP и Windows Server 2003 заключается в том, что они проверяли неправильный бит. Они ошибочно проверяли старший бит:
Мне не хочется бросать Рэймонда под автобус, но вот пример неверной информации????:
Последние 48 бит — это уникальный адрес сетевой карты компьютера. Если на компьютере нет сетевой карты, установите старший бит и используйте генератор случайных чисел для остальных 47. Ни у одной допустимой сетевой карты не будет установлен верхний бит в адресе, поэтому нет вероятность того, что идентификатор GUID, созданный на компьютере без сетевой карты, случайно столкнется с идентификатором GUID, созданным на компьютере с сетевой картой.
Акцент мой. Поправкой было бы сказать, что:
...установить 2-й младший значащий бит... Ни у одной допустимой сетевой карты не будет установлен 2-й младший значащий бит.
Тестирование
Я проверил это на своем компьютере. Мой компьютер имеет MAC-адрес:
C8-60-00-12-34-56 (Ok, i changed the serialized number, but it is a Realtek)
Если бы мы следовали правилам Windows XP, этот MAC-адрес был бы "локально администрируемым", а UuidCreateSequential возвращал бы RPC_S_UUID_LOCAL_ONLY.
Когда я запускаю UuidCreateSequential
в Windows 7, все работает нормально:
{FBE65AFC-2588-11E5-9F09-C86000123456}
{FBE65AFD-2588-11E5-9F09-C86000123456}
{FBE65AFE-2588-11E5-9F09-C86000123456}
{FBE65AFF-2588-11E5-9F09-C86000123456}
Но если я запустил его на компьютере с Windows XP с таким же (или похожим) MAC-адресом:
![введите здесь описание изображения](https://i.stack.imgur.com/z3gXd.png)
Функция не работает:
0x720 Выделен UUID, действительный только на этом компьютере.
Исправить
Эта ошибка проверки неправильного бита MAC-адреса была задокументирована в:
- #P20# <блочная цитата> #P21# блочная цитата>
Это также было задокументировано в UuidCreateSequential
вместе с:
- #P23# <блочная цитата> #P24# блочная цитата>
Было связанное исправление, но я не верю, что оно было исправлено помимо этого (т. Е. Нет официального исправления в пакете обновления).
У вас есть три варианта:
- измените свой MAC-адрес в настройках Windows XP, чтобы не устанавливать старший бит
- обновление до Windows Vista или новее
- если функция возвращает RPC_S_UUID_LOCAL_ONLY, и вы работаете до Windows Vista (
dwMajor < 6
), то предположим, что это действительно удалось (Опасно!)
person
Ian Boyd
schedule
08.07.2015