Форум программистов, компьютерный форум, киберфорум
Программирование драйверов
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.59/205: Рейтинг темы: голосов - 205, средняя оценка - 4.59
Заблокирован

Нужен пример простейшего драйвера на C/C++. Visual Studio 2008/новее. Win 8 x64, можно и XP x86 (а лучше оба)

19.03.2015, 01:49. Показов 40553. Ответов 121
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Совсем хорошо будет, если этот драйвер будет еще и делать что-то хоть как-то заметное юзером
И совсем замечательно, если будет еще и вкратце объяснено, как его установить на обеих ОС

P.S. Да-да, драйвер мне нужен на губозакаточную машину я хочу многого и притом на халяву. Но вы же с чего-то начинали? Писали, так сказать, helloworld.sys? Вот им и поделитесь. А то в инете везде либо не поймешь как компилировать, либо не поймешь чем компилировать, либо вообще ничего не поймешь

Добавлено через 43 секунды
И да, можно в принципе и не VS 2008, а что-то еще, хоть MinGW. Только тогда попрошу пояснить, какая у вас версия того компилятора и как его юзать.

Добавлено через 1 минуту
VS только Express, так что VisualDDK, к сожалению, никак не пойдет...
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.03.2015, 01:49
Ответы с готовыми решениями:

Как установить Windows 10 x64 (после обновления с Win 7 x86 до Win 10 x86) сохранив лицензию
Вопрос такой. У меня стояла седьмая 32-ух битная винда. Но процессор 64 разрядный. Так вот, я обновился до десятки, которая тоже 32-ух...

X86 и x64 в Visual Studio 2017
Здравствуйте! Во общем мне очень интересно есть ли разница если компилировать в x86 и x64, будет ли не работать x86 на x64 и т.д?

Разработка драйвера в Visual Studio 2008
Здравствуйте! На компьютере установлена Visual Studio 2008 и WDK. Я в Visual Studio написал небольшой драйвер, в Visual Studio он...

121
0 / 0 / 0
Регистрация: 24.09.2015
Сообщений: 18
14.06.2017, 19:16
Студворк — интернет-сервис помощи студентам
Всякое бывает, может и я плохо описал код, да и там в глаза бросается так, что может смешиваться инфа на первый взгляд.

У меня опыта особого нет, но я вот дебажу пока через DbgView, делаю выводы и там просматриваю.

Кстати как я говорил у меня было предположение, что я саму логику кода, сам алгоритм не верно выстроил, криво реализовал, сейчас вроде обнаружил зацикленность, не правильно проверку задал. Это в другом списке, не в том, что я описал тут.

Ну со своим кодом я, конечно, сам разберусь) Мне просто было важно услышать от Вас - правильно ли я понимаю механику, как должно всё выглядеть, эта работа со списком. Если всё верно, то додебажу и надеюсь всё будет хорошо)

Добавлено через 3 часа 16 минут
Продебажил, нашел ошибку. Не ожидал такого, казалось бы, что Windows вроде параллелизм не поддерживает, всё равно передаётся управление между потоками: сразу один выполяется, потом операционная система когда нужно передаёт управление другому потому и т.д, а тут в общем как-то случилось так, что одновременно два потока выполнились, а мне этого нельзя.

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

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

Добавлено через 1 час 3 минуты
Такс, попробовал спин блокировки, по тому что увидел в интернете сделал вот так:

Глобальные переменные
C
1
2
KSPIN_LOCK lok;
KIRQL Irql;
Там где нужно( в перехвате запуска)
C
1
2
3
KeAcquireSpinLock(&lok, &Irql)
//действия и самое главное завершение пакета
KeReleaseSpinLock(&lok,Irql);
Вроде проблема исчезла, кстати у меня проблема данная паралеллизма возникла может из-за того, что я 2 if отдельно делал, ifы были одинаковы, просто пакет завершал во втором(просто во время дебага вынес так). А пока оно доходило до второго ifа, может другой процесс в первый и заходил. Но думаю нет гарантии, что без синхронизациии даже с одним if такого не повторится, поэтому инхронизацию оставлю) Пока не знаю, может и дальше баги будут... если что не правильно сделал, подкорректируйте, пожалуйста
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
15.06.2017, 09:58
Цитата Сообщение от Ranege Посмотреть сообщение
Не ожидал такого, казалось бы, что Windows вроде параллелизм не поддерживает
С чего бы? Еще как поддерживает.
На двухъядерных и более процессорах потоки в системе могут физически
выполняться параллельно.

Цитата Сообщение от Ranege Посмотреть сообщение
в общем как-то случилось так, что одновременно два потока выполнились, а мне этого нельзя.
Ну я подразумевал из твоего кода, что синхронизация все-таки где-то есть...

Цитата Сообщение от Ranege Посмотреть сообщение
Там где нужно( в перехвате запуска)
C
1
2
3
KeAcquireSpinLock(&lok, &Irql)
//действия и самое главное завершение пакета
KeReleaseSpinLock(&lok,Irql);
Лучше так не делать.

Во-первых, спин-лок - это очень опасный объект синхронизации.
Неумелое его использование приводит к лишнему "прожиганию" CPU. А еще спин-лок накладывает
ограничения на используемый тип памяти под блокировкой (только non paged, потому что под
блокировкой всегда IRQL == DISPATCH_LEVEL). Этот объект синхронизации лучше использовать
только исключительно там, где без него ну никак. А для остальных случаев есть fast mutex,
ERESOURCE и т.д.

Во-вторых, завершать пакет лучше не под блокировкой, а вне ее:
C
1
2
3
4
5
6
7
8
9
10
11
IRP * pIrp;
 
AcquireLock();
pIrp = g_StoredIrp;
g_StoredIrp = NULL;
ReleaseLock();
 
if (pIrp)
{
    // Завершаем IRP здесь.
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.06.2017, 09:58

User32.dll на Win x64 - это x86-библиотека, x64 или. и то и другое одновременно?
В проектах .NET функции из нее нормально импортируются при любой разрядности проекта - как x86, так и x64. Как написать такую библиотеку?

Установка Visual Studio 2008 на Windows 7 Professional x64 bit
Когда начинаю ставить визуал 2008 во время установки выбивает ошибку и дальше не продолжается, кто сталкивался может подскажете? Кроме...

Qt Creator & MS Visual Studio создание окна в Win 7 x64
Здравствуйте Нашел пример создания окна http://rastertek.com/gl40tut02.html все исходники и хедеры поместил в проект, созданный в Qt...

Win API в Microsoft Visual Studio 2008
Здравствуйте, уважаемые форумчане! Возникла такая проблема. Пишу простенькую программу с применением Win API, но компилятор ругается(( ...

Не ставится Win 7 x86 и Win 7 x64 на GPT раздел жесткого диска
Как пере конвертировать GPT в MBR без потери данных? или как установить Win 7 x86 на GPT, или Win 7 x64 ? У меня обе винды не ставится на...


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

Или воспользуйтесь поиском по форуму:
122
Ответ Создать тему
Новые блоги и статьи
Из невошедшего на форум (диалог с ИИ-гугла)
zorxor 29.07.2026
А вот, что интересно, сказал мне ИИ-гугла: Этот текст — эмоциональный пост пользователя под ником zorxor на интернет-форуме (вероятно, посвященном мистике, непознанному или альтернативной науке). . . .
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Новости компьютерного мира и их обсуждение (4) Салют, шампанское, овации! :drink:
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru