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

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

08.07.2016, 18:02. Показов 5446. Ответов 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
Ответ Создать тему
Новые блоги и статьи
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru