Для работы проектов iXBT.com нужны файлы cookie и сервисы аналитики.
Продолжая посещать сайты проектов вы соглашаетесь с нашей
Политикой в отношении файлов cookie
Привет, друзья! Я расскажу об одном из множества существующих способов заставить печатать старый принтер Canon Laser Shot LBP 1120 из любой 64-х разрядной операционной системы Windows, хотя официального драйвера для работы в 64-х разрядных системах семейства Windows не существует.
Если быть точным, то мой способ достаточно универсален и позволяет запустить печать на любом старом принтере (не только Canon LBP 1120), не поддерживаемыми новыми операционными системами Windows.
Как обычно, рулит «теория заговора». Разработка драйвера находится в компетенции производителя, так как необходимо знать, как работает принтер. Основная проблема использования старых моделей принтеров состоит в том, что производители, по мнению сообщества Internet, для увеличения продаж новых моделей принтеров перестают разрабатывать драйверы для старых принтеров с поддержкой новых операционных систем Windows, особенно 64-х разрядных. На многие старые принтеры, которые проявили себя надежными и экономичными устройствами для домашнего использования, производителями разработаны драйверы только для 32-х разрядных версий Windows. Если производитель не считает нужным разработать драйвер для своего устройства—это политика производителя, мы повлиять на это не сможем. Поэтому крутимся ужом и находим альтернативу.
Для примера несколько вариантов запуска принтера на который отсутствуют драйверы под современные системы Windows:
Те, кто используют до сих пор 64-х разрядные Windows 7 (Ultimate, Professional и Enterprise) и процессор поддерживает аппаратную виртуализацию—устанавливают XP Mode, устанавливают в нем драйвер для Windows XP и печатают, используя XP Mode, что может позволить использовать старый принтер еще долгое время.
Другие делают принт-сервер на отдельном совместимом компьютере, на базе Raspberry Pi или другом подобном устройстве и печатают по локальной сети.
Третий способ для тех, кто использует только один компьютер и если им нужно печатать на принтерах не поддерживаемыми новыми операционными системами Windows, например из 64-х разрядной Windows, ставят VirtualBox (бесплатная виртуальная машина от Oracle), в ней устанавливают 32-х разрядную версию Windows, например Windows XP как не сильно требовательную к ресурсам, ставят набор драйверов и программ, немного настроек и всё готово, можно печатать.
Я так и сделал. Использовал рецепт https://forum.ixbt.com/topic.cgi?id=58:4892, установил:
VirtualBox Oracle 6.0.10, VirtualBox Extension Pack и VBoxGuestAdditions_6.0.10.iso http://download.virtualbox.org/virtualbox/6.0.10/, для установки на Host Windows.
VBoxHeadlessTray https://www.toptensoftware.com/vboxheadlesstray/, для установки на Host Windows.
Драйвер принтера HP LaserJet 4100 Series PS (HP Universal Print Driver for Windows PostScript (64-bit)) https://www.support.hp.com/ua-ru/drivers/selfservice/hp-laserjet-4100-printer-series/83436, для установки на Host Windows.
Дистрибутив Windows XP Professional with Service Pack 3
Драйвер принтера Canon Laser Shot LBP-1120 https://www.canon-europe.com/support/consumer_products/products/printers/laser/laser_shot_lbp1120.html?type=drivers&language=ru&os=windows%207%20(32-bit), для установки на гостевой Windows XP.
Эмулятор PostScript принтера GPL Ghostscript Windows 32 https://code.google.com/archive/p/ghostscript/downloads, для установки на гостевой Windows XP.
RedMon — Redirection Port Monitor http://www.ghostgum.com.au/software/redmon.htm, для установки на гостевой Windows XP
Intel PRO/1000 MT Desktop Adapter https://downloadcenter.intel.com/download/18717/Network-Adapter-Drivers-for-Windows-XP-Final-Release?product=50485, для установки на гостевой Windows XP.
Все заработало, принтер печатает, но открылся один недостаток: при печати файлов в формате PDF очень долго готовится файл к печати, одна страница заполненная рисунками высокого разрешения преобразовывается в файл для печати размером около 100 Мб, что занимает много времени, порядка 10 минут. Явный недостаток. Устал ждать пока закончится печать. Именно этот недостаток заставил меня искать другой способ печати на принтере Canon Laser Shot LBP-1120 из 64-х разрядной Windows 10.
Представляю метод лишенный вышеуказанного недостатка.
Описываемый далее способ я отношу к третьему типу (по моей классификации), но используется другой набор программного обеспечения. Как уже говорилось – «Если быть точным, то мой способ достаточно универсален и позволяет запустить печать на любом старом принтере (не только Canon LBP 1120), не поддерживаемыми новыми операционными системами Windows». Эта универсальность получена благодаря применению программы PDFCreator! Любые файлы печатаются максимально быстро, без задержки. Спасибо создателям этой замечательной бесплатной программы!
Краткий обзор наших действий для достижения результата: Устанавливаем на гостевой Windows XP драйвер для принтера Canon Laser Shot LBP-1120, устанавливаем на гостевой Windows XP программу PDFCreator в серверном режиме с дополнительным 64-х разрядным драйвером, в результате создается виртуальный принтер PDFCreator, настраиваем PDFCreator, делаем его доступным по сети, устанавливаем этот принтер на хост-машине как сетевой принтер. Все готово, можно печатать!
Для простоты понимания приведу блок-схему обоих методов третьего типа (по моей классификации), сразу и наглядно видно преимущество моего способа в минимальном наборе используемого программного обеспечения и скорости печати «тяжелых» файлов.
Общеизвестный способ |
Способ описываемый в этой статье |
Итак, приступим к установке и настройке.
Устанавливаем PDFCreator в серверном режиме. Считаем, что у вас уже установлена виртуальная машина VirtualBox Oracle 6.0.10, VirtualBox Extension Pack и VBoxGuestAdditions_6.0.10.iso, установлена Windows XP (я имя ей присвоил-PRINT), установлен драйвер для принтера Canon Laser Shot LBP-1120, настроена сеть между виртуальной машиной и хостом. Рекомендую установить на виртуальной машине сетевую карту Intel PRO/1000 MT Desktop Adapter для гигабитной сети между гостевой Windows XP и хостом.
Скачиваем установочный файл PDFCreator версии 1.5.1 PDFCreator-1_5_1_setup.exe, это самая старшая версия найденная мной с поддержкой Windosw XP и готовым EXE файлом: https://sourceforge.net/projects/pdfcreator/files/PDFCreator/PDFCreator%201.5.1/
Установку производим на гостевой Windows XP, запускаем установочный файл, выбираем «Экспертные настройки»:
Выбираем язык установки:
Принимаем условия соглашения:
Выбираем «Серверная установка»:
Видим предупреждение:
Далее соглашаемся:
Устанавливаем дополнительный драйвер для 64-х разрядных систем:
Выбираем папку для установки:
Выбираем обязательно «выборочную установку», а то дополнительно установятся не нужные нам тул-бары, отказываемся от всех дополнительных компонентов, выбираем нужный язык:
Настраиваем под себя «Дополнительные задачи»:
Снимаем галочки, чтоб не устанавливать антивирус (что-то эта версия 1.5.1 заглючила с русским языком только в этом окне, до нее устанавливал версию 1.5.0, там все было превосходно):
Нажимаем кнопку «Установить»:
Установка завершена:
Для продолжения настройки создадим пакетный файл, я его назвал print_cleaning.bat с текстом из четырех строк:
rem удаление файлов печати из каталога
PUSHD C:Print_tmp
2>Nul RD /S/Q «C:Print_tmp»
POPD
Этот командный файл понадобится для удаления временных файлов, создаваемых при печати, которые мы будем складывать в папку c:Print_tmp на гостевой Windows XP. Логика работы такова: при печати PDFCreator формирует файл PDF, печатает его на принтере, по окончанию печати запускает файл print_cleaning.bat, который очищает папку C:Print_tmp.
Поместим файл print_cleaning.bat в папку:
C: Program FilesPDFCreatorScriptsRunProgramAfterSaving
Переходим к настройке программы PDFCreator:
Открываем «Настройки»:
Переходим последовательно по пунктам, здесь ничего не меняем:
Следующий пункт без изменений:
Пункт без изменений:
А вот здесь внесем изменения, выберем нужные «галочки» и выберем ранее созданную папку для сохранения:
Следующий важный пункт: открываем закладку «Действие после сохранения», выбираем из выпадающего списка доступный скрипт print_cleaning.bat (мы его ранее поместили в эту папку C: Program FilesPDFCreatorScriptsRunProgramAfterSaving), отмечаем нужные галочки:
Следующий важный пункт: выбираем установленный принтер для печати, ставим галочки и выбираем нужные пункты меню:
На этом настройка PDFCreator закончена.
Делаем принтер PDFCreator доступным по сети и принтером по умолчанию в гостевой системе Windows XP:
Перезагружаем компьютеры, для большей верности, проверяем видимость сетевого принтера из хост-компьютера, устанавливаем 64-разрядный драйвер на сетевой принтер PDFCreator, вдруг если по сети не видно Windows XP, возможный вариант – «Windows 10 при попытке открыть по сети компьютер с ОС Windows XP, скорее всего выдадут ошибку “Windows не может получить доступ, с кодом ошибки 0x80070035”. При этом обе машины друг друга пингуют без проблем. Windows XP работает на протоколе SMBv1, который в Windows 10 отключен по умолчанию из соображений безопасности. Клиентскую часть SMBv1 можно включить в Windows 10 набрав в поиске меню Пуск “Панель управления”, далее Программы -> В разделе “Программы и компоненты” выбрать пункт Включение или отключение компонентов Windows. В открывшемся дереве выбрать “Поддержка общего доступа к файлам SMB 1.0/CIFS”, далее “Клиент SMB 1.0/CIFS”»:
Если Все прошло как надо, система готова к печати:
Ну и в качестве «вишенки на торте» применяем программу VBoxHeadlessTray https://www.toptensoftware.com/vboxheadlesstray/, для установки на хост машине Windows.
Она позволит спрятать запущенную работающую виртуальную машину в один значок на «Панели задач», и при перезагрузке текущая настройка сохранится. Нам не придется заботиться о виртуальной машине при следующем включении компьютера, она будет всегда включена и мгновенно отправлять на печать ваши задания. При установке необходимо указать с какой именно виртуальной машиной нужно работать:
И в результате выглядеть это будет так:
На этом всё, только один недостаток у меня вылез и я его не смог решить — это появление окна при загрузке компьютера с сообщением:
Понятно, что VBoxHeadlessTray не может почему-то найти Log файл, но закрыв это окно все продолжает работать хорошо.
Ne4ai, если это драйвер для какого-то древнего оборудования, с которым невозможно установить связь из Windows 10 x64, то вместо переписывания драйвера можете попробовать установить режим совместимости с Windows XP. Это не «птичка» в чекбоксе, а установка виртуальной машины с Windows XP, из которой можно обращаться к оборудованию.
Я детали не очень помню, делал такое из Windows 7 Professional в экстренном порядке при необходимости программировать какой-то ПЛК по уникальному протоколу.
Кажется этот режим возможен из Professional, по сути он представляет из себя скачивание с сайта Microsoft какого-то пакета обновлений и чего-то ещё. После установки появляется возможность вызова Windows XP в виртуальной машине VirtualPC.
Я установил в эту WinXP необходимые мне программы, драйвера и смог подключиться.
Добавлено через 12 минут
Поискал у себя на компе — этот режим называется Windows XP Mode
Добавлено через 3 минуты
Пояснения с хабрахабра https://habr.com/ru/post/71585/
Вот ещё разъяснения https://windowsnotes.ru/window… estimosti/
Ссылка на скачивание с Microsoft https://www.microsoft.com/ru-R… px?id=8002
Сообщение от пояснения с официального сайта
Среда Windows XP Mode для Windows 7 упрощает запуск многих рабочих приложений, рассчитанных на Windows XP, в системе Windows 7. Она использует такую технологию виртуализации, как Windows Virtual PC, для создания виртуальной среды Windows XP в Windows 7.
Windows XP Mode содержит виртуальную 32-разрядную среду Windows XP Professional c пакетом обновления 3 (SP3). В состав загрузки входит виртуальный жесткий диск (VHD-файл) c предустановленной системой Windows XP с пакетом обновления 3 (SP3). Необходимым условием для использования среды Windows XP Mode является наличие клиентского ПО виртуализации, например Windows Virtual PC.
Содержание
- Как перекомпилировать драйвер под другую версию Windows?
- Установка несовместимого драйвера принтера в Windows 10
- Ответ
- Переделка драйвера под Windows 10 x64
- Переделка драйвера под Windows 10 x64
- Установка более старой версии драйвера
- Ответы (2)
Как перекомпилировать драйвер под другую версию Windows?
Вот такие есть файлы исходников:
common.rc
lowcdc.c
lowcdc.h
lowcdc.rc
makefile
sources
sources.inc
Можно ли из них скомпилировать драйвер и что для этого надо поставить? WDK какой версии ставить, если Windows 10, а драйверы нужно скомпилировать под Windows 10 x64. Драйвер нужен для программатора. Заранее спасибо.
Добавлено через 1 час 31 минуту
Первый этап установка WDK 10 и SDK 10. Затем в Visual studio создать проект драйвера, а что затем, куда впихнуть эти файлы в проект?
Как правильно перекомпилировать под windows функции connect, accept, bind?
компилятор пишет ошибку «переопределение. другая кмпоновка» смотрю про connect на msdn, .
Как перестроить объект под другую версию MSBuild?
Уважаемые Гуру! Скачал с GitHub новую версию проекта. При попытке открыть его в VS 2012 получаю.
Установила windows 8 enterprise evaluation, как установить другую версию?
Я поняла, что это ознакомительная версия. Но теперь я хочу другую, уже скачала, смонтировала образ.
Проблема с переносом под другую версию Office
Привет всем. У меня проблема с переносимостью с одной версии офиса на другую. Это связано с тем.
Судя по набору файлов, собирать этот драйвер нужно в WDK версиях до 8
(потому что файлы sources и makefile в новых версиях WDK не используются).
1. Скачиваешь и устанавливаешь WDK 7.1:
2. Идешь в меню «Пуск» и ищешь папку ‘Windows Driver Kit’, в ней — Build Environments и
там тебе нужен ярлык ‘Windows 7 x64 Free Build Environment’. Если его нет, — а это
баг установки WDK 7.1 на Windows 10, — ищи здесь: C:ProgramDataMicrosoftWindows
Start MenuProgramsWindows Driver KitsWDK 7600.16385.1Build Environments.
3. Запускаешь ярлык, появится консоль. В консоли командой cd заходишь в папку,
где лежат исходники твоего драйвера. Пример:
4. Выполняешь команду build (без аргументов).
Если сборка успешна, в папке с драйвером появится подпапка с именем типа objfre_win7_amd64amd64,
в ней будет лежать собранный драйвер (.sys). Останется только подписать его цифровой подписью
через WHDC-портал и он сможет работать на 64-битной Windows 10 и Windows Server 2016.
Без цифровой подписи драйвер работать не будет (ну или придется каждый раз при
старте системы нажимать F8 и отключать проверку цифровых подписей).
Установка несовместимого драйвера принтера в Windows 10
Ответ
Большинство производителей принтеров регулярно обновляют драйверы печати своих устройств для поддержки последних версий Windows 10. Но о старых моделях принтеров обычно забывают. В результате при переходе с Windows 7 на Windows 10 пользователи обнаруживают, что драйвер принтера, который нормально работал в Windows 7, оказался несовместим с Windows 10. Не выкидывать же из-за это принтер на свалку? В этой статье мы расскажем, как установить в Windows 10 неподдерживаемый драйвер печати от предыдущей версии Windows.
В качестве примера мы установим драйвер от Windows 7 для довольно старого принтера HP 1125.
- Подключите принтер к компьютеру (через USB, LPT . или убедитесь, что принтер доступен по сети).
- Если вы раньше уже пытались установить старую версию драйвера принтера и с ним принтер не печатает, обязательно удалите старый драйвер перед его установкой в режиме совместимости. Удалить драйвер принтера можно в разделе Панель управления -> Устройства и принтеры -> Выберите секцию принтеры и верхнем меню нажмите на «Свойства сервера печати». Перейдите на вкладку «Драйверы», выберите драйвер принтера и нажмите «Удалить». Также удалите программы, которые могли установиться при установке драйвера.
- Щелкните правой кнопкой по установочному файлу с драйвером и выберите «Исправление проблем с совместимостью».
- Выберите пункт «Диагностика программы».
- Отметьте опцию «Программ работала в предыдущих версиях Windows, но не устанавливается или не запускается сейчас» и нажмите Далее.
- Выберите что эта программ раньше работала в Windows 7.
- Нажмите на кнопку Проверить программу
- Программа запросит разрешения на установку.
- Установите программу.
- После окончания установки драйвера убедитесь, что в системе появился новый принтер.
Если у вас отсутствует установочный файл для драйвера принтера, а только набор INF, CAB и DLL файлов:
- Установите драйвер, щелкнув правой кнопкой по INF файлу драйвера и выберите «Установить».
- В панели управления запустите мастер установки нового принтера. После окончания автоматического поиска выберите опцию «Необходимый принтер отсутствует в списке».
- В мастере установки принтера выберите опцию «Мой принтер довольно старый. Мне нужно помощь, чтобы найти его».
- Дождитесь, пока мастер не найдет подключенный принтер (убедитесь, что кабель принтера надежно подключен к компьютеру).
- Выберите принтер, драйвер и попробуйте распечатать тестовую страницу.
Теперь вы можете использовать свой старый принтер (можно даже открыть к нему общий доступ) несмотря на то, что его драйвер официально не поддерживается Windows 10.
Переделка драйвера под Windows 10 x64
Вложения
SANS.zip (120.8 Кб, 8 просмотров) |
Переделка драйвера под Windows 10 x64
Здравствуйте. Помогите если у кого есть возможность..переделать драйвер на x64. буду благодарен.
X86 или x64 под Windows 10/x64
Только начинаю разбираться с написанием драйверов и как обычно уже миллион вопросов. Установлена.
Windows 7 x64 SP1 и драйвера принтеров, любая программа выдаёт ошибку неправильной настройки драйвера
Сабж: Компьютер под семеркой х64 SP1 (предустановленный SP) и МФУ Canon MF4410. Долгое время.
Загрузка драйвера в windows 7 x64
WDK 7600.16385.1 test.c #include NTSTATUS DriverEntry(PDRIVER_OBJECT.
что толку менять параметры в inf если в драйвере они не отображены..
в драйвере должно быть 64 битное поле (64Bit Field) поэтому без реверса и внесения соответствующих изменений не обойтись (ну или если есть исходник, править чисто код)
https://docs.microsoft.com/en-. bit—field
https://docs.microsoft.com/en-. bit—field
Вложения
Grabster_AV_400_App_Drv_Vista_XP_6.270.9_GB.rar (5.58 Мб, 3 просмотров) |
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.
Установка драйвера HP LaserJet Pro M1132 MFP под Win 7 x64
Это какое-то издевательство. После покупки этого принтера в ноябре установить драйвера удалось, но.
Драйвера realtek для Windows 7 x64
Люди,помогите пожалуйста драйверами realtek-овскими под семерку х64,сколько ни качал,пишет.
Вывод лога драйвера на Windows 7 x64
Добрый день. всегда работал на Windows 7 x86 и отлавливал логи драйвера с помощью DbgPrintLog.
Не устанавливаютсяудаляются драйвера Nvidia. Windows 8 x64
Ребят, нужна помощь — я уже не знаю что делать. Искал поиск проблемы в инете, но так и не нашел.
Переделка драйвера под Windows 10 x64
Вложения
lr147_.1.31.100 (1).zip (2.16 Мб, 7 просмотров) |
Переделка драйвера под Windows 10 x64
Уважаемые! Есть драйвер успешно работающий на Windows 7 Pro 32-bit. Может кто помочь как.
X86 или x64 под Windows 10/x64
Только начинаю разбираться с написанием драйверов и как обычно уже миллион вопросов. Установлена.
Windows 7 x64 SP1 и драйвера принтеров, любая программа выдаёт ошибку неправильной настройки драйвера
Сабж: Компьютер под семеркой х64 SP1 (предустановленный SP) и МФУ Canon MF4410. Долгое время.
Загрузка драйвера в windows 7 x64
WDK 7600.16385.1 test.c #include NTSTATUS DriverEntry(PDRIVER_OBJECT.
Вложения
lr147_.1.31.100 (1).7z (11.4 Кб, 6 просмотров) |
Ne4ai, если это драйвер для какого-то древнего оборудования, с которым невозможно установить связь из Windows 10 x64, то вместо переписывания драйвера можете попробовать установить режим совместимости с Windows XP. Это не «птичка» в чекбоксе, а установка виртуальной машины с Windows XP, из которой можно обращаться к оборудованию.
Я детали не очень помню, делал такое из Windows 7 Professional в экстренном порядке при необходимости программировать какой-то ПЛК по уникальному протоколу.
Кажется этот режим возможен из Professional, по сути он представляет из себя скачивание с сайта Microsoft какого-то пакета обновлений и чего-то ещё. После установки появляется возможность вызова Windows XP в виртуальной машине VirtualPC.
Я установил в эту WinXP необходимые мне программы, драйвера и смог подключиться.
Добавлено через 12 минут
Поискал у себя на компе — этот режим называется Windows XP Mode
Среда Windows XP Mode для Windows 7 упрощает запуск многих рабочих приложений, рассчитанных на Windows XP, в системе Windows 7. Она использует такую технологию виртуализации, как Windows Virtual PC, для создания виртуальной среды Windows XP в Windows 7.
Windows XP Mode содержит виртуальную 32-разрядную среду Windows XP Professional c пакетом обновления 3 (SP3). В состав загрузки входит виртуальный жесткий диск (VHD-файл) c предустановленной системой Windows XP с пакетом обновления 3 (SP3). Необходимым условием для использования среды Windows XP Mode является наличие клиентского ПО виртуализации, например Windows Virtual PC.
Установка более старой версии драйвера
Каким образом установить более старую версию драйвера? Сейчас установлен драйвер версии 1004
Мне нужно установить драйвер версии 1002 (предыдущая версия). Кнопка «откатить» не активна. Если драйвер удалить полностью, то система просит перезагрузку и после перезагрузки сама его опять устанавливает. Через кнопку «обновить» тоже не возможно, т.к. драйвер более старой версии и система говорит:
Ни на одной Виндовс предыдущих версий не было таких проблем с установкой-удалением драйверов. В 10-тке это сущий геморрой.
Буду благодарен за помощь.
Ответы (2)
Используйте данное исправления для запрета ОС устанавливать драйверы из центра обновлений:
Установите необходимые драйверы видеокарты вручную.
8 польз. нашли этот ответ полезным
Был ли этот ответ полезным?
К сожалению, это не помогло.
Отлично! Благодарим за отзыв.
Насколько Вы удовлетворены этим ответом?
Благодарим за отзыв, он поможет улучшить наш сайт.
Насколько Вы удовлетворены этим ответом?
Благодарим за отзыв.
Используйте данное исправления для запрета ОС устанавливать драйверы из центра обновлений:
Установите необходимые драйверы видеокарты вручную.
Спасибо за помощь.
Мне все же удалось установить старую версию драйвера, хотя и странным способом: сначала полностью удалил драйвер и все с ним связанное, потом не перезагружая систему запустил setup catalyst и установил из пакета приложений только драйвер 1002. После перезагрузки система опять поставила драйвер 1004, но кнопка «откатить» стала активна и я смог откатиться на драйвер версии 1002. Исправление оставлю на будущее, думаю еще понадобиться, т.к. хотя я отключил автообновление драйверов, они почему-то все равно продолжают обновляться.
2 польз. нашли этот ответ полезным
Был ли этот ответ полезным?
К сожалению, это не помогло.
Отлично! Благодарим за отзыв.
Насколько Вы удовлетворены этим ответом?
Благодарим за отзыв, он поможет улучшить наш сайт.
Предыстория
Для очередного проекта возникла необходимость написать простенький софтверный драйвер под Windows, но так как опыта в написании драйверов у меня примерно столько же, сколько и в балете, я начал исследовать данную тему. В таких делах я предпочитаю начинать с основ, ибо если кидаться сразу на сложные вещи, то можно упустить многие базовые понятия и приёмы, что в дальнейшем только усложнит жизнь.
После 20 минут поисков по сети я наткнулся на Github Павла Иосифовича (zodiacon — Overview). Личность легендарная в своих кругах, достаточно посмотреть на его репозиторий, публикации и выступления на именитых конференциях. Помимо этого, Павел является автором/соавтором нескольких книг: «Windows Internals» (книга, имеющаяся у меня на полке, которая принесла немало пользы), и «Windows Kernel Programming» 2019 года выпуска (бегло пролистав 11 Глав или 390 страниц, я понял – это то, что нужно!).
Кстати, книгу вы можете купить прямо на сайте Павла
Ссылка скрыта от гостей
Книгу я приобрёл в бумажной версии, чтобы хоть и немного, но поддержать автора. Безупречное качество, несмотря на то, что она издается в мягком переплете. Хорошие плотные листы формата А4 и качественная краска. (книга без проблем пережила вылитую на нее кружку горячего кофе).
Пока я сидел на балконе и читал четвёртую главу книги, в голову пришла мысль: а почему бы не сделать ряд статей на тему «Программирования драйвера под Windows», так сказать, совместить полезное, с еще более полезным.
И вот я здесь, пишу предысторию.
Как я вижу этот цикл статей и что от него ожидать:
Это будут статьи, которые будут базироваться на вышеупомянутой книге, своеобразный вольный и сокращенный перевод, с дополнениями и примечаниями.
Базовые понятия о внутреннем устройстве Windows (Windows Internals)
Для того, чтобы начать разрабатывать Драйвер под Windows, то есть работать на уровне с ядром ОС, необходимо базовое понимание того, как эта ОС утроена. Так как я хочу сосредоточиться на написании драйвера, а не на теории об операционных системах, подробно описывать понятия я не буду, чтобы не растягивать статью, вместо этого прикреплю ссылки для самостоятельного изучения.
Следовательно, нам стоит ознакомиться с такими базовыми понятиями как:
Ссылка скрыта от гостей
Процесс – это объект, который управляет запущенной инстанцией программы.
Ссылка скрыта от гостей
Технология, позволяющая создавать закрытые пространства памяти для процессов. В своем роде — это песочница.
Ссылка скрыта от гостей
Это сущность, которая содержится внутри процесса и использует для работы ресурсы, выделенные процессом — такие, как виртуальная память. По сути, как раз таки потоки и запускают код.
Ссылка скрыта от гостей
В своем роде это прокладка, которая позволяет программе отправлять запросы в Ядро операционной системы, для выполнения нужных ей операций.
Ссылка скрыта от гостей
Это сложно описать словами коротко, проще один раз увидеть картинку.
В упрощённом виде это выглядит так:
Ссылка скрыта от гостей
Дескрипторы и объекты необходимы для регулирования доступа к системным ресурсам.
Объект — это структура данных, представляющая системный ресурс, например файл, поток или графическое изображение.
Дескриптор – это некая абстракция, которая позволяет скрыть реальный адрес памяти от Программы в пользовательском режиме.
Для более глубокого понимания Операционных систем могу посоветовать следующие материалы:
Книги:
- Таненбаум, Бос: Современные операционные системы
- Windows Internals 7th edition (Part 1)
Видео:
Настройка рабочего пространства
Для разработки драйвера, как и любого другого софта необходима подходящая среда.
Так как мы работаем в операционной системе Windows, её средствами мы и будем пользоваться.
Что нам понадобится:
1. Visual Studio 2017 и старше.
(Community Version хватает с головой) Также во вкладке „Individual components” необходимо установить
Код:
MSVC v142 - VS 2019 C++ ARM build tools (Latest)
MSVC v142 - VS 2019 C++ ARM Spectre-mitigated libs (Latest)
MSVC v142 - VS 2019 C++ ARM64 build tools (Latest)
MSVC v142 - VS 2019 C++ ARM64 Spectre-mitigated libs (Latest)
MSVC v142 - VS 2019 C++ ARM64EC build tools (Latest - experimental)
MSVC v142 - VS 2019 C++ ARM64EC Spectre-mitigated libs (Latest - experimental)
MSVC v142 - VS 2019 C++ x64/x86 build tools (Latest)
MSVC v142 - VS 2019 C++ x64/x86 Spectre-mitigated libs (Latest)
и далее по списку.
2. Windows 10/11 SDK (последней версии)
Ссылка скрыта от гостей
Тут все просто. Качаем iso файл, монтируем и запускаем установщик.
3. Windows 10/11 Driver Kit (WDK)
Ссылка скрыта от гостей
В конце установки вам будет предложено установить расширение для Visual Studio. Обязательно установите его!
После закрытия окна установки WDK появится установщик Расширения VisualStudio
4. Sysinternals Suite
Ссылка скрыта от гостей
Скачайте и распакуйте в удобное для вас место. Это набор полезных утилит, которые пригодятся для исследования Windows, дебага драйвера и прочего.
5. Виртуальная Машина с Windows для тестов.
Выбор ПО для виртуализации на ваше усмотрение. Я буду использовать «VMware Workstation 16 pro».
Написанные драйверы лучше тестировать именно в виртуальной машине, так как Ядро — ошибок не прощает, и вы будете часто улетать в синий экран смерти.
После того, как все было установлено, пора запускать Visual Studio и начинать писать драйвер.
Создание проекта
Запускаем Visual Studio и создаем новый проект. Создадим пустой проект „Empty WDM Driver“
Называем его как душе угодно.
И вот он, наш свеженький чистенький проект для нашего первого драйвера.
Теперь необходимо создать cpp файл, в котором мы будем писать сам драйвер.
Вот и все. Настройку системы и среды мы закончили.
Первый драйвер
Сначала импортируем ntddk.h
эта одна из базовых библиотек для работы с ядром. Больше информации
Ссылка скрыта от гостей
. Как и у любой программы, у драйвера должна быть точка входа DriverEntry
, как функция Main
в обычной программе. Готовый прототип этой функции выглядит так
C++:
#include <ntddk.h>
NTSTATUS DriverEntry(_In_ PDRIVER_OBJECT DriverObject, _In_ PUNICODE_STRING RegistryPath) {
/*
In_ это часть SAL(Source Code Ananotation Language) Аннотации не видимы для компилятора,
но содержат метаданные которые, улучшают анализ и чтение кода.
*/
return STATUS_SUCCESS;
}
Если мы попробуем собрать наш проект, то получим следующие ошибки и предупреждения.
В данном случае пункт 1 является следствием пунктов 2 и 3. Дело в том, что по дефолту в Visual Studio некоторые “предупреждения” расцениваются как ошибки.
Чтобы решить эту проблему есть 2 пути.
- Отключить эту фичу в Visual Studio, что делать не рекомендуется. Так как сообщения об ошибках могут быть полезны и сэкономят вам время и нервы в дальнейшем.
- Более правильный и классический метод это использовать макросы в c++. Как видно из сообщения с кодом C4100 объекты RegistryPath и DriverObject не упомянуты в теле функции. Подробнее
Ссылка скрыта от гостей
.
Для того, чтобы избавиться от предупреждений, и заставить наш код работать, стоит поместить объекты в макрос UNREFERENCED_PARAMETER(ObjectName)
C++:
include <ntddk.h>
NTSTATUS DriverEntry(_In_ PDRIVER_OBJECT DriverObject, _In_ PUNICODE_STRING RegistryPath) {
UNREFERENCED_PARAMETER(DriverObject);
UNREFERENCED_PARAMETER(RegistryPath);
return STATUS_SUCCESS;
}
Теперь, если пересобрать проект, то мы увидим, что ошибка С220 и предупреждение C4100 пропали, но к ним на смену пришли LNK2019 и LNK1120. Однако это уже не ошибки компиляции — это ошибки линкера. А кто говорил что будет легко?
О том, что такое линкер можно почитать
Ссылка скрыта от гостей
.
Дело в том, что наша функция не представлена в стандартном линкере С++ и вообще она девушка капризная и хочет Си-линкер. Удовлетворим желание дамы и дадим ей то, чего она хочет.
Делается это просто. Перед функцией надо добавить extern "C"
так наш линкер будет понимать, что эта функция должна линковаться С-линкером.
Собираем проект заново и вуаля — Драйвер собрался.
Что на данный момент умеет наш драйвер? Сейчас это по сути пустышка, которая после загрузки, в случае успеха, вернет нам сообщения об удачном запуске. Давайте заставим его нас поприветствовать и проверим его работоспособность. Выводить сообщения мы будем при помощи функции KdPrint(());
да именно в двойных кавычках.
Итоговый код драйвера будет выглядеть так:
C++:
#include <ntddk.h>
//Указываем линкеру, что DriverEntry должна линковаться С-линкером
extern "C"
NTSTATUS DriverEntry(_In_ PDRIVER_OBJECT DriverObject, _In_ PUNICODE_STRING RegistryPath)
{
//Убираем варнинг C4100 и связанную с ним ошибку C220
UNREFERENCED_PARAMETER(DriverObject);
UNREFERENCED_PARAMETER(RegistryPath);
//Выводим сообщение
KdPrint(("Hi Codeby, this is our first driver! Yuhu!n"));
return STATUS_SUCCESS;
}
Собираем или пересобираем драйвер.
Важно! Сборка драйвера должна происходить в режиме Debug!!!
После чего в папке нашего проекта мы сможем найти результаты нашего труда. Вы только посмотрите на него, какой маленький и хорошенький.
Но что делать дальше? Как проверить его работоспособность?
Для этого нам и понадобится наша виртуальная машина с Windows, но перед запуском на ней драйвера, нам придется проделать пару манипуляций. Дело в том, что в Windows есть встроенная защита, и если драйвер не подписан «нужной» подписью ака сертификатом, то драйвер просто не загрузится.
Дальнейшие действия нужно проделать в Windows на виртуальной машине.
Чтобы отключить эту проверку подписи, а точенее перевести Windows в тестовый режим, запустите cmd.exe от имени администратора и введите следующую команду bcdedit /set testsigning on
.
Перезагрузите виртуальную машину.
Если все прошло удачно, в правом нижнем углу вы увидите следующую надпись (2 нижнее строчки могут отличиться в зависимости от версии Windows)
Возвращаемся в папку с драйвером и копируем его в виртуальную машину. Теперь нам надо создать службу для запуска драйвер. Открываем консоль от имени администратора и вводим следующую команду:
sc create Name type= kernel binPaht= PATH_TO_DRIVER
в моем случае это выглядит так:
Также проверить успешность создания можно через реестр.
В той же консоли мы можем попробовать запустить нашу службу.
sc start CodebyDriver
Отлично, драйвер запустился и мы даже не улетели в синьку, а это всегда приятно. Теперь давайте проверим, выводится ли сообщение от драйвера.
Для этого нам необходимо провести подготовительные работы.
Создадим новый ключ в реестре и назовем его Debug Print Filter
.
В качестве значения задаем DWORD
с именем DEFAULT
и определяем данные для значения как 8
.
Перезагружаем виртуальную машину.
После перезапуска запускаем DebugView данный инструмент находится в архиве Sysinternals, который мы ранее скачали. Ее можно смело скопировать в виртуальную машину.
Запускаем DebugView от имени Администратора и ставим галочку “Capture Kerner”
Capture Win32 и Capture Global Win32 можно снять, если летит много сообщений.
Затем запускаем консоль от имени администратора и запускаем службу загрузки драйвера.
Все отработало отлично, и мы видим приветствие от нашего драйвера!
На этой приятной ноте первая статья из цикла заканчивается. В дальнейших статьях мы добавим функционала нашему драйверу, научим его выгружаться и получать данные.
Спасибо за чтение!
P.S: Я сам только начал изучать тему работы с драйверами. Так что если у вас есть предложения или правки по технической части статьи, прошу отписать в комментарии, чтобы я мог внести изменения в статью.
P.P.S: Как вы могли заметить, писать мы будем преимущественно на С++, посему могу посоветовать отличный канал с уроками по С++ — The Cherno.
У нас Windows 10-64.
Задача разработать например драйвер устройства под Windows.
Устанавливаем Windows Device Driver Kit 7 :
Скачиваем с офф.сайта microsoft ISO, разархивируем , запустим KitSetup.exe
так выглядят в Панель управленияПрограммыПрограммы и компоненты
установлен у меня в C:WinDDK7600.16385.1
В C:WinDDK7600.16385.1src много примеров исходных кодов.
Примечание : если у вас уже установлен Win Driver Kit 10 , то придется удалить.
Фишка в том , что сборку надо запускать через запуск сначала командного файла (который устанавливает переменные среды) :
см. Пуск->Windows Driver
открывается консоль, где и надо ввести build (в каталоге вашего проекта). Процесс сборки выглядит примерно так:
для x64 входим через C:WindowsSystem32cmd.exe /k C:WinDDK7600.16385.1binsetenv.bat C:WinDDK7600.16385.1 fre x32-64
Windows 10 — надо сначала отключить проверку цифровой подписи (у меня срабатывает при нажатой SHIFT + клик Перезагрузка)
Отключаем.
Далее просто пробуем написать простейший kernel драйвер
На самом деле в дальнейшем в этой ветке сайта мы будем заниматься UMDF драйверами, но для проверки первого драйвера подвернулся пример driver.sys (kernel драйвер, драйвер уровня ядра)
Компилируем простейший драйвер (sys — кернел драйвер)
#include <wdm.h>
static
VOID Unload(DRIVER_OBJECT * pDriverObj)
{
DbgPrint("...........Unloadn");
}
NTSTATUS DriverEntry(DRIVER_OBJECT * pDriverObj, UNICODE_STRING * pRegPath)
{
DbgPrint("DriverEntry................n");
return STATUS_SUCCESS;
}
Для варианта сборки x86 пробуем зарегистрировать драйвер
Для варианта сборки amd64 получаем
Теперь по другому пробуем проверить запущен ли все-таки драйвер через программу OSR Driver Loader:
Получается драйвер все-таки запускается несмотря на ругань по поводу сертификата.
смотрим например еще так :
C:WINDOWSsystem32>sc query mydriver
Имя_службы: mydriver
Тип : 1 KERNEL_DRIVER
Состояние : 4 RUNNING
(STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
Код_выхода_Win32 : 0 (0x0)
Код_выхода_службы : 0 (0x0)
Контрольная_точка : 0x0
Ожидание : 0x0
osr driver loader — прекрасно и сама регистрирует / запускает / останавливает / удаляет драйвер. Только не забывайте перезагружаться.
Отладка
У нас на сайте см. отдельный раздел по отладке драйверов.
Как написать драйвер для принтера
Написание драйверов всегда являет собой достаточно сложный трудоемкий процесс, требующий от вас не только определенных знаний и навыков, но и большое количество времени. В основном это необходимо для обеспечения работы устройств в альтернативных операционных системах.
Вам понадобится
- — программа-компилятор;
- — эмулятор;
- — блокнот для написания кода.
Инструкция
Изучите специфику драйверов принтера для операционной системы, в которой будете работать в дальнейшем. Также стоит учитывать вид самого печатающего устройства, поскольку принцип работы струйных, лазерных и матричных принтеров может различаться. Обратите внимание, что данный процесс достаточно трудоемкий и требует от вас наличие навыков программирования на достаточно высоком уровне.
Изучив программную часть аспектов работы выбранного вами принтера, выберите язык и средство программирования. В случае если ваш драйвер рассчитан не на одну, а несколько платформ, воспользуйтесь также загрузкой дополнительных программ-эмуляторов. Также вы можете использовать билдеры, которые имеют в себе сразу все необходимые инструменты для написания программного обеспечения – редактор, компилятор, эмулятор. Также, очень редко, встречаются программы и с регистраторами.
В случае возникновения у вас проблем с написанием программного обеспечения обратитесь за помощью в специальные тематические форумы. Скорее всего, проблемы возникнут уже на начальном этапе. После написания кода программы перейдите к его проверке.
Запустите программу-эмулятор и выберите рабочую среду, запустив драйвер. В случае неисправностей в работе внимательно просмотрите весь код от начала до конца для выявления ошибок.
Если проверка драйвера прошла успешно, выполните компиляцию программы. Для этого скачайте отдельную утилиту или, если это возможно, скомпилируйте драйвер при помощи встроенного в билдер программного обеспечения. Данный процесс может занять достаточно долгое время, в ходе его выполнения не выполняйте никаких операций с программой-компилятором, не перезагружайте компьютер и предварительно сохраняйте рабочую конфигурацию.
Видео по теме
Полезный совет
Выполните поиск драйверов нужных устройств по тематическим форумам.
Источники:
- написанию драйверов
Войти на сайт
или
Забыли пароль?
Еще не зарегистрированы?
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.