Что такое драйверы утилиты
Многие считают что самому создать драйвер для Windows это что-то на грани фантастики. Но на самом деле это не так. Конечно, разработка драйвера для какого-то навороченного девайса бывает не простой задачей. Но ведь тоже самое можно сказать про создание сложных программ или игр. В разработке простого драйвера нет ничего сложного и я попытаюсь на примерах это показать.
Сперва нам нужно определится в чем мы же будем создавать наш первый драйвер. Поскольку материал ориентирован на новичков, то язык программирования был выбран один из простых, и это не Си или ассемблер, а бейсик. Будем использовать один из диалектов бейсика — PureBasic. Из коробки он не обучен создавать драйверы, но у него удачный набор файлов, используемых для компиляции и небольшое шаманство позволяет добавить эту возможность. Процесс компиляции состоит из нескольких этапов. Если кратко, то он происходит следующим образом: Сначала транслятор «перегоняет» basic-код в ассемблер, который отдается FASM'у (компилятор ассемблера), который создает объектный файл. Далее в дело вступает линкер polink, создающий исполняемый файл. Как компилятор ассемблера, так и линкер могут создавать драйверы и если немного изменить опции компиляции, то получим не исполняемый файл, типа EXE или DLL, а драйвер режима ядра (SYS).
Окно IDE с загруженным кодом драйвера показано на скрине.
Компиляция драйвера выполняется через меню «Компилятор» (это если кто не понял).
Теперь определимся что будет делать наш первый драйвер. Обычно при изучении программирования начинают с простых вещей, скажем, выполнения математических операций и вывода результата. Вот пусть наш драйвер делает тоже самое, ведь банальная математика производимая в режиме ядра это очень круто!
Может показаться что это куча бессмысленного кода, но это не так.
У каждого драйвера должна быть точка входа, обычно у нее имя DriverEntry() и выполнена она в виде процедуры или функции. Как видите, в этом драйвере есть такая процедура. Если посмотрите на начало кода, то в первых строках увидите как ей передается управление. В этой процедуре происходит инициализация драйвера. Там же назначается процедура завершения работы драйвера, которая в нашем случае имеет имя UnloadDriver(). Процедуры CreateDispatch() и CloseDispatch() назначаются обработчиками соединения и отсоединения проги из юзермода.
Процедура DeviceIoControl() будет обрабатывать запросы WinAPI функции DeviceIoControl(), являющейся в данном драйвере связью с юзермодом. В конце кода расположена так называемая ДатаСекция (DataSection), в которой находятся имена драйвера, сохраненные в формате юникода (для этого использована одна из фишек ассемблера FASM).
Видите сколько понадобилось кода для выполнения простейшей математической операции — сложения двух чисел?
А теперь рассмотрим программу, работающую с этим драйвером. Она написана на том же PureBasic.
Процедура Plus() осуществляет связь с драйвером. Ей передаются хэндл, доступа к драйверу и слагаемые числа, которые помещаются в структуру и указатель на указатель которой, передается драйверу. Результат сложения чисел будет в переменной «Result».
Далее следует код простейшего GUI калькулятора, скопированного из википедии.
Когда закроют окно, то перед завершением работы программы, закрывается связь с драйвером и производится его деинсталляция из системы.
Результат сложения чисел 8 и 2 на скриншоте.
Исходные коды драйвера и программы, можно найти в папке «Examples», PureBasic на файлопомойке, ссылку на который давал в начале статьи. Там так же найдете примеры драйвера прямого доступа к порам компа и пример работы с памятью ядра.
PS.
Помните, работа в ядре чревата мелкими неожиданностями аля, BSOD (синий экран смерти), поэтому экспериментируйте осторожно и обязательно всё сохраняйте перед запуском драйвера.
По всей видимости, большинство пользователей знает о том, что для всех современных компьютерных устройств предусмотрено использование специализированных программ, часто называемых драйверами и утилитами. Вот только разницу между двумя этими категориями программного обеспечения понимают далеко не все начинающие юзеры. Давайте попробуем разобраться, что они собой представляют, для чего нужны и как использовать их в практическом отношении.
Что такое драйвер?
Начнем с понимания самих терминов и первым делом остановимся именно на драйверах. Что такое драйвера для компьютера?
Исходя из официальных трактовок, которые можно найти в интернете, драйверы представляют собой особый тип программного обеспечения, предназначенный для корректного взаимодействия и операционной системы, и прикладных программ со всеми «железными» и некоторыми виртуальными компонентами, установленными в компьютерной системе. Если хотите, это своего рода прослойка или мост, соединяющий оборудование (Hardware) с программной средой (Software). При этом драйверы могут выполнять не только роль соединителей, но еще нередко выступают в качестве управляющего ПО, которое позволяет производить некоторые настройки установленных устройств.
Что такое утилита в компьютере?
Под утилитами чаще всего понимают отдельный вид программного обеспечения, предназначенного для обслуживания компьютерной системы во всех направлениях.
Например, системные утилиты позволяют производить диагностику компьютерной системы, причем и аппаратной, и программной части, а затем либо устраняют возможные сбои и неполадки самостоятельно, либо предлагают наиболее оптимальное решение по исправлению ошибок, либо оптимизируют систему и ее компоненты на всех уровнях и т. д. Вообще, к классу утилит можно отнести множество инструментов, однако нередко среди них можно встретить даже комбинированные решения.
Для чего нужны драйверы и утилиты? Комбинированные наборы.
Итак, как уже было сказано, основное предназначение драйверов – обеспечение взаимодействия «железа» с программной частью компьютера, а утилит – обслуживание и/или оптимизация системы. Но иногда можно встретить и объединение драйверов и утилит в одно целое. Проще всего понять структуру таких наборов можно на примере установки управляющего ПО графических адаптеров.
Вы замечали, что в процессе инсталляции драйверов для дискретных видеокарт, например, NVIDIA устанавливается не только основной драйвер, но еще и несколько сопутствующих приложений, среди которых можно встретить специальную панель управления или оптимизаторы для тонкой настройки ускорителей в играх? «Панель управления» NVIDIA в данном случае позволяет оптимизировать не всю компьютерную систему, а только отдельно взятый компонент – видеокарту. То есть получить доступ к опциям ее работы средствами Windows невозможно, а вот за счет применения такого ПО как раз и можно выполнить тонкую настройку оптимального режима. И это далеко не единственный пример.
Примеры обслуживающих программ
С общим пониманием драйверов и утилит ясность внесена. Теперь остановимся именно на обслуживающих программах. Направлений в их применении можно найти достаточно много. Среди основных можно выделить и средства системы, и сторонние приложения, предназначенные для поиска или устранения неисправностей, средства проверки и очистки дисков или памяти, оптимизаторы системы, позволяющие ускорить работу ОС за счет отключения ненужных служб и процессов, антивирусные утилиты для проверки системы на предмет наличия угроз, программы для настройки отдельных программных или «железных» компонентов, приложения, следящие за своевременным обновлением программ или драйверов, инструменты для полного удаления программ вместе с остатками и т. д. Абсолютно все перечислить невозможно даже в принципе. Однако в качестве наиболее яркого примера обслуживающего ПО можно привести так называемые программы-оптимизаторы, которые позволяют выполнять комплексный уход за системой с использованием автоматического режима.
Самыми популярными можно назвать приложения вроде CCleaner, Advanced SystemCare, Windows Manager и т. д. Такие программы умеют выявлять проблемы с системным реестром, отключать ненужные системные компоненты и процессы для ускорения работы компьютера, удалять компьютерный мусор, выполнять проверку и дефрагментацию жестких дисков и съемных носителей, тестировать или оптимизировать использование оперативной памяти, удалять приложения целиком и полностью, и многое другое.
Программы для автоматической установки драйверов
Отдельного внимания заслуживают утилиты для поиска и установки драйверов, которые в большинстве своем практически полностью автоматизированы. Их применение выглядит совершенно логичным. Согласитесь, ведь искать и устанавливать необходимое программное обеспечение для каждого устройства самостоятельно – адский труд, особенно если учесть, что драйверы могут понадобиться не только для «железа», а и для некоторых виртуальных устройств. Применение же таких программ позволяет решить эту проблему в два счета. Отдельно стоит сказать, что многие из них, в частности, популярный пакет DriverPack Solution, имеют намного более обширную базу данных драйверов, нежели операционная система, и могут находить и устанавливать драйверы даже для большого числа нестандартного оборудования, поддержка для которого корпорацией Microsoft не заявлена.
Также весьма интересно смотрятся приложения наподобие Driver Booster, служащие для автоматизации процессов обновления драйверов и поддержания их в актуальном состоянии (сама Windows за апдейтом управляющего ПО не только не следит, но и выполняет его по требованию с грехом пополам). Приложения этой категории обращаются исключительно к официальным интернет-ресурсам производителей оборудования или разработчиков драйверов, что исключает проникновение в систему вирусов, загружают драйверы и интегрируют их в систему без участия пользователя. От него требуется всего лишь дать согласие на установку обновлений.
Заключение
Все вышесказанное лишь в очень малой степени отражает всю информацию о сфере применения драйверов и утилит, однако с пониманием предназначения такого программного обеспечения, думается, ни у кого вопросов не возникнет. Какие применять оптимизаторы или приложения, работающие с драйверами, советовать достаточно трудно, поскольку тут каждый выбирает для себя именно то, что ему подходит лучше всего. И важную роль в этих вопросах играет каждая конкретная ситуация. Грубо говоря, сначала нужно определиться, какие именно действия необходимо выполнить, и затем искать для себя наиболее приемлемое решение в виде какой-то программы.
Пользователи знают, что для корректного функционирования абсолютно всех составляющих компьютера, называемых иногда «железом», и некоторых виртуальных устройств в системе должно присутствовать специальное программное обеспечение, называемое драйвером. Но что же такое драйвер устройства? Ответ на этот и некоторые другие вопросы можно найти в материале, приведенном ниже.
Драйвер: это что такое в общем понимании?
Можно было, конечно, приводить огромное количество технических терминов и определений по поводу того, что собой представляют управляющие программы такого типа, но рядовому пользователю это не нужно. Поэтому будем говорить, так сказать, человеческим языком.
Общепринятая трактовка данного термина говорит, что драйвер – это программа, которая позволяет операционной системе идентифицировать «железное» или виртуальное устройство и сделать его работоспособным в компьютерной среде. Но это только одна сторона медали. На самом деле можно сказать, что драйвер – это некий мост, связывающий сам «железный» или виртуальный компонент компьютера с операционной системой и установленными в ней приложениями, а в конечном итоге – с пользователем.
Вопросы установки драйверов устройств
Теперь несколько слов об установке. Поскольку драйвер – это связующее звено между аппаратной частью компьютера и имеющейся программной средой, для каждого устройства такое программное обеспечение должно быть установлено в обязательном порядке (иначе работать оно не будет, или его функциональность будет нарушена).
Windows-системы инсталлируют основные драйверы еще на стадии своей установки, определяя устройства автоматически. Но это срабатывает не всегда, и порой в системе остаются неопознанные компоненты, для которых в собственной базе данных системы, увы, подходящего программного обеспечения не нашлось. Что делать в этом случае?
Первым делом необходимо просмотреть весь список установленного оборудования в «Диспетчере устройств», который проще всего вызвать командой devmgmt.msc через консоль «Выполнить». Также можно воспользоваться стандартной «Панелью управления» или разделом администрирования через меню ПКМ на значке компьютера.
Чтобы увидеть все устройства, список необходимо развернуть, используя для этого команду показа скрытых девайсов. Все оборудование, для которого драйверы не установлены, устарели или работают неправильно, будет отмечены желтым треугольником с восклицательным знаком. В описании может быть два варианта: либо устройство опознано (его название отображается), либо нет (неизвестное устройство). Для таких компонентов необходимо инсталлировать соответствующее ПО заново, используя для этого собственную базу данных системы, а если драйвер найден не будет - оригинальный диск, поставляемый при покупке компьютера. Но ведь случается так, что диска может и не быть.
Как и где найти нужный драйвер, если в Windows его нет?
Например, в системе отсутствует сетевой драйвер. Для большинства сетевых адаптеров Ethernet управляющее ПО устанавливается без проблем. Но в случае с нестандартным оборудованием или сетевой картой от малоизвестного производителя его может и не оказаться. Придется скачивать драйвер самостоятельно. Но как найти именно то, что нужно?
Для этого предусмотрены специальные идентификаторы, которые соответствуют конкретному устройству (DEV и VEN). Чтобы их найти, необходимо через ПКМ в меню свойств вызвать раздел свойств и перейти на вкладку сведений, где в информационном списке выбирается ИД оборудования. Самая длинная строка и будет в полной мере соответствовать описанию устройства. Таким образом, тот же сетевой драйвер можно найти в интернете, задав в поиске именно эту комбинацию.
После скачивания драйвер можно установить самостоятельно. Если это EXE-файл - проблем нет, только запускать инсталлятор необходимо от имени администратора.
В случае с INF-файлом драйвер можно установить через меню ПКМ или указать системе установку из указанного места при обновлении драйвера в «Диспетчере устройств».
Использование автоматизированных утилит
Однако, как показывает практика, даже поиск по идентификаторам может не дать желаемого результата. Но где-то же драйвер должен быть? Ведь такое управляющее ПО выпускается для всего оборудования без всяких исключений (иначе бы оно и в продажу не попало).
Здесь на помощь приходят специализированные программные пакеты для автоматического поиска и установки драйверов вроде Driver Booster, DriverPack Solution и им подобные. А вот такие утилиты, определив все устройства, которые присутствуют в компьютерной системе, обращаются не к собственным или сторонним базам данных, а непосредственно к ресурсам производителей оборудования и разработчиков соответствующего программного обеспечения, загружая и устанавливая его без видимого участия самого пользователя (его участие сводится только к тому, чтобы согласиться с предложением инсталляции или обновления). Плюс ко всему, эти программы следят за актуальным состоянием драйверов, постоянно проверяя выход новых версий (чего Windows при всем уважении к этим системам делать не умеет).
Заключение
Вот теперь уже понятно, что драйвер – это обязательный к установке компонент программного класса, без которого ни одно устройство операционной системой распознано не будет, не говоря уже о работоспособности самого «железа». О виртуальных устройствах можно сказать только то, что они являются некими аналогами «железных», выполненными в виде неких эмуляторов, но, по сути, их функциональность тоже зависит от наличия и корректной установки управляющего программного обеспечения, называемого драйверами.
Как уважаемый хабрапользователь наверняка знает, «драйвер устройства» — это компьютерная программа управляющая строго определенным типом устройства, подключенным к или входящим в состав любого настольного или переносного компьютера.
Основная задача любого драйвера – это предоставление софтового интерфейса для управления устройством, с помощью которого операционная система и другие компьютерные программы получают доступ к функциям данного устройства, «не зная» как конкретно оно используется и работает.
Обычно драйвер общается с устройством через шину или коммуникационную подсистему, к которой подключено непосредственное устройство. Когда программа вызывает процедуру (очередность операций) драйвера – он направляет команды на само устройство. Как только устройство выполнило процедуру («рутину»), данные посылаются обратно в драйвер и уже оттуда в ОС.
Любой драйвер является зависимым от самого устройства и специфичен для каждой операционной системы. Обычно драйверы предоставляют схему прерывания для обработки асинхронных процедур в интерфейсе, зависимом от времени ее исполнения.
Любая операционная система обладает «картой устройств» (которую мы видим в диспетчере устройств), для каждого из которых необходим специфический драйвер. Исключения составляют лишь центральный процессор и оперативная память, которой управляет непосредственно ОС. Для всего остального нужен драйвер, который переводит команды операционной системы в последовательность прерываний – пресловутый «двоичный код».
Как работает драйвер и для чего он нужен?
Основное назначение драйвера – это упрощение процесса программирования работы с устройством.
Он служит «переводчиком» между хардовым (железным) интерфейсом и приложениями или операционными системами, которые их используют. Разработчики могут писать, с помощью драйверов, высокоуровневые приложения и программы не вдаваясь в подробности низкоуровневого функционала каждого из необходимых устройств в отдельности.
Как уже упоминалось, драйвер специфичен для каждого устройства. Он «понимает» все операции, которые устройство может выполнять, а также протокол, с помощью которого происходит взаимодействие между софтовой и железной частью. И, естественно, управляется операционной системой, в которой выполняет конкретной приложение либо отдельная функция самой ОС («печать с помощью принтера»).
Если вы хотите отформатировать жесткий диск, то, упрощенно, этот процесс выглядит следующим образом и имеет определенную последовательность: (1) сначала ОС отправляет команду в драйвер устройства используя команду, которую понимает и драйвер, и операционная система. (2) После этого драйвер конкретного устройства переводит команду в формат, который понимает уже только устройство. (3) Жесткий диск форматирует себя, возвращает результат драйверу, который уже впоследствии переводит эту команду на «язык» операционной системы и выдает результат её пользователю (4).
Как создается драйвер устройства
Для каждого устройства существует свой строгий порядок выполнения команд, называемой «инструкцией». Не зная инструкцию к устройству, невозможно написать для него драйвер, так как низкоуровневые машинные команды являются двоичным кодом (прерываниями) которые на выходе отправляют в драйвер результат, полученный в ходе выполнения этой самой инструкции.
При создании драйвера для Линукса, вам необходимо знать не только тип шины и ее адрес, но и схематику самого устройства, а также весь набор электрических прерываний, в ходе исполнения которых устройство отдает результат драйверу.
Написание любого драйвера начинается с его «скелета» — то есть самых основных команд вроде «включения/выключения» и заканчивая специфическими для данного устройства параметрами.
И чем драйвер не является
Часто драйвер устройства сравнивается с другими программами, выполняющими роль «посредника» между софтом и/или железом. Для того, чтобы расставить точки над «i», уточняем:
- Драйвер не является интерпретатором, так как не исполняется напрямую в софтовом слое приложения или операционной системы.
- Драйвер не является компилятором, так как не переводит команды из одного софтового слоя в другой, такой же.
Ну и на правах рекламы – вы всегда знаете, где скачать новейшие драйвера для любых устройств под ОС Windows.
«Слетели драйвера», «У меня нет драйверов на принтер», «Видеокарте нужны драйвера» — если вам непонятно, что это значит и на что влияют драйверы, то эта статья для вас.
Что такое драйвер
Драйвер — это программа, которая работает как инструкция для операционной системы. Драйвер объясняет операционке, как пользоваться каким-то устройством.
Устройство — это то, что физически подключается к компьютеру:
- видеокарта,
- мышь,
- криптотокен,
- монитор,
- сканер,
- джойстик для игр.
Драйвер рассказывает компьютеру, как этим железом пользоваться, что оно умеет, какие команды понимает и как это железо могут использовать другие программы.
👉 Технически драйвер — это программа, которая висит в памяти компьютера всё время, пока компьютеру нужно это устройство.
Известное и неизвестное железо
Операционная система в компьютере знает и умеет многое, в том числе и работать со стандартным оборудованием. Стандартным — это значит тем, которое предоставляет стандартные возможности.
Например, клавиатура, мышь или веб-камера — это стандартное оборудование, потому что независимо от производителя они делают примерно одно и то же.
Разработчики операционной системы знают про такое оборудование, поэтому могут написать стандартные драйверы, которые подойдут к большинству устройств. Именно поэтому мы можем купить в магазине новую мышь и просто подключить её к компьютеру без установки дополнительных программ — операционная система сама разберётся, что делать.
Но бывает так, что разработчики добавили в устройство нестандартные возможности: переназначение сочетаний клавиш, сделали мышь с несколькими колёсиками или встроенный лазерный дальномер в видеокамеру. В этом случае компьютер не разберётся, как этим всем пользоваться, потому что в стандартных драйверах про это ничего нет.
В таких случаях разработчики устройств пишут свой драйвер, который объяснит компьютеру, как пользоваться всеми возможностями устройства. Этот драйвер нужно будет установить.
Сложное оборудование
Ещё бывает так, что оборудование хоть и стандартное, но сложное, например, видеокарта или принтер. Каждый производитель добавляет свои функции и технологии, которые считает нужными, и чаще всего они не совпадают с другими. Если подключить такое устройство к компьютеру, то компьютер, скорее всего, разберётся, что именно в него воткнули, то как с этим работать — неизвестно.
Здесь тоже нужны драйверы — они идут или в комплекте с устройством на компакт-диске или их качают с официального сайта производителя. Чем сложнее устройство, тем больше вероятность, что без установки дополнительных драйверов оно работать не будет.
Например, если у вас навороченная видеокарта, вы вставляете её в компьютер и сначала видите странную огромную картинку с низким разрешением. Это значит, что компьютер пока не нашёл драйверов на эту карточку и запустил её в «режиме совместимости» — то есть в том режиме, в котором он точно сможет ей управлять. Но возможности видеокарты будут сильно порезаны, пока мы не установим нужные нам драйверы.
Что значит «слетели драйвера»?
Это значит, что компьютер не может найти файлы с инструкциями от какого-то устройства. Так бывает при обновлениях системы, заражении вирусом или просто кто-то случайно мог удалить нужные файлы или папку целиком.
Решение простое: берёте заново драйвер с официального сайта или тот, который шёл в комплекте с устройством, и запускаете программу-установщик заново. А она уже сама разберётся, каких файлов не хватает, и настроит всё заново.
Драйверы нужны только на Windows?
Драйверы нужны на всех компьютерах и для всех операционных систем. Но некоторые операционки идут с кучей драйверов в комплекте, а у других этот набор более скромный.
Общее правило для 2021 года такое: большая часть оборудования, которое нужно для обычной офисной работы, подключится к любому компьютеру без необходимости что-то устанавливать. Операционка сама поймёт, что это за устройство, и, скорее всего, у неё уже будут драйверы.
А вот какое-то более сложное оборудование (например, профессиональная аудиокарта или видеокамера) потребуют установки драйверов от производителя.
В чём проблема с драйверами
Проблема в том, что часто производители не делают новые драйверы для старого оборудования. Например:
Есть диджейский контроллер Numark NS7 — это профессиональное оборудование для диджеев и артистов, оно стоит дорого и нужно примерно 100 тысячам человек на всей планете.
Когда контроллер только вышел, компания Numark выпускала драйвера на все свежие операционные системы, проблем с совместимостью не было.
Потом аппарат сняли с производства, поддержку прекратили. Последняя версия драйверов, которую выпустил Numark, — для Windows 10 и MacOS 10.12 (Sierra). С тех пор у Windows вышло большое обновление до 11, а MacOS обновился раз пять. Причём последние две версии сделаны для процессоров Apple, и уже нет надежды, что Numark обновит драйверы для этой архитектуры.
Так что, если вам достался этот редкий профессиональный прибор, вы вынуждены сидеть на древней MacOS Sierra, которая стремительно перестаёт поддерживаться современным софтом.
Читайте также: