Форум программистов, компьютерный форум, киберфорум
Программирование драйверов
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.62/26: Рейтинг темы: голосов - 26, средняя оценка - 4.62
75 / 9 / 1
Регистрация: 07.06.2016
Сообщений: 132

Будет ли работать драйвер на виртуальной машине?

08.07.2016, 18:02. Показов 5558. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пытаюсь настроить среду, где можно пробовать писать драйверы. Вот здесь https://msdn.microsoft.com/ru-... s.85).aspx указано, что Debug запускается на host-машине, а сам драйвер на тестовой машине. Как указано в MSDN эти два компьютера должны иметь возможность пинговать друг друга. Но у меня нет второй физической машины. А в MSDN написано, что "Provisioning is not supported for virtual machines.". Означает ли это, что драйвер нельзя тестить на виртуальной машине и обязательно нужна вторая физическая?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.07.2016, 18:02
Ответы с готовыми решениями:

Будет на такой ли машине работать ECC оперативной памяти?
Мне сказали, что на нижеизложенной системе с процессором Core i5-760 оперативная память будет работать без поддержки ECC. А режим ECC...

Будет ли WinSock работать на машине, подключённой через прокси-сервер?
Вопрос: Будет ли WinSock работать на машине, подключённой через прокси-сервер? Примеры, которые я здесь нашёл у меня не работают. Может...

Будет ли работать Windows XP на машине: 450 MHz и 128 ОЗУ?
Na 450 MHz and 128 03y. Budet rabotat Windows Xp. ILI vseshe, rabotat budet ne vozmoshno ???

33
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
14.07.2016, 21:40
Студворк — интернет-сервис помощи студентам
Добавь логирование вызовов WdfDriverCreate и WdfDeviceCreate,
возможно, одна из этих функций и возвращает ошибку.
Кстати, для не-PnP драйверов AddDevice никогда не будет вызываться.

А вообще, я в WDF не силен.
0
75 / 9 / 1
Регистрация: 07.06.2016
Сообщений: 132
14.07.2016, 23:14  [ТС]
Убежденный, я решил попробовать обычный пример с обычным драйвером, просто выводящим строку в дебагерское окно.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <wdm.h>
#include <ntddk.h>
 
NTSTATUS DriverEntry(DRIVER_OBJECT* pDriverObj, UNICODE_STRING* pRegPath)
{
    UNICODE_STRING* test1 = pRegPath;
    DRIVER_OBJECT* test2 = pDriverObj;
    pDriverObj = NULL;
    pRegPath = NULL;
    pRegPath = test1;
    pDriverObj = test2;
    DbgPrint("Driver is working!");
 
    return STATUS_SUCCESS;
}
Онанизм с указателями пришлось добавить из-за того, что компилятору (VS) не нравилось, что они не используются и он предупреждения трактовал как ошибку. Теперь на виртуалке net start выдает: 1275 - драйвер был заблокирован. Машину запускал без проверки подписи драйверов, в режиме отладки. WinDBG отлаживает нормально. В VS в окружении использовал конфигурацию DEBUG и платформу х64. Драйвер пытался запускать из корня C:\ и из C:\windows\system32. Через net start служба создается, но запуск драйвера блокируется. Можно где-нибудь посмотреть из-за чего именно он блокируется?
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
15.07.2016, 10:18
Цитата Сообщение от NatiF Посмотреть сообщение
компилятору (VS) не нравилось, что они не используются и он предупреждения трактовал как ошибку.
Используй макрос UNREFERENCED_PARAMETER.

Цитата Сообщение от NatiF Посмотреть сообщение
Через net start служба создается, но запуск драйвера блокируется. Можно где-нибудь посмотреть из-за чего именно он блокируется?
В системном журнале Windows, например.
Если проблемы с цифровыми подписями, обычно там код 577, а не 1275.
Возможно, у тебя просто драйвер собран криво, ты же не написал, с
какими опциями его компилишь.
0
75 / 9 / 1
Регистрация: 07.06.2016
Сообщений: 132
16.07.2016, 13:51  [ТС]
Цитата Сообщение от Убежденный Посмотреть сообщение
Возможно, у тебя просто драйвер собран криво, ты же не написал, с
какими опциями его компилишь.
Я компилю его на VS2015, проект - KMDF(пустой), в него добавляю new item - файл с++, только меняю расширение с .срр на .c, в него вставляю код драйвера, выбираю сборку Debug и платформу х64. Собираю. Какие еще параметры надо настраивать? По умолчанию WPP tracing выключен, target platform - Universal.

Цитата Сообщение от Убежденный Посмотреть сообщение
Используй макрос UNREFERENCED_PARAMETER.
UNREFERENCED_PARAMETER (pDriverObj);
UNREFERENCED_PARAMETER (pRegPath);
Так?
0
75 / 9 / 1
Регистрация: 07.06.2016
Сообщений: 132
23.07.2016, 15:07  [ТС]
Убежденный, надо было включить Режим разработчика на 10-й винде. Совсем про него забыл. Он и блокировал запуск. Сейчас все заработало, сообщение в дебагерское окошко выводится. Спасибо. Теперь думаю попробовать несложные какие-нибудь действия поделать. Читаю windows internals и руткиты.внедрение в ядро windows.
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
23.07.2016, 16:16
Непонятно только одно - почему у меня на виртуальной Windows 10 все
заводится сразу без всяких плясок с бубном?
0
5 / 5 / 3
Регистрация: 15.07.2016
Сообщений: 13
23.07.2016, 17:01
Цитата Сообщение от Убежденный Посмотреть сообщение
Непонятно только одно -
- на мой взгляд ( понятно ), если уж прищел - Поделиться - ни умничай - выкладывай все без сустатка, т.к. на это здесь все и собрались, а отмахивать "носом", о-й фи... - ни надо, пжлст.
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
23.07.2016, 17:50
Цитата Сообщение от NatiF Посмотреть сообщение
надо было включить Режим разработчика на 10-й винде. Совсем про него забыл. Он и блокировал запуск. Сейчас все заработало, сообщение в дебагерское окошко выводится.
У меня на одном из последних инсайдерских билдов Win10-x64
(14393.0.amd64fre.rs1_release.160715-1616) ничего такого не нужно,
режим отладки включается обычным способом, т.е. через bcdedit +
Debug Print Filter в реестре. Да, и еще Secure Boot нужно отключать, но это только
если Generation 2 Virtual Machine на Hyper-V.
0
75 / 9 / 1
Регистрация: 07.06.2016
Сообщений: 132
23.07.2016, 22:50  [ТС]
Цитата Сообщение от Убежденный Посмотреть сообщение
ничего такого не нужно,
я думаю, что либо я где-то слишком много лишних действий сделал, либо где-то не сделал необходимых)
вот эта ошибка доступа - я не думаю, что это из-за кривой сборки драйвера в VS... возможно дело в разных настройках политики безопасности.. потому что я на виртуалке ничего не настраивал, кроме, как ты показал, порта для пайпа, ну еще и отключал проверку подписи драйверов через bcdedit. Ну да, еще перезагружал винду и отключал там при загрузке проверку подписи драйверов. Может это лишнее уже было, при том, что дебагер исправно работал и отлаживал ядро все время.

Добавлено через 1 час 1 минуту
Убежденный, это вопрос, если включить режим отладки после перезагрузки, то это означает обязательное отключение проверки подписи? ведь режим отключения проверки подписи стоит отдельным пунктом. Немного странная логика помоему - либо загружайся под отладкой, либо отключай проверку подписи. А ты говоришь, что отладки достаточно, чтобы отключись всякие вопросы с подписями. Там же нельзя сразу выбрать несколько пунктов. Но у меня когда я отключал проверку подписей, отладка шла нормально.
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
23.07.2016, 23:06
При подключенном отладчике ядра проверка "ядерных" цифровых
подписей не выполняется. То есть, в этом случае жать F8 и отключать
проверку цифровых подписей не обязательно.

В общем говоря, существует только четыре легальных способа загрузить
драйвер на 64-битной Windows от Vista и выше. Это:

1. Наличие у драйвера цифровой подписи с кросс-сертификатом Microsoft.

2. Отключение проверки цифровых подписей по F8 в меню загрузки.

3. Тестовый режим (при этом сам драйвер должен быть подписан, но
"правильность" сертификата игнорируется).

4. Система переведена в режим отладки (bcdedit) и загружена с
подключенным отладчиком ядра.
0
75 / 9 / 1
Регистрация: 07.06.2016
Сообщений: 132
23.07.2016, 23:53  [ТС]
Цитата Сообщение от Убежденный Посмотреть сообщение
3. Тестовый режим (при этом сам драйвер должен быть подписан, но
"правильность" сертификата игнорируется).
4. Система переведена в режим отладки (bcdedit) и загружена с
подключенным отладчиком ядра.
Вот эти 2 у меня выполняются точно. Меня смущает то, что на той машине, что я изначально пытался запустить драйвер, вылезло сообщение об отсутствии подписи. А потом просто любой запуск драйвера блокировался. У себя же дома, я запустил драйвер точно таким же образом после включения режима разработчика и никаких ошибок при запуске службы и драйвера не возникло: окошко с надписью в дебагере появилось. При том, что в VS я поменял только платформу на х64. Т.е. никаких опций компиляции я не менял больше. А у меня WDK 10. Я так понял, он интегрируется в VS, поэтому в VS появляются проекты драйверов. Ты писал, что у разработчиков много вопросов к сборке драйверов в VS и что лучше собирать в WDK 7.0. Я не знаю, может оно и так, я сам понимаешь, не драйверист пока, мне бы хоть простейшие вещи работали. Хотя бы вывод в окно работает, мне уже радостно.

Я пока читаю книги, меня больше всего заинтересовала схема многоуровневых драйверов через IRP-пакеты. Это реально встроиться в цепочку драйверов, фильтруя IRP путем изменения некоторых его полей? Вот предположим, есть драйвер, который фильтрует файловые запросы типа read. Если поставить один драйвер ниже его, и изменять входной буфер в этих IRP на мусор, чтобы он этот мусор обрабатывал, а выше его поставить другой драйвер-фильтр, который бы восстанавливал изначальный IRP-пакет и передавал бы его дальше вверх, это возможно? Условно говоря переданный снизу IRP-пакет проходил бы снизу вверх неизменяемым для всех драйверов, кроме одного драйвера, который бы принимал вместо пакета мусор?

Добавлено через 2 минуты
Я вероятно, несу ахинею, поэтому не сильно ругайтесь.
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
23.07.2016, 23:59
Цитата Сообщение от NatiF Посмотреть сообщение
При том, что в VS я поменял только платформу на х64.
Так это ключевой момент. Если система у тебя 64-битная, то и драйверы
на ней могут запускаться только 64-битные.

Цитата Сообщение от NatiF Посмотреть сообщение
Я пока читаю книги, меня больше всего заинтересовала схема многоуровневых драйверов через IRP-пакеты. Это реально встроиться в цепочку драйверов, фильтруя IRP путем изменения некоторых его полей?
Это более, чем реально.
Существует много различных типов фильтрующих драйверов, но почти все они
именно по такому принципу и работают.

Цитата Сообщение от NatiF Посмотреть сообщение
Вот предположим, есть драйвер, который фильтрует файловые запросы типа read. Если поставить один драйвер ниже его, и изменять входной буфер в этих IRP на мусор, чтобы он этот мусор обрабатывал, а выше его поставить другой драйвер-фильтр, который бы восстанавливал изначальный IRP-пакет и передавал бы его дальше вверх, это возможно?
Это вполне возможно.
Только тут с терминологией небольшая путаница: IRP проходит по драйверному стеку
сначала сверху-вниз, а затем завершается снизу-вверх.

Цитата Сообщение от NatiF Посмотреть сообщение
Я вероятно, несу ахинею
Вовсе нет. У Уолтера Они в его знаменитой книге описаны основные принципы
разработки фильтрующих драйверов, советую почитать, кстати.
1
75 / 9 / 1
Регистрация: 07.06.2016
Сообщений: 132
25.07.2016, 03:24  [ТС]
Цитата Сообщение от Убежденный Посмотреть сообщение
У Уолтера Они в его знаменитой книге описаны основные принципы
разработки фильтрующих драйверов, советую почитать, кстати.
Спасибо большое. Скачал. Читаю. На 43 странице есть даже схема, как нижний и верхний фильтрующие драйвера "оккупируют" функциональный. И это нужно, получается, для выпуска обновлений для драйверов: они или добавляют функционал или исправляют ошибки старого драйвера - я так понял. Книжка 2007 года, там вообще много актуального? Все-таки времени прошло уже почти 10 лет.
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
25.07.2016, 09:21
Цитата Сообщение от NatiF Посмотреть сообщение
Книжка 2007 года, там вообще много актуального? Все-таки времени прошло уже почти 10 лет.
Актуального много. В драйверах не так быстро все меняется, как в вебе, например.
Некоторые внутренние структуры и принципы работы могут не меняться десятилетиями.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.07.2016, 09:21

Как быть увереным, что приложение будет работать на машине пользователя?
Как я понял, изделие на VC++ даже в релиз использует библиотеки MFC. (кстати, тот же C++Builder - только Windows-овские) Можно ли быть...

Будет ли работать драйвер звуковой карты при обновлении Vista Home Basic до Windows 7?
Здравствуйте. Хочу обновить винду с Vista Home Basic до Windows 7 Home Basic. В этой статье прочел, что на лицензионной версии системы...

DNS на виртуальной машине
Всем привет. Поставил семерку на виртуальную машину, установил сетевой мост, прописал айпи адрес, адреса DNS-серверов и другие...

[Gentoo] Gentoo на виртуальной машине
Решила потрогать генту (Gentoo 20121221 http://gentoo.mirrors.tds.net/pub/gentoo//releases/amd64/20121221/?C=S;O=A) на виртуалке Oracle VM...

Ubuntu в виртуальной машине
Я установил убунту 16 vmware player. Но хочу на virtualbox. у меня 64 битная система. гостевая тоже 64 бит. а в списке выбора только 32...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
34
Ответ Создать тему
Новые блоги и статьи
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru