Как стать автором
Обновить

Комментарии 216

НЛО прилетело и опубликовало эту надпись здесь
Костыль.NET
ждем пояснительную статью почему и сегодня в винде нельзя создавать папки типа prn, con, lpt1 и com1
НЛО прилетело и опубликовало эту надпись здесь

Хм, а у меня получилось создать их. ЧЯДНТ?

а вы точно попробовали?

P.S. Win10x64, нельзя (во всяком случае штатным способом)
cmd достаточно штатный способ?
md \\?\C:\con
недостаточно т.к. это не совсем штатный способ, вообще это явный баг учитывая что вроде как должно блокироваться создание таких папок

FAR Manager 2.0 — можно. Совершенно штатным способом (F7, "con", Enter). А вот удалять надо через Shift+Del — Корзина такую папку не принимает :)

Создать подобные папки/файлы невозможно из-за особенностей подсистемы WIN32, где эти имена зарезервированы для устройств ввода-вывода.
Far же, насколько мне известно, использует API ядра windows для рвботы с файлами, поэтому плевать эму с высокой башни на эти особенности. Как-то так.

Есть еще как минимум два способа создавать такие файлы, помимо Native API.


  1. Использование путей вида \\?\... — их WinAPI передает системе без своей обработки.
  2. Использование флага FILE_FLAG_POSIX_SEMANTICS.
win7x64 в far спокойно создаётся и удаляется, как и в cmd, вот в XP нельзя было, но тогда это был пережиток.

Я даже представить не мог что Windows на столько криво реализована внутри, а судя по отношению, это только цветочки.

НЛО прилетело и опубликовало эту надпись здесь

А никто не говорит что Linux или любая другая ОС идеальна) Справедливости ради, для рядового пользователя подавляющее большинство оборудования в Linux просто работает из коробки, а костыли и странности есть везде.

А про Windows — это не так что ли? :))
Когда я там часто бывал, было не так.
Теперь уже не так важно. ^_^
У меня умерла убунта после замены видеокарты и установки драйверов на неё из репозитория. Перезагрузка — GRUB — выбираем Убунту — чёрный экран и мигающий курсор (просто мерцающий, ничего ввести нельзя). Победилось переустановкой убунты и установкой уже новых драйверов через пол-года(!).
(Да, я не линуксоид, а вполне себе махровый виндузятник. Ставил линукс для «посмотреть»).
Подобное произошло месяц назад. В результате не стал возиться и разбираться, а поставил Archlinux.
Проблема появилась после установки чистой убунты и установки дров нвидии
А никто не говорит что Linux или любая другая ОС идеальна) Справедливости ради, для рядового пользователя подавляющее большинство оборудования в Linux просто работает из коробки, а костыли и странности есть везде.


Да ты че.
Особенно видеодрайвера, да?
И с нормальным таким ускорением?

Видеодрайвера Nvidia нужно ставить проприетарные, да. Скорость зависит от оптимизации игр, мне в те что играю с 4k разрешением вполне подходит.
С AMD достаточно поставить как минимум последнюю версию Ubuntu/Fedora, а лучше обновиться до git версии mesa, там со скоростью в открытых драйверах всё очень даже не плохо.
Иногда нужны дрова для некоторых железяк в самых новых ноутах, а в остальном да, для рядового пользователя без экзотического железа всё просто работает.

Иногда нужны дрова для некоторых железяк в самых новых ноутах, а в остальном да, для рядового пользователя без экзотического железа всё просто работает.


Не работает в свежайшей Ubunte на моем ноутбуке (обычный, не экзотический)
Wi-Fi и 3G модем крупнейшего оператора

WIFI какой-нибудь насквозь проприетарный atheros или broadcom последнего поколения, а модем какой-нибудь Huawei который работает через ndis?
Справедливости ради, для рядового пользователя подавляющее большинство оборудования в Linux просто работает из коробки

Это шутка такая что ли?
Каждый раз, когда пробовал использовать десктопный Linux, постоянно возникали проблемы то с Wifi, то со звуком, то с видео.
Не надо нам такого «работает из коробки»…
Поменял недавно материнскую плату и видеокарту. Винда 7 после этого не только загружаться перестала, но и с установкой начались пляски. Linux просто продолжил работать. Вообще ничего менять не пришлось. Что я делаю не так? :)
Не знаю, я менял материнские платы и видеократы, все отлично работало.
Хотя с другой стороны вы бы еще диск поменяли и спросили почему не загружается.
Ну однако linux загрузился и ничего менять не потребовалось. Даже не смотря на то что это Gentoo и в ядре выпилена поддержка отсутствующих устройств :)
Дальше больше кстати. Новая материнка оказалась с uefi и в legacy режиме Windows 7 завести так и не удалось. Пришлось ставить загрузчик с поддержкой uefi на Linux чтобы получить возможность хоть как-то запускать Windows 7
Я так понимаю, что у вас рядом лежали windows и linux?
Да, дуалбут на одном железе. Под каждую систему отдельный SSD.
для рядового пользователя подавляющее большинство оборудования в Linux просто работает из коробки


Для рядового админа сервера — да, работает.
Для пользователя — постоянные проблемы с каким-то оборудованием. В моем случае — Wi-Fi, видео, 3G-модем.

В Linux драйвера запиханы в большом количестве в ядро, что производит впечатление, что нет проблем. Особенно на фоне надписей Windows «Идет установка драйвера».

Но это не более чем иллюзия.
Никто не мешает собирать драйверы модулями. Та же nvidia и broadcom так делают.
Мне вот нафиг не упало там че-то собирать, нужно, что бы воткнул и работало.
Ну дык к чему тогда эти причитания про запиханные в ядро драйверы? Большинство железа с ними работает. Не работает только то железо, производители которого больны виндой головного мозга и не распространяют драйверы своего железа под другие системы. Но к счастью таких не очень много и большинство такого железа так или иначе поддерживается открытыми драйверами.
Какие причитания? У меня, например, постоянно очень часто были проблемы с wifi одного очень популярного производителя.
К тому же со звуком постоянно были проблемы, эти алсы и пульсы нифига не работали нормально, в винде вообще ни разу таких проблем не возникало… Вообще.
У меня есть старенький ноутбук Asus K43sj. В линуксе при втыкании наушников звук переключается на них. В Windows 7 не происходит никакой реакции :) Более того в Windows 7 даже руками не возможно выбрать вывод на наушнки. Выбираю в панели драйвера этот выход и ничего не происходит :) Драйверы обновлял, систему тоже. На десктопе стоит две звуковухи. Интеграшка intel-hda (на чипе realtec) и дискретка audigy первого поколения. Кроме того два монитора подключены по HDMI. Что бы я ни делал, но после перезагрузки винды звук всегда выходит через HDMI на динамики первого монитора. В Linux я как настроил вывод звука две материнских платы назад на нужную звуковуху, так он и работает :)
Ну опять же, вообще ни разу не встречал подобных проблем со звуком на винде, при этом я говорю как минимум о десятке компьютеров разных конфигураций и разными версиями windows, и еще примерно о таком же количестве ноутбуков.
Единственные проблемы — это когда в ноутбуках пропадает звук или wifi из-за перегрева, но такое справедливо и для linux'а.
Хотя да, дискретный звук я видел последний раз лет 10 назад.

две материнских платы назад

Мне кажется вы делаете что-то не то…
Мне кажется вы делаете что-то не то…

Не переустанавливаю систему каждые пол года? :) Как поставил 12 лет назад так и обновляю просто :) Железо меняется, а система остается :)
Ну начиная с win7 я тоже только обновляю ОС. Да для избежания возможных проблем, я переустанавливал их целиком и полностью.
Но это были совершенно разные ОС, с 10 обещают по сути только обновления, как и в линуксе.
Не вижу смысла обновляться выше Win 7. Использую ее только для пары игр и софтин от пары китайских станков, которые под Wine не работают.
Ну для вас и линукс на десктопе — это норма =)
Сугубо потому, что он для меня проще, удобнее и не доставляет проблем :)

Даже если отключить звуковуху на видеокарте через диспетчер устройств? (Не удалить — тогда винда ее найдет опять, а именно отключить)

Поясню ситуацию. Звук по HDMI идет через видеокарту. Отключить видеокарту вообще не вариант :) Отключить просто вывод звука через видеокарту — не нашел такой опции.

"Звуковая" часть видеокарты обычно может отключаться независимо. Поищите ее в списке звуковых устройств.

Нет такой опции в диспетчере устройств. Если выключать через панель управления выводом звука — то при перезагрузке все само включается и повторяется описанная ситуация

Забавно...

Причем что интересно на чистой свежеустановленной системе все в точности воспроизводится в этой конфигурации :) Пробовал интереса ради переустановить Win 7 в надежде что поможет.

Ну еще бы. Проблема-то в драйверах видеокарты, куда звук не иначе как каким-то костылем завезли...

Видюха обычный GeForce GTX 770 :)
Я как-то раз обновил CentOS с 5.x до 5.12 кажется. Крутилась она под Hyper-V, и в новом ядре был встроенный драйвер адаптера хранилища. Который не заводился.
Хорошо что я снепшот сделал перед обновлением.
Вот парадокс, реализована криво, а работает отлично.
P. S. Я бы просто дал приоритет сторонним драйверам перед драйверами MS. Тогда автоматически исчезают проблемы с обновлениями дров от самой MS (их можно сверять по датам, как и все остальные дрова).
Вот парадокс, реализована криво, а работает отлично.

В программных продуктах масштаба Windows такой «парадокс» — скорее правило, чем исключение.
https://geektimes.ru/post/285682/#comment_9878814

У меня умерла убунта после замены видеокарты и установки драйверов на неё из репозитория. Перезагрузка — GRUB — выбираем Убунту — чёрный экран и мигающий курсор (просто мерцающий, ничего ввести нельзя). Победилось переустановкой убунты и установкой уже новых драйверов через пол-года(!).


В любых программных продуктах
С учётом того, что сторонние драйвера - основной источник бсодов…
Основная проблема в этом решении — как отличить сторонние драйвера от своих собственных?
Ну оно понятно вроде этот драйвер наш, а этот чужой… но теперь как это объяснить машине?
Можно подписывать собственные драйверы одной цифровой подписью, а сторонние — другой. По сути ещё один вариант костыля, зато без лишних флагов и странных дат.
НЛО прилетело и опубликовало эту надпись здесь
Ключ не вечен, но одинаковый CN можно сохранять без малейших проблем.
Кстати, раз речь про встроенные драйверы, то срок действия не имеет вообще никакого значения. Ключ должен действовать на момент создания дистрибутива, а дальше пусть хоть сразу протухает — нет ничего сложного в том чтобы делать новый сертификат для каждого релиза каждой ОС.
НЛО прилетело и опубликовало эту надпись здесь
У меня есть мания отвечать большими постами на короткие комменты. Вот и щас: UNIX-подобные системы содержат кучу костылей. Крах «философии UNIX»
Еще в 2005 году во время своего визита в Индию глава Microsoft Билл Гейтс изрек перед 4000 индийских IT-специалистов: «Лучшие программисты Microsoft родом из Индии».

А через год вышла Vista и был реализован этот костыль…
Побаяню на тему IE7
image
Девушка справа показывает 8
НЛО прилетело и опубликовало эту надпись здесь
Меня это одного много лет удивляло? Особенно в восьмёрке.
Ни разу не обращал внимания конкретно на месяц-число, но иногда возникал вопрос: «почему в семерке все дефолтные дрова датируются 2006 годом?». Она ведь в 2009 вышла, и не может же быть такого, что ничего не обновляли, а тупо с висты скопировали… Ведь, например, драйвер видео в 2006 и догадываться не мог, что через 7 лет у меня будет Radeon HD7770, с которым драйвер на удивление сможет работать (несмотря на то, что микроархитектуры GCN тогда и в помине не было еще).
Предположим, что ваше устройство может использовать стандартный драйвер Windows, но вы установили фирменный специализированный драйвер для него. В этой ситуации при каждом новом обновлении Windows будет накатывать новый стандартный драйвер Windows вместо вашего фирменного драйвера, потому что в новой версии Windows у драйвера будет более свежая дата. Вам придётся вручную каждый раз возвращать нормальные драйверы обратно.


а что мешало учитывать дату, но драйвера отсортировать по дате в порядке убывания? (Новый — первый, старый — последний)?!

В том-то и проблема, что стандартный драйвер в новой версии Windows может оказаться новее, чем старый драйвер от производителя.

а что мешало учитывать дату, но драйвера отсортировать по дате в порядке убывания? (Новый — первый, старый — последний)?!


Подумайте.
Предположим, что ваше устройство может использовать стандартный драйвер Windows, но вы установили фирменный специализированный драйвер для него. В этой ситуации при каждом новом обновлении Windows будет накатывать новый стандартный драйвер Windows вместо вашего фирменного драйвера, потому что в новой версии Windows у драйвера будет более свежая дата. Вам придётся вручную каждый раз возвращать нормальные драйверы обратно.
Есть устройства к которым был выпушил фирменный драйвер и все драйвер не обновляют вообще, так как он работает нормально и производитель считает что устройству не нужны более новые драйвера, за исключением обновления отдельных драйверов для корректной работы на новых системах. И получается что шиндус после обновления которое она любит делать чут ли не по 2 раза на дню, просто перекроет этот драйвер и все…
Но логично было бы мелкософтовским драйверам присвоить флажок, который опускал бы их приоритет, т.е. используем это только если ничего более подходящего не нашлось. Использовать для этой задачи дату — костыльно…
НЛО прилетело и опубликовало эту надпись здесь

Лучше сделать новую сущность, чем костыль, особенно в такой большой сложной системе как Windows.

А потому давайте использовать в качестве приоритета дату, которая изредка будет иметь свой реальный в смысл, но в общем — это просто 64х битный приоритет. Окама, фигли!
Но это потребует добавления новой сущности, и при этом все равно нужно будет учитывать старые драйверы не имеющие такого дополнения.
Фиксированная старая дата — как раз реализация того самого флажка приоритета.
И куда потом этот флажок? В свойства файла, который закрыт цифровой подписью? Это костыль, который потребует изменения логистики в драйверописании и видимо имел приоритет ниже среди рассматриваемых решений.
а почему сразу не задействовали номер или версию драйвера? ведь какая разница специализированный он или нет, если он более поздний версией.

Потому что последовательность версий драйвера локальна для производителя. Если для одного и того же устройства есть драйвер версии 5.8.400.12378 от Microsoft и версии 0.9.63.377 от производителя — это еще не означает, что первый подойдет лучше.

Ну, в таких условиях дата выпуска (не думаю, что это тупо дата создания файла) — это единственный способ определить, что новее — «5.8.400.12378 от Microsoft или 0.9.63.377 от производителя», и этот единственный способ Микрософт решила убить. Логично, чо.

Пожалуйста, прочитайте пост еще раз. Или комментарии к нему.

Версии у сторонних производителей могут быть совершенно любых конфигураций
я видел например (помоему у интела)
Старая версия: 5.3.1765, новая версия 2.3.5.5.4765… и дальше уже идёт 2.3

и такое очень часто встречается
Видимо потому что нумерация драйверов у каждого производителя разная и заставлять их переходить на общую не было возможности.
Видимо, потому, что Microsoft и производитель оборудования могут использовать различную нумерацию версий. Например, у вас есть два драйвера: Microsoft версии 2.3.45 и Uncle Lao версии 2010.02.15. Какой из них новее, если первый использует семантическое версионирование, а второй — дату в качестве версии?
Целая статья из одного «забавного факта»? Серьёзно?
Эм, странный костыль. Лучше бы учитывали вендора драйвера и если есть драйвер не от МС, предпочитали бы его…

Это бы помешало другим производителям делать "дефолтные" драйвера, а Microsoft — выпускать свое железо.

Так если все драйвера будут древние, то любой сторонний сразу же перекроет драйвер от МС тоже.
Можно приоритизировать драйвера от Microsoft только для устройств с мелкомягким Vendor ID.
А можно просто использовать трюк с датой, как они и сделали. Самый простой и понятный способ из всех, которые озвучили в каментах.
Даже на одно устройство могут подходить драйвера разных вендоров. Реальный зоопарк драйверов весьма не редкость. иногда версия совпадает и вендор тоже и язык, а драйвера разные. Иногда драйвер от МС предпочтительнее.
НЛО прилетело и опубликовало эту надпись здесь

яркий тому пример — драйвера Broadcom для windows 10. в версии 6.хх соединение стабильно отваливается каждую пару минут, для нормальной работы приходится откатываться на старую 5.100.245

Не сыпьте соль. у меня на ноуте на 4м поколении интеля кор и 5 «вротком» стоит. После двух дней плясок и сваливания в 1 мегабит — плюнул и воткнул внешний длинк, года три свистит без проблем, все никак не переставлю внутренний
НЛО прилетело и опубликовало эту надпись здесь
Достаточно было добавить флаг приоритета. По умолчанию у всех драйверов без флага приоритет = 0, у системных = -1. Ну, и позволить юзеру этот флаг менять, конечно.
На домашнем ноуте бубунта 16года LTS
На рабочем виндоус и «код» пишу в виртуалке. Думаю и на рабочий поставить бубунту, если не уволюсь.

Предмет статьи -, конечно, неТръу и ахтунг. По дате сортировать объекты...., набор полей
version
custom/native
доступны только брахманам, но все разроботчике виндоус — вайшьи, видимо.
Внимание, программист в посте!
Когда поставите бубунту на рабочий, обязательно отпишитесь.
А то мы тут все за вас беспокоимся.
Я не специалист по безопасности, но могу предположить, что это может сказаться на безопасности системы.
Не вижу такого сценария.
Важно другое — видит ли этот сценарий кто либо другой.

Ну так если кто видит — милости просим в комментарии.


А то "уязвимость есть, но я вам о ней не скажу" можно говорить вообще о всём.

Если стояла задача «использовать в первую очередь сторонние драйверы вместо встроенных», то решать её через сравнение дат — ну явный костыль. В конце концов — кому как не Майкрософту знать, что вот эти вот драйвера встроенные, значит нечего их использовать, если есть драйвера от производителя, вне зависимости от даты оных.
Это защита от попытки драйверов, написанный ранее 2006 года для Windows XP.
Опять же ничего не мешает отсечь все драйверы ранее этой даты, а потом выбирать по признаку свой/чужой и в конце по дате.
Опять же ничего не мешает отсечь все драйверы ранее этой даты, а потом выбирать по признаку свой/чужой и в конце по дате.


А зачем?
Я писал ответ в ветке комментариев. Если не сложно поднять вверх гала можете найти ответ на свой вопрос.
И как же это знать когда не только они пишут «встроенные» драйвера, их много версий под разные системы. Кто будет актуализировать список «своих» драйверов, и какова гарантия отсутствия ошибок при составлении этих списков? Проще при обновлении присваивать файлам атрибут, который гарантировано есть на всех системах… и это даже не подпись файла и не какое-то там внутреннее свойство файла, которое могут забыть установить при компиляции файла а вполне стандартный атрибут, который можно применить безусловно и массово не нарушая цифровой подписи файла! Если привязаться к подписи файла, то в будущем она может сменится из-за просрочки или патентных войн и тогда гарантированы проблемы с драйверами для систем которые не в курсе смены подписей и т.д. и т.п. надо будет сначала обновить системы, потом драйвера к ним подсовывать чтобы чего такого не вышло.
Зачем списки? Драйвера подписываются, по-подписи вполне можно понять что драйвера от M$.

> Если привязаться к подписи файла, то в будущем она может сменится из-за просрочки или патентных войн и
> тогда гарантированы проблемы с драйверами для систем которые не в курсе смены подписей и т.д. и т.п.
> надо будет сначала обновить системы, потом драйвера к ним подсовывать чтобы чего такого не вышло.

Не очень понятно о чем вы. Новая версия OS которая не знает о своих собственных драйверах?

Драйвера от Ms устройств отдельной подписью подписывать?

Не понял вопроса. Я так понимаю из вашего вопроса, что вы предполагаете их подписывать теми же подписями, что есть у производителей железа, верно?
Конечно не знает. С чего бы операционке знать где её драйвера а где от производителя? Темболее что реальное происхождение драйвера может принимать очень причудливые формы.
Операционка не делить драйвера на свои и чужие, более того до формирования установочного образа состав драйверов может быть неизвестен, в него могут быть включены драйвера от производителя, самописные и т.д.
И что кстати делать с драйверами которые были написаны ДО ТОГО как было принято это решение?

Можно, конечно, подписать все драйвера после того как они будут интегрированы в установочный образ и таким образом определять свой/чужой исключительно по подписи но этот метод ещё сильнее попахивает костылями и на корню дискредитирует всю систему цифровой подписи.
> более того до формирования установочного образа состав драйверов может быть неизвестен, в него
> могут быть включены драйвера от производителя, самописные и т.д.

Вполне допускаю, что вы можете быть правы. И если это так, то отдел контроля качества занимается совершенно не понятно чем. Ну а вместе с этим отделом и отдел сертифицирования оборудования.

> И что кстати делать с драйверами которые были написаны ДО ТОГО как было принято это решение?

Не очень понятно какое «это» решение. Поясните пожалуйста.

> Можно, конечно, подписать все драйвера после того как они будут интегрированы в установочный
> образ

Либо я либо вы что-то не улавливаем. Я не вижу сложности в том, что драйвер переподписывается либо на поздних этапах тестирования, либо сразу по получении от разработчика (своего сотрудника или разработчика работающего на производителя железа). Никак не пойму где вы нашли загвоздку.

> и таким образом определять свой/чужой исключительно по подписи но этот метод ещё сильнее
> попахивает костылями и на корню дискредитирует всю систему цифровой подписи.

Почему? Я что-то разработал — подписываю. Кто-то другой это протестировал на совместимость — подписывают своей подписью. Получатель решает какой подписи доверять и в каком порядке. В чем костыль? В чем дискредитация?
Решение об изменении алгоритма приоритета драйверов.

Подпись она вообще не для этих целей, из пушки по воробьям стрелять. И потом, что делать при необходимости отозвать подпись? А срок действия подписи закончится, что делать? Там если копнуть поглубже, можно и других проблем накопать, и кто знает сколько их там ещё возникнет.
Привязку можно делать не только к сертификату с каким-то определённым серийным номером, а к заданному CN. В этом случае никаких проблем с отзывом и перевыпуском не будет.
> Решение об изменении алгоритма приоритета драйверов.

Если речь о том менять то, что есть то я сторонник: «работает — не трогай». Но если речь о выборе альтернативы, то я считаю подпись — лучше.

> Подпись она вообще не для этих целей, из пушки по воробьям стрелять.

У вас очень хорошие эпитеты. Но никаких дополнительных сведений вы этими предложениями не сообщили. Самое главное вы делаете уже 4-е утверждение и никак не обосновываете. Можете ответить на вопрос «почему»?

> А срок действия подписи закончится, что делать?

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

> Там если копнуть поглубже, можно и других проблем накопать, и кто знает сколько их там ещё
> возникнет.

Согласен с вами. Есть даже специальный термин для того, о чем вы говорите. Он не полностью соответствует описаной проблеме, но очень близок. Premature Optimization.

The old new thing — неофициальный блог.

Это вообще не «блог Microsoft», это личный блог одного конкретного сотрудника Microsoft, в котором он посты про «недокументированные особенности» Windows перемежает заметками о баскетбольных матчах, об оперных представлениях, и о проделках своих малышей.
У них же есть источник драйверов — просто пометить все стандартные драйвера специальным флагом. При обновлении проверять установлен этот флаг или нет. Нафига дата?
Сделать выбор вендора написавшего драйвер. Использовать самый новый от этого вендора. При установке стороннего драйвера спрашивать у пользователя: «Обнаружен новый драйвер запоминающего устройства Laodkuwauh, использовать его?»
Ну вот специальную фиксированную дату и использовали в качестве флага.
Дата — она уже есть. А вы предлагаете плодить лишний код для флажка и код для его проверки. Нафига?

При этом, любой код, даже Hello World, потенциально может содержать ошибки.

А потом ещё какой-нибудь сторонний разработчик додумается выставить этот флажок со злонамеренными целями и окажется, что система восприняла сторонний драйвер, как родной, что позволило обойти механизмы безопасности.
Эта новость подняла мне самооценку. Благодаря ей я понял, что даже опытные программисты творят фигню и что мои велосипеды из костылей не самые страшные =)
А в чем, собственно, фигня? Я не могу представить ни одного сценария, при котором это решение приводило бы к проблемам. Да, наверное потенциально лучше было бы завести отдельное поле, помечающее «дефолтные» драйвера. Однако, все познается в сравнении. В линуксе, к примеру, подобных костылей нет, потому что там предпочтения нового драйвера реализовано вручную — в смысле, старый модуль нужно ручками занести в блэклист.
Обратная совместимость без костылей в крупных проектах не встречается, так что, полагаю, если «костыль» отлично работает и не доставляет проблем ни пользователям, ни разработчикам, то можно считать его «технологическим крепежом».
если «костыль» отлично работает и не доставляет проблем ни пользователям, ни разработчикам, то можно считать его «технологическим крепежом».

Очень интересная мысль. Я её запомню, благодарю =)

http://ithappens.me/story/10498
Главный вопрос — зачем в принципе автоматически обновлять драйвера? Это же маразм. Я не раз и не два сталкивался с ситуацией, когда более старый драйвер работает быстрее и стабильнее, чем более новый. Если драйвер работает хорошо и быстро — зачем его обновлять? Кроме ухудшения эта ситуация ничего не принесёт.
Особенно это справедливо для драйверов, подходящим нескольким устройствам, там выпустили в серии новое устройство — обновили драйвер, то что он с самым старым устройстовом в линейке станет работать нестабильно — никто же не проверит.
Если только в драйвере нет уязвимости.
Ну уязвимости да, патчить стоит. Но и в этом случае идеальным будет обвноление виндовс, которое будет проверять версию установленного драйвера, и обновлять только если она в списке уязвимых. То есть должно иметь место решение проблемы, а не обновление «на всякий случай, просто потому что новее».
Древняя мудрость:
Не обновляйте софт, если текущие баги вас устраивают.
Так она и после обновления может появиться.
Например предложение обновиться с 7 до 10 чем не уязвимость?
а откуда Вы знаете, что новый драйвер не будет работать, скажем быстрее?
А нельзя было бы для «своих», встроенных драйверов устанавливать их дату разработки, например как:
ДатаРазработки - 1000 лет
Никто из нормальных производителей не укажет 11 век в качестве даты разработки своего драйвера.
А для того чтобы эта дата нормально отображалась для пользователя вместо «21.06.2006», добавить условие вида:
Если ДатаРазработки < 01.01.1900 Тогда
ДатаРазработки = ДатаРазработки + 1000 лет

Конечно ещё худший говнокод, но хоть вопросов не вызывает :)

Либо как вариант, вообще не отдавать пользователю «костыльную» «заниженную» дату разработки встроенных драйверов (кому она вообще нужна).
Чем это отличается от текущего варианта, кроме разных усложнений?
Ведь фактически, для виндовса Vista+, как раз таки 21.06.2006 является «началом эпохи». т.е. фактически, не может быть ни одного драйвера, который написан до 21.06.2006.
Тем, что мы «делаем» дату разработки встроенного драйвера заведомо наименьшей среди всех возможных вариантов этих дат, среди всех производителей. Ведь вполне возможна ситуация когда производитель переписал свой драйвер для XP под Висту, изменил версию, а дату не изменил, оставив какое-нибудь прежнее значение вроде 01.02.2003. Или драйвер был разработан в день выхода Висты, т.е. дата та же — 21.06.2006 (хрен знает как PnP отрабатывает эту ситуацию и как выбирает драйвер «посвежее»).
При этом мы имеем возможность «сохранить» истинную дату разработки драйвера (на всякий случай), «закодировав» её этим прибавлением 1000 лет к возрасту, что позволяет путём нехитрых преобразований всё-таки извлечь её. И всё это делается достаточно прозрачным и непротиворечивым для механизмов системы Plug and Play способом. PnP пофигу на то, что драйвер датирован 11 веком, он просто старше и всё. Вне системы PnP ясно же, что это бред и это своего рода «сигнал» для того, чтобы прибавить заранее оговоренные 1000 лет и получить-таки «нормальную» дату разработки встроенного драйвера.
Более функциональный костыль :)
Вы наверно удивитесь, но типы данных, в которых хранится дата, не всегда хорошо дружат с понятием «1000 лет». Тут на периоде 100 лет уже не раз были проблемы типа Y2K
Вы наверное удивитесь, но скорее всего след тянется к информации, содержащейся в INF-файле. То есть типом данных, в котором в данном конкретном случае хранится дата, является строка. А вы, как я полагаю, понимаете, что там можно написать хоть ерунду вида «1000 лун от сотворения мира» :)
То, что там дата хранится в виде строки, совершенно не означает, что там можно указать любую строку.
Скорее всего, парсер INF-файлов не правили уже лет двадцать.
Ну как бы то, что бессмысленно указывать там какие-либо другие строки без изменений механизмов считывания этих самых строк системой Plug and Play — это, на мой взгляд, очевидно.
В INF-файле конечно можно что угодно написать. Но есть еще какой-то код, который эти файлы читает и пытается по датам сортировать. И либо надо учить этот код понимать, что «1000 лун от сотворения мира» это вот самая ранняя дата и есть, либо (если не трогать этот код) нужно эту «древнюю» дату представлять в формате, совместимом с форматом, с которым этот код уже умеет работать. И скорее всего данный код НЕ СМОЖЕТ одновременно хорошо работать с датами вида «01.01.1001» и «01.01.2001», т.к. форматы представления дат в памяти (не строковые) очень ограниченные «by design». Например, «в программах для хранения UNIX-времени используется целочисленный знаковый тип. 32-битные числа со знаком могут ссылаться на моменты времени от пятницы 13 декабря 1901 года 20:45:52 до вторника 19 января 2038 года 03:14:07 включительно». См. UNIX-время.

Вот только этот код — он один и он свой!

дата та же — 21.06.2006 (хрен знает как PnP отрабатывает эту ситуацию и как выбирает драйвер «посвежее»).

В посте как раз и объяснено, как PnP отрабатывает эту ситуацию: выбирает по номеру версии.
Да, спасибо. Не заметил.
Вот только небольшое уточнение — в посте говорится о том, что при совпадении дат разработки драйверов дальше он выбирает не по номеру версии, а по дате создания файла, а уж если и они совпадают, тогда уже сравниваются «номера версии».
Всем драйверам во всех версиях Windows присваивается стандартная дата, которая соответствует дате выхода Vista RTM. Эта фиксированная дата не зависит от версии драйвера или реальной даты создания файла. В то же время обновляется номер версии драйвера — это следующий фактор, который учитывается при выборе драйвера, после даты создания файла.
Или под «датой создания файла» Ализар имел в виду всю ту же «дату разработки». Хз.

Так или иначе, ума не приложу как этот PnP может сравнивать что-нибудь вида «6.1.7600.16385» с чем-нибудь типа «6.1-rc2».
Или под «датой создания файла» Ализар имел в виду всю ту же «дату разработки». Хз.

Если бы alizar не переврал переводимый текст, вот это была бы новость.
В первоисточнике:
My colleague Zac explains: When the system looks for a driver to use for a particular piece of hardware, it ranks them according to various criteria. If a driver provides a perfect match to the hardware ID, then it becomes a top candidate. And if more than one driver provides a perfect match, then the one with the most recent timestamp is chosen. If there is still a tie, then the one with the highest file version number is chosen.
Т.е. учитываются три фактора: hardware ID, дата и версия.

Так или иначе, ума не приложу как этот PnP может сравнивать что-нибудь вида «6.1.7600.16385» с чем-нибудь типа «6.1-rc2».

Номера версий в Windows всегда состоят из четырёх числовых компонент, от 0 до 65535 каждая, и сравниваются просто как 64-битные числа.
And if more than one driver provides a perfect match, then the one with the most recent timestamp is chosen. If there is still a tie, then the one with the highest file version number is chosen.
Что буквально означает то, что Windows плевать на то, что драйвер по своей версии может быть древним как говно мамонта, если дата создания его файла каким-либо образом оказалась свежее, чем дата создания другого драйвера.
Браво, Microsoft!
Используется не дата создания его файла, а дата разработки, вшитая в INF-файл.
Её, конечно, тоже возможно отредактировать; но если у вас в системном каталоге могут неожиданно для вас редактироваться файлы, то возможность использования не самых свежих драйверов — это наименьшее, что должно вас волновать.
Спасибо за разъяснения. То есть, если я правильно понял, то вся информация по которой PnP определяет какой драйвер применять содержится исключительно в полях INF-файла, который сопровождает каждый драйвер.
В таком случае вообще не понятно зачем надо было устраивать эти «изящные» танцы с датами (которые их уродуют), если можно было всё-таки сделать всё по-нормальному, добавив хотя бы в те же INF-файлы встроенных драйверов какое-нибудь специальное поле-метку для PnP.
А так всё равно остаётся ненулевая вероятность того, что какая-нибудь «фирма» выпустит драйвер у которого в INF-файле дата разработки будет 21.06.2006 (или ещё раньше), а в качестве версии число меньшее, чем число, обозначающее версию встроенного драйвера. Концепция «встроенные драйвера имеют меньший приоритет» в таком случае проваливается.
В итоге получается, что по факту версия драйвера понятие второстепенное относительно понятия даты его разработки (что мягко говоря не прибавляет ему смысла), сами эти даты разработки как минимум для встроенных драйверов — вообще фикция для работы костыля, а сам этот костыль определения системой PnP приоритета использования сторонних драйверов всё равно получается полурабочим.

Браво Microsoft! :)
Я вот вообще не понимаю в чем проблема, как по мне хорошее решение ориентироваться на дату вшитую в инф-файл.

А так всё равно остаётся ненулевая вероятность того, что какая-нибудь «фирма» выпустит драйвер у которого в INF-файле дата разработки будет ...


Так же есть ненулевая вероятность неправильного прописывания любых идентификаторв, версии и т.п., но дата это имхо самое стандартное и очевидное поле, по которому можно хоть как-то ориентироваться в «свежести» драйверов. Объясните, в чем именно «костыльность» решения?
И как ориентироваться по «стандартному и очевидному полю», если оно может быть изменено / не изменено любой из «фирм» как её индусам заблагорассудится? Вон Microsoft, например, всем встроенным драйверам вне зависимости от их свежести / тухлости фигачит эту дату как одну и ту же — 21.06.2006. И всё для того чтобы они имели меньший приоритет при выборе системой PnP… дальше продолжите сами.
В чём заключается «костыльность»? Хм… я даже не знаю… может во всём?

Кстати, никакого «стандартного и вшитого поля» нет. Эта дата тире критерий отбора драйвера всего-лишь часть строки в текстовом файле с расширением *.inf, вида:
DriverVer=06/21/2006,10.0.14393.0
которая просто считывается PnP. То есть там скорее всего вообще никакой проблемы добавить какую угодно «метку встроенности» драйвера не было.
melman701 ниже подвёл итог:
Ввод дополнительного поля приоритета решает проблему. <...> Но этот метод не имеет преимущества перед тем, что использует Microsoft, кроме того, что не выглядит костылем. При этом он требует дополнительное поле.
Ввод дополнительного поля приоритета решает проблему. <...> Но этот метод не имеет преимущества перед тем, что использует Microsoft, кроме того, что не выглядит костылем. При этом он требует дополнительное поле.
… что и требовалось доказать :)

Кстати, «не имеет преимущества, кроме...» = «имеет преимущество»
Формулировка так себе, но сути это не меняет. Решение изящное по 3 причинам:
1) Решает поставленную задачу.
2) Не требует изменения устоявшихся стандартов и форматов файлов.
3) Позволяет делать разные хитрые штуки. Как в моем примере ниже.
А то что я, как разработчик, могу с легкостью заставить систему использовать мой драйвер, путем изменения даты — это +.
2) Не требует изменения устоявшихся стандартов и форматов файлов.
Не сказал бы что там прям уж такие жёсткие и устоявшиеся стандарты и форматы файлов (например, у некоторых драйверов от Logitech версии состоят из 3, а не 4 частей и т.д.). Опять таки с той же датой разработки сама Microsoft «играется» как хочет.
3) Позволяет делать разные хитрые штуки. Как в моем примере ниже.
А то что я, как разработчик, могу с легкостью заставить систему использовать мой драйвер, путем изменения даты — это +.
Вот только «откатить» подобное «насилие» вы скорее всего уже не сможете. См. пример подобной «хитрой штуки» в моём комментарии ниже.
И как ориентироваться по «стандартному и очевидному полю», если оно может быть изменено / не изменено любой из «фирм» как её индусам заблагорассудится?


Любое поле может быть изменено как заблагорассудится разработчику драйвера. Вот присваивать драйверу атибуты «встроенный» или сторонний — это точно костыль! А использование даты это принцип ранжирования всех доступных ОС драйверов (например при установке драйвера ОС натравили на папку, в которых их 10 штук, как тут выбрать лучший?). И сама ОС очень элегантно пользуется этой же системой ранжирования для установки рейтинга для своего драйвера.

У меня создается впечатление, что все злятся на Майкрософт за такое просто и элегантное решение, поэтому называют костылем :)
Любое поле может быть изменено как заблагорассудится разработчику драйвера.
Вот именно. Поэтому логично что-либо менять исключительно в «своих», подконтрольных тебе же, как разработчику, драйверах (что Microsoft, впрочем, и сделала). То есть не использовать «общие» поля (тем более имеющие весьма косвенное отношение к приоритету использования этого драйвера), а маркировать уникальными метками, присущими только этим «обособляемым» драйверам.
Вот присваивать драйверу атибуты «встроенный» или сторонний — это точно костыль!
Хм… почему костыль-то? Эта прямое решение задачи, которую Microsoft себе же и поставила — пометить «встроенные» драйвера для понижения приоритета их использования.
… например при установке драйвера ОС натравили на папку, в которых их 10 штук, как тут выбрать лучший?
Ну, если завтра какой-либо производитель напишет драйвер и случайно в его INF-файле поставит что-нибудь вроде 11.02.3017 (ну вот дрогнула у хирурга рука :) ), то этот драйвер будет «лучшим» ближайшие 1000 лет и если в нём надо будет залатать что-нибудь, то можно хоть «запатчится» в доску, а толку будет ноль, пока не поставят новому драйверу дату, например, 12.02.3017, ну или 11.02.3017, но с более свежей версией (так и пойдёт эта ерунда дальше, уже не остановишь :) ) Элегантно.
У меня создается впечатление, что все злятся на Майкрософт...
А у меня создаётся впечатление, что многие опять зачем-то тащат сугубо технический вопрос в какую-то эмоциональную плоскость из разряда злятся / не злятся, любят / не любят, Microsoft / Apple и тому подобное :)
Так главная «изюминка» информации — это принцип ранжирования всех доступных ОС драйверов, свой-чужой это только часть процесса, причем далеко не самая важная.

Ну, если завтра какой-либо производитель напишет драйвер и случайно в его INF-файле поставит что-нибудь вроде 11.02.3017...


И ничего не случится. Он не получит цифровую подпись драйвера от Майкрософт и все на этом. Такой драйвер не установится просто так. Вы упускаете из виду всю картину, а зациклились на «костыле» для «своих» драйверов. Если же пользователь на столько умный, что сможет установить такой драйвер без подписи, то все, о чем здесь пишут, просто не имеет никакого значения.
Он не получит цифровую подпись драйвера от Майкрософт и все на этом.
Почему? Не получит на основании того, что дата разработки не соответствует действительности? ;)
А если я, как разработчик скажу, что это в свою очередь у меня уже такое элегантное решение назрело, которое даёт наивысший приоритет моему драйверу именно этой версии (ну хочется мне так)? Неужели Microsoft скажет что-нибудь вроде: «Вам, в отличие от нас, такие элегантные костыли решения делать низя и не спорьте»? :)
Сегодня, ради интереса изменил дату в драйвере к девайсу. Плюсанул день. Попробовал накатить. Получилось. Драйвер обновился. Я еще плюсанул день и попробовал обновить, но ОС сказала, что более новая или такая же версия уже установлена. Следовательно, можно предположить, что система берет дату изменения файла.
Такая экспериментальная методология сильно напоминает старый анекдот.
Ок, почему тогда нельзя заменить стандартную дату на пометку типа «этот драйвер от майкрософт»? Лучше уж совсем не видеть даты чем видеть торчащий костыль понятный только индусам из МС.
Скорее всего, потому что поле «Дата разработки» не может быть ни чем иным кроме как числом, которые вне зависимости от его значения всё-равно «воспринимается» как дата.
Например, «поставив» туда «0» или даже ничего не поставив, вы всё-равно получите какую-то дату (скорее всего начало «Unix Epoch» — 01.01.1970).
Поэтому «пометить» можно только числом-датой, что и сделали — «пометили» датой 21.06.2006.
Так в чем проблема «метить» двумя полями? Флагом с вендором и датой. Усё, никаких веселых костылей.
Непредсказуемо, как сторонний вендор заполнит это поле.

Сторонний вендор заполнит это поле так, чтобы их драйвер работал.

Лучше уж совсем не видеть даты чем видеть торчащий костыль

До этой статьи вы хоть раз смотрели на «дату разработки драйвера»? Я — нет.
Этот «торчащий костыль» на самом деле спрятан глубоко под капотом, куда не полезет никто, кроме «индусов», которые знают, в чём дело.
А почему нельзя явным образом указать используемый драйвер?
Потому что PnP же.

Plug and Play (сокр. PnP), дословно переводится как «включил и играй (работай)» — технология, предназначенная для быстрого определения и конфигурирования устройств в компьютере и других технических устройствах. Изначальная технология называлась NuBus и была разработана Western Digital. Шина NuBus позволяла добавлять устройства и настраивать их программными средствами. Технология PnP основана на использовании объектно-ориентированной архитектуры, её объектами являются внешние устройства и программы. Операционная система автоматически распознает объекты и вносит изменения в конфигурацию абонентской системы.


Ваш капитан.
Это все понятно, но сейчас, по сути, выбирается рандомный драйвер. Так чем хуже будет вариант если пользователя спросят какой драйвер использовать? Или хотя бы намекнут, что их больше одного.
Для 99.9% пользователей Windows запрос «какой драйвер использовать?» — это клингонщина, и они точно так же бы тыкали наугад, только ещё бы и техподдержку донимали звонками «у меня тут что-то непонятное вылезло, помогите!»
Вин10 однажды раскалила мой пукан до температуры солнца. Прилетает обновление и автоматом устанавливается какой-то вимикро драйвер хотя у меня вообще А4 вебка. В результате камера отваливается. Снёс этот вимикро вернул всё в зад всё снова взыграло но! При каждом обновлении винда по прежнему настойчиво притягивает этот долбаный вимикро! Ну нет у меня в железе никакого вимикро!

Уууууу, этот вимикро — это отдельный видео сервер ддя аеб камеры — они поломали до половинв всех веюок! Была статья эпичная нп гигтаймс

НЛО прилетело и опубликовало эту надпись здесь
Можно поставить запрет на установку дров. Очевидно винда неверно идентифицирует камеру, следовательно и тащит чужой драйвер.
Держите, это должно помочь с охлаждением :)

Костыль святого Грааля, я наконец-то нашёл тебя!


А вообще забавно, что Майкрософт не догадались решить проблему самым здравым способом — предоставить пользователю возможность выбора. Грубо говоря, при установке дров на устройство спрашивать "заменять драйвер на свежий, если такой появится в Windows update?"

Какой именно «возможности выбора» вам не хватает? После установки кастомного драйвера вам не хватает вопроса «снести этот драйвер при первой же возможности, когда в Windows Update обновится стандартный драйвер»?

Напоминаю, что вы в любой момент можете зайти в Device Manager и выбрать вместо любого драйвера любой другой. Этой возможности выбора недостаточно?
Я хорошо знаком с этой возможностью и при необходимости ею пользуюсь. Но назвать ее интуитивной язык как-то не поворачивается. К тому же, Win10 имеет обыкновение самостоятельно заменять выбранный драйвер на свой.
Драйвер сам по себе не интуитивная вещь и их настройка спрятана настолько глубоко, что туда лезут только самые упоротые опытные.

Вы, безусловно, правы. И именно поэтому система должна не пытаться их перемудрить и самостоятельно заменять драйверы по какой-то нелинейной логике, а предлагать юзеру решать самому.

Костыль, возведенный в ранг идола.

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

"Новый фирменный" можно же просто не ставить :)

Я тут подумал а смог бы я сделать лучше/проще/надежнее и понял что вряд ли. Много вариантов предложили в комментариях, но ни один не решает всех возможных проблем и сценариев, либо все так же скатывается к проверке даты.
Семь раз отмерь — один отрежь.

Так все же костыль или изящное решение? Подытожим.
Система работает так, что всегда будет использовать драйвер от производителя, если он есть.
  • На версию драйвера полагаться система не может, т.к. с версиями полная неразбериха даже у производителей.
  • Приоритет по поставщику драйвера выглядит правильным. Но такой подход не сработает, если в составе ОС идет драйвер, поставщиком которого является не Microsoft. Может быть такое или нет, я не знаю.
  • Ввод дополнительного поля приоритета решает проблему. Драйвера поставляемые с ОС имеют приоритет ниже, чем у драйверов производителя оборудования. Но этот метод не имеет преимущества перед тем, что использует Microsoft, кроме того, что не выглядит костылем. При этом он требует дополнительное поле.

Таким образом, используемый Microsoft способ выглядит самым оптимальным. Я бы даже сказал, что он очень хорош!
Рассмотрим пример:
Вы установили ОС Windows и для некоторого оборудования, например, Wi-Fi был установлен драйвер из состава ОС.
Далее вы устанавливаете драйвер от производителя Wi-FI датированный 16.02.2016. Система начинает использовать этот драйвер. Но в мае 2016 года в драйвере обнаружена серьезная уязвимость или проблема и производитель ее не закрывает. При этом драйвер из состава ОС либо не имеет этой проблемы, либо она закрыта в обновлении. Тогда Microsoft может изменить в своем драйвере дату на 17.02.2016. Система начнет использовать этот драйвер и проблема будет решена.
Позже производитель может выпустить драйвер с исправлением, датированный позже, чем 17.02.2016.
Способ хорош? Не имеет недостатков, кроме как плохо выглядит? Серьёзно? Вы, случаем не из MS? И этот комментарий заплюсован?

Давайте я подскажу поверхностные проблемы этого подхода:
  • Крайне неожиданно, но юзер не может узнать дату релиза драйвера из предназначенного для этого меню. Удивительная логичность ситуации: пункт «Дата разработки» есть, а реальной даты нет. Не смущает?
  • Хуже того (и да, достойно отдельного пункта) «дата» вводит в заблуждение неподготовленного человека. Этот «атата» можно исправить независимо от предыдущего пункта, например, очередным костылем: видишь специальную дату, отображай «нет инфы» или что-нибудь поинтересней в соответствующем поле
  • Это решение очень плохо поддерживаемое. Разработчик не может довериться логике названия поля, нужно знать особенность системы: даты не просто так, а в них может крыться спец смысл. При смене поколений девелоперов, новый может быть не посвящен в эти таинства, в результате чего мы будем обсуждать очередную статью «свежие системные драйвера неожиданно имеют приоритет выше вендорских», а человек всего лишь сделал доброе дело и поставил наконец нормальную дату в описание нового драйвера


Система может быть проста, последовательна и логична. Дата обозначает дату, флаг «системный» — источник драйвера. Я могу понять, когда программисты суют костыли по причине острой нехватки времени и/или квалификации, но вот людей, которые целенаправленно этот подход одобряют- увы, не в состоянии.

Что вас останавливает от более широкой трактовки даты в таком случае? Почему бы четным годам до 2006 не поставить в соответствие, скажем, наличие в драйвере поддержки режима X, а месяцем «декабрь» отмечать те, что являются краткосрочными и будут скоро обновлены? А дату «29 февраля» интерпретировать как «заглушка драйвера с минимально возможным функционалом»? Красота такого решения, надо полагать, будет непревзойденной: ни одного лишнего флага вводить не придется.

P.S. писать на GT через неделю после публикации сродни некропостинку, но я, как человек из sustain команды, проклинающий авторов подобного кода до 7 колена включительно, не могу смотреть на то, какой пример вы показываете детям оставляете будущим читателям.
Смешно :)
1) Мне ни разу не было необходимости смотреть дату системного драйвера. Зачем она мне?
2) С программистом вообще надуманная проблема.
Вы упускаете суть.
Во-первых, это не руководство как надо делать, а пример того как они вышли из сложившейся ситуации.
Во-вторых, ОС, после нахождения лучшего совпадения железа, расставляет приоритет драйверов по дате. Так почему бы этим не воспользоваться?
P.S. Костыль это или фича — вопрос чисто религиозных предпочтений.
Мне ни разу не было необходимости смотреть дату системного драйвера. Зачем она мне?

Ну раз вам не надо, то и никому не надо, очевидно же. Вот же майкрософтовцы, напридумывали полей пользователям отображать почем зря, но потом исправились и стали отображать их неверно. Очень правильный подход.

Я вот еще раз переспрошу, ну, на всякий, вас точно не смущает, что окошко дату типа отображает, но делает это некорректно? Это модная фича? Разумный подход? Или зависит от религиозных предпочтений?

С программистом вообще надуманная проблема.

Да не говорите, работая в sustain ни разу не возникало трудностей с неожиданным и нетрадиционным использованием данных. А, нет, подождите, возникало. Вот недавно всплыл баг из-за того, что isPasswordEmpty неожиданно определял не только наличие пароля, но и предпочитаемый тип хеша для его сохранения, а дизайнер, который правил этот участок, особенностей кода не заметил. Нет бы флаг изначально добавить для этой функциональности, не было бы беды. Но на хак с датами драйверов ни капельки не похоже, да.

Вообще, костыль является эталонным в том плане, что он на ровном месте делает логику программы неочевидной одновременно и пользователям и разработчикам. Обычно вредят только одной из сторон.
Расскажите, для чего вам реальная дата драйверов из состава ОС?
что окошко дату типа отображает, но делает это некорректно

Дата отображается корректно, но не та, которую вы, возможно, ожидаете увидеть.

Ваш пример не корректен. Тут дата осталась датой, и не несет дополнительной информации о погоде в Редмонде.
Если компания ставит на проект программиста, предварительно, не ознакомив его с соглашениями, принятыми в данном проекте, то это проблема чья угодно, но не программистов которые писали проект.

Расскажите нам, как нужно было решить проблему с приоритетом?
Расскажите, для чего вам реальная дата драйверов из состава ОС?

Есть очень классный, естественный, а главное простой подход: информация не нужна — не показывай, показываешь — показывай корректно. Даже если считать дату релиза излишней (с чем я несогласен) текущий вариант ни разу не оправдан.

Оффтопик: Почему несогласен? Дата релиза это быстрый способ оценить «насколько драйвер свежий». Если у меня глючит девайс, то глянуть инфу по использующемуся драйверу — один из естественных шагов сбора данных о проблеме. И, обнаружив в системе окаменелости 2006 года, я полезу вбивать в гугл «почему оно не обновляется», т.е. решать несуществующую проблему.

Дата отображается корректно, но не та, которую вы, возможно, ожидаете увидеть.

Я это в рамочку повешу. Смотришь в поле «Дата разработки» и видишь дату, которая не является датой разработки, но отображается, безусловно, корректно.

Ваш пример не корректен. Тут дата осталась датой, и не несет дополнительной информации о погоде в Редмонде.
Это, простите, как? Дата перестала быть датой релиза драйвера от слова совсем, а превратилась в метод назначения наименьшего приоритета. Хотя да, погоду в Редмонде туда пока не засунули.

Если компания ставит на проект программиста, предварительно, не ознакомив его с соглашениями, принятыми в данном проекте, то это проблема чья угодно, но не программистов которые писали проект.

Если программист пишет костыльный непродуманный связный неустойчивый плохо поддерживаемый код, который требуется разъяснять всем новоприбывшим (что, кстати, технически невозможно: в крупных проектах разъяснение ВСЕХ костылей займет времени заведомо больше времени жизни отдельно взятого разраба, что никак не оправдывает написание новых костылей), то это называется чудесным термином технический долг и является достаточно тяжелой ношей для кармы и совести программиста (при наличии последней, конечно же). У компании в этой ситуации, впрочем, тоже есть проблемы: организация сроков и метрик, вероятно, подталкивает к быстрым непродуманным фиксам, а практика code review недостаточно развита, чтобы настучать автору по рукам.

Достаточно писать логичный самодокументированный код, в котором дата релиза это реально дата релиза, и никаких разъяснений новоприбывшим не потребуется, никаких потенциальных факапов не будет заложено, никаких статей на GK не будет выложено. Но да, для этого требуется и подумать подольше, и покодить побольше, что сложно.

Расскажите нам, как нужно было решить проблему с приоритетом?

Концепт без специфики. При установке драйвера есть некий источник (набор источников?), откуда система получает о нём информацию (версию, дату, whatever). Источник контролируется автором дров. Очевидно, в нём не хватает информации о приоритетности драйвера. Следовательно, формат этого источника необходимо расширить необязательным полем «low_priority_source». При отстутсвии такого поля или при значении false считать драйвер нормальным вендорским, в противном случае ставить как системный.
НЛО прилетело и опубликовало эту надпись здесь
хотя некоторые скажут, что у них всё нормально устанавливается и работает

Потому что так оно и есть. Однако много зависит от типа устройства, когда на ПК редко возникают ошибки, то на ноутбуках этот процент выше, а про планшеты и подавно.
Эти утилиты призваны облегчить установку драйверов, но никак не «запустил и оно само дальше», чего многие не понимают. Хотя DriverPack Solution как раз пытается сделать всё само и предоставляет минимум возможностей для управления установкой. Да и принципы работы у нее в лучших традициях вредоносного ПО — установим чего ты хочешь(скорее всего), а еще программы «полезные» и в автозагрузку!..
Прочел комментарии…
В массе, «махровые» «виндоузятники»!
Как вам такой пример: Ставим в две доступные PCI CM8737(да, не тридцать восемь)
Windows «крашится» еще на стадии установки(думается МНЕ, что и установленный работать не будет, ибо ID на шину и устройство ОДИН)
«Поднимаем» риск-диск линуха, и что видим: HW0 и HW1 устройства в наличии — можно «тупо» rmmod снести «неугодное».
Линь за последние пару лет в плане драйверов вообще не слабо так подтянулся.
Я с 2004-ого «под линухом».
Проблем драйверов не замечал.
А, да, интегрированные ICH9-сетевухи порой «любят мозг». Поднять модуль ядра — дело нескольких секунд.(не про пересборку(на моем i3,4Gb уходит около сорока минут — сейчас 4.9.7))
А я регулярно вижу проблемы с драйверами. Несчастный ath9k отваливается от обновления к обновлению. С mpt2sas порой творится что-то непотребное. Да что там, вот приехала китайская беспроводная мышка. Под виндой мгновенно и без проблем заработала. Под линуксом почему-то курсор реагирует на эту мышь с задержкой в секунду (и на xfce, и на kde).

И эти бесконечные пляски с nvidia-drivers…

В общем-то, я далек от мысли восхвалять лишь Win (или Linux), просто меня удивляют восторженные пользователи с обеих сторон, у которых мистическим образом абсолютно все и всегда работает. Понятно, что можно долго спорить, что лучше — глючный и тормозной центр обновления Windows или глючный и тормозной Portage, мейтейнеры которого считают зря прожитым день без добавленных в основное дерево конфликтов и кривых зависимостей, но зачем отрицать наличие проблем?

Пожалуй, я бы сказал так: Linux создает больше проблем, но зато позволяет их решить.
nvidia-drivers

Даже не поспоришь!
На ядро выше 4.4.4 не накатишь драйвер для старухи GT 9800, только nouveau. А оное убрали из дерева. Целая пачка сорок четвертой серии от 39 до 48 включительно, а 4.4.0 нету.
китайская беспроводная мышка

Нет windows — нечем проверить. С отечественным производителем(DEXP) «борюсь» xmodmap в ~/.xinputrc
Мыша же не от оболочки зависит вроде. У мя беспроводная jet-a вполне адекватно работает что под вин что под линь. Другое дело что вдруг, совершенно нормально взыграли драйвера невидии в гибридной графике. Что самое интересное умудряются показывать фпс чуть больше виндовых но при этом так и не победили тиринг.
Это доказывает, что вся винда сделана через жопу, но странным образом всё же работает, а её код не открывают, чтобы весь программистский мир не стебался и не ржал над этой кривизной. Проще говоря, стыдно. В человеческом языке не зря есть понятие красоты и гармонии. Когда говорят о том что решение красиво (не только о коде), то это подразумевает нечто категорично отличное от «глупо но работает, значит это не глупо».
НЛО прилетело и опубликовало эту надпись здесь
Почему по одному? Были и другие примеры, а как всё устроено досконально — никто не знает — они ж не показывают! Не думаю что для высказывания своего мнения, я должен был приводить весь список «странностей» винды. Но если вы просите, вот на вскидку две. В локальной сети несколько десятков компьютеров и сервер. Все в одной рабочей группе. На сервере заведен унверсальный юзер с правами на чтение. Часть компов могут зайти на сервер с этой учеткой, у части вылетает отказ авторизации… хоть тресни!
Еще одна — развернул архив с файлами, созжанными на маке. Файлы оказались «зашифрованными» — отображаются зеленым. Но никакого пароля не надо — открываются. Невозможно сменить атрибут шифрования! Владельцем числюсь я со всеми правами (и еще пару раз так и сяк менял владельца и назначал права) — не может убрать атрибут шифрования!
И такое встречается регулярно. Вот и эта статья добавила шар на чашу весов.
НЛО прилетело и опубликовало эту надпись здесь
Это не странности, просто вы не прочли всю документацию до конца. Какой смысл снимать атрибут шифрования с файла который был однажды зашифрован? Его случайно зашифровали и теперь уже не надо? Если бы был простой способ снять этот атрибут(на самом деле должна быть целая процедура! это не один байт изменить, ведь потребуется расшифровать файл сначала, сохранить его в новом месте и удалить старый) то смысла в шифровании небыло бы НИКАКОГО. Щеколда на сейфе, ага. На само деле, в ваш профиль просто был скопирован ключ которым зашифрован файл, и его открытие происходит прозрачно. Если кто откроет этот файл извне операционки прямым доступом к диску он не сможет его прочитать — в этом смысл «шифрования» файла.
Но есть простой способ расшифровать его — открыть в программе на редактирование и сохранить под другим именем уже без шифрования. Или для копирования использовать сторонние программы, которые не будут копировать шифрованный поток.

Да нет, это именно что странности. Какой смысл при распаковке файлов из архива автоматически делать их зашифрованными?

Вот ты пытаешься что-то объяснить мне, когда сам не понимаешь сути! К твоему сведению процесс шифрования и аттрибут управляются в винде точно так же как и сжатие (слышал про сжатые папки?) и галка такая в свойствах папки есть. Т.е. поставил галку, нажал Ок — пошел процесс сжатия/шфровки/расшифровки. Что там и куда на новом месте сохранится, а что сотрется пользователю как раз параллельно. А теперь обрати внимание, что ты даже непрочитал (или не понял) что произошло. Файл этот взят с другого компа и если бы он был зашифрован на самом деле, то я бы его просто не смог открыть. Вернее не я, а программа, т.к. это не какие-нибудь картинки или тхт-шки, а файлы данных к программе в её собственном формате — мне их редактором открывать и менять не нужно и нельзя. Так вот они программой подхватываются без проблем (чего не должно быть, если бы файл был зашифрован), а атрибут сменить нельзя — возникает ошибка. Вот такая вот загадочная винда.
Я же и говорю, вы не разобрались до конца как работает система прав в виндовс.
Файл остаётся зашифрованным на НОСИТЕЛЕ, но для программ выполняющихся из-под твоей учетки это абсолютно прозрачно — они видят его незашифрованным. Просто у вас есть права на этот файл, и вместе с ними ключ для дешифровки который привязан к учетке. Попробуйте файл вынести на FAT32 и всё это пропадёт к чертям.
Все эти странности — лишь от непонимания как работает на самом деле система разграничения прав. Иногда нужно действительно нашаманить чтобы сделать так как требуется, но это лишь от непонимания как работает система прав.
Хочется процитировать Задорнова. Ну очень! Откуда у меня права и ключ, когда файл создан на компьютере, не имеющего никакого отношения ко мне? И с какого черта функция шифровки не работает, а выдает ошибку? До -конечно от того что я идиот и не понимаю как работает винда! Гениально! Но пожалуйста, с такими «гениальными» поучениями не ко мне.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории