Почему все драйверы в Windows датируются 21 июня 2006 года

Почему в каждой новой версии Windows все драйверы датированы одним и тем же днём  - 21.06.2006 г.? Microsoft вообще когда-нибудь обновляет драйверы или они там собралась просто группа бездельников? Наконец-то мы узнали ответ на этот вопрос из заметки в неофициальном блоге The Old New Thing на сайте Microsoft.



Один из разработчиков компании Microsoft под ником zac_l объяснил, в чём дело. Сакральная дата 21.06.2006 распространяется даже на драйверы вроде Storage Spaces и современные процессоры, которые вообще не существовали десять лет назад, так что о лености разработчиков здесь речи не идёт. Причина в другом.

Для установки древней даты есть одна очень важная причина, которая не имеет никакого отношения к реальной дате выпуска драйвера.

Дело в том, что в Windows работает система Plug and Play (PnP), которая позволяет быстро определить и автоматически сконфигурировать устройства в компьютере. Она автоматически распознаёт наличие нового устройства, а потом подбирает драйверы, устанавливает их, так что всё функционирует нормально без установки и конфигурации вручную. Автоматичеcки распределяются ресурсы, порты ввода-вывода, карты распределения памяти устройств и прочее.

Так вот, когда система PnP в Windows выполняет ранжирование драйверов, она первым делом сверяет аппаратный идентификатор устройства и драйвера. Если же два драйвера имеют одинаковый идентификатор, то система должна выбрать один драйвер из двух. В этом случае главным фактором является дата драйвера.

Представим ситуацию, что даты файлов указаны реальные и соответствуют времени создания файла. Что получится? Предположим, что ваше устройство может использовать стандартный драйвер Windows, но вы установили фирменный специализированный драйвер для него. В этой ситуации при каждом новом обновлении Windows будет накатывать новый стандартный драйвер Windows вместо вашего фирменного драйвера, потому что в новой версии Windows у драйвера будет более свежая дата. Вам придётся вручную каждый раз возвращать нормальные драйверы обратно.

Чтобы избежать такого конфликта, было принято простое и эффективное решение. Всем драйверам во всех версиях Windows присваивается стандартная дата, которая соответствует дате выхода Vista RTM. Эта фиксированная дата не зависит от версии драйвера или реальной даты создания файла. В то же время обновляется номер версии драйвера — это следующий фактор, который учитывается при выборе драйвера, после даты создания файла.

По умолчанию система PnP будет всегда выбирать фирменные специализированные драйверы устройств в случае их присутствия. Если их нет, то будет устанавливаться встроенный драйвер от Microsoft, причём именно драйвер из самой последней версии ОС. У него будет наибольший номер версии, хотя такая же дата, как и у старых драйверов Microsoft.

С новыми версиями Windows совместимы только драйверы не старше, чем Vista. Сторонние драйверы времён Windows XP с ними не совместимы, так что проблем с конфликтами дат не возникает.

Таким образом, система PnP работает без проблем, хотя ситуация и выглядит немножко смешно. До сих пор все драйверы установлены с датой 21.06.2006, и так будет продолжаться и дальше. Вышеупомянутый разработчик Зак из Microsoft сказал: «Это великолепный пример того, что на первый взгляд кажется глупым и незначительным, но в реальности имеет глубокую и основательную цель».

Как говорит народная мудрость: «Если что-то глупо, но работает, то это не глупо» (или по-прежнему глупо, но нам повезло).

Подобный механизм работы вряд ли можно назвать идеально грамотным программированием, потому что дата файлов — это атрибут, не предназначенный для сравнения драйверов. Но система де-факто работает, так почему нет? Да и как иначе решить проблему с корректным обновлением драйверов? Если у вас есть идеи на этот счёт, то у программистов Microsoft более простого и надёжного варианта не нашлось. Кто знает, может быть, над проблемой особо и не думали — и зафиксировать дату навечно было первой мыслью, которую тут же и реализовали? Может быть, проблему решили таким «фиксом» разработчики, у которых не было полномочий внедрять более грамотную систему, например, с проверкой издателя драйвера (если издателем является Microsoft — ставить драйверу наименьший приоритет).

Плохо, что данный механизм работы PnP долгие годы остаётся ещё одной недокументированной функцией Windows, а ведь это одна из главных причин, за которую критикуют данную операционную систему с закрытым исходным кодом — у неё слишком много недокументированных особенностей, о которых мы не знаем.

Такой механизм сверки дат вполне может работать и дальше, если свет увидят новые версии Windows. Нужно лишь следить, чтобы в фирменных драйверах случайно не была указана дата более старая, чем 21.06.2006, потому что в этом случае Windows будет постоянно накатывать свой драйвер общего назначения вместо фирменного драйвера, независимо от версии. Если что, в Windows 10 есть возможность временно отключить обновление драйверов для Windows Update.

Нравится26
Комментарии (12)
  • 19
    Интересный блог. Хоть решение и выглядит с первого взгляда как костыль тем не менее работает достаточно хорошо.
  • 0
    слава Висте!
  • 6
    костыль костыльный конечно, но если работает, почему бы и нет)
  • 7
    HamataYoshi
    Ууу!!! Это костыль в чистом виде. Прямо эталонный образец.
    Кому интересно: графическое и системное ядро неразделимы у Windows. И это тоже костыль.

    Что один, что другой - вполне реально убрать. Но всем как-то...
  • 9
    Да, реально странный костыль для компании производящей эту систему) Я бы понял подобный ход от разработчиков стороннего ПО, чтобы обойти какие-нибудь ограничения, но майкрософт... Неужели нельзя было другим способом просто поставить драйверам метку "системных" и всё.
  • 2
    Да просто на этом вся система стоит, если начать внедрять другой код, то это будет полная жо...
  • 0
    Не знаю, конечно, почему, но у меня некоторые драйвера датируются 21.04.2009. Некоторые так вообще, 2015-ым годом!
  • 4
    Подобный механизм работы вряд ли можно назвать идеально грамотным программированием, потому что дата файлов — это атрибут, не предназначенный для сравнения драйверов. Но система де-факто работает, так почему нет?

    Такой нелепый отмаз. Больше похоже на то, что в Майкрософт кто-то из боссов увлекается каббалистической нумерологией - сатанисты хреновы.
  • 7
    Всё, дошло. Мелкомягкие намекают, что значимость их операционки ни как не меньше мировой религиозной, а учитывая, что главный враг Америки - Ислам ...
    Спойлер

    В Священном месяце Рамадан есть ночь (21 июня) Ляйлятуль-кадр (Laylat al-Qadr) — Ночь Могущества и Предопределения — самая значимая ночь. Первые суры Священного Корана были ниспосланы Пророку Мухаммеду именно в эту ночь. Исламские ученые предполагают ряд причин, почему эта ночь была названа «Ляйлятуль-кадр» (Ночь Могущества): «Могущественность и величественность ее в том, что Священный Коран был ниспослан именно в эту ночь. Невероятно большое количество ангелов опускаются в эту ночь на землю. Проявление благодати, милости и прощения Всевышнего в эту ночь несравнимо с другими ночами по своей значительности. Верующий, проводящий эту ночь в молитвах, приобретает, по милости Всевышнего, необычно большее количество сил и жизненной энергии».

    Источник: www.calend.ru/holidays/0/0/2244/
    © Calend.ru
  • 2
    SKolomiets
    Если серьезно к делу относиться то да, это костыль в чистом виде, но когда вспоминаешь что на работе твориться... то что сделала майкрософт выглядит вполне себе элегантным решением))
  • 0
    HamataYoshi
    Ну такое. Я если костыляю, то делаю это оооооочень аккуратно, так чтобы юзер и не заметил в чем подвох. Просто скрестить пингвина с чемоданом не всегда выходит.
  • 0
    я это и так знал
B
i
u
Спойлер