|
Заблокирован
|
|
Нужен пример простейшего драйвера на C/C++. Visual Studio 2008/новее. Win 8 x64, можно и XP x86 (а лучше оба)19.03.2015, 01:49. Показов 40431. Ответов 121
Метки нет (Все метки)
Совсем хорошо будет, если этот драйвер будет еще и делать что-то хоть как-то заметное юзером
![]() И совсем замечательно, если будет еще и вкратце объяснено, как его установить на обеих ОС ![]() P.S. Да-да, ![]() Добавлено через 43 секунды И да, можно в принципе и не VS 2008, а что-то еще, хоть MinGW. Только тогда попрошу пояснить, какая у вас версия того компилятора и как его юзать. Добавлено через 1 минуту VS только Express, так что VisualDDK, к сожалению, никак не пойдет...
1
|
|
| 19.03.2015, 01:49 | |
|
Ответы с готовыми решениями:
121
Как установить Windows 10 x64 (после обновления с Win 7 x86 до Win 10 x86) сохранив лицензию
Разработка драйвера в Visual Studio 2008 |
|
0 / 0 / 0
Регистрация: 24.09.2015
Сообщений: 18
|
|||||||||||
| 14.06.2017, 19:16 | |||||||||||
|
Всякое бывает, может и я плохо описал код, да и там в глаза бросается так, что может смешиваться инфа на первый взгляд.
У меня опыта особого нет, но я вот дебажу пока через DbgView, делаю выводы и там просматриваю. Кстати как я говорил у меня было предположение, что я саму логику кода, сам алгоритм не верно выстроил, криво реализовал, сейчас вроде обнаружил зацикленность, не правильно проверку задал. Это в другом списке, не в том, что я описал тут. Ну со своим кодом я, конечно, сам разберусь) Мне просто было важно услышать от Вас - правильно ли я понимаю механику, как должно всё выглядеть, эта работа со списком. Если всё верно, то додебажу и надеюсь всё будет хорошо) Добавлено через 3 часа 16 минут Продебажил, нашел ошибку. Не ожидал такого, казалось бы, что Windows вроде параллелизм не поддерживает, всё равно передаётся управление между потоками: сразу один выполяется, потом операционная система когда нужно передаёт управление другому потому и т.д, а тут в общем как-то случилось так, что одновременно два потока выполнились, а мне этого нельзя. В общем ситуация такая, что юзермодная программа делает запрос информации у драйвера, информации нет, я кидаю режим ожидания юзермодной программе, сохраняю пакет просто в глобальную переменную, устнавливаю глобальный флаг, что этот пакет есть и его можно юзать. В функции перехвата запуска процесса проверяется этот флаг и если он true, то завершается IoCompleteRequest для пакета, который хранится в глобальной переменной. Тут то и проблема, два потока одновременнно успевают зайти во флаг и два раза завершается один и тот же пакет. В итоге юзермодная программа первое завершение пакета игнорит, а второе завершение обрабатывается и в моём коде отправляется ответ драйверу. Таким образом первый процесс, который одновременно заюзал пакет со вторым процессом, завис, т.к я торможу его, пока не будет ответа от юзермодной программы, а ответа больше никогда не будет. Вы говорили что можно юзать списки для пакетов, но я их не юзал из тех соображений, что думал, что такого не будет, это раз, а два - это то, что у меня лишь будет только один такой пакет, который нужно сохранять, больше никогда не будет. А можно использовать наример не те списки для таких пакетов, а например какой-нибудь мьютекс. Чать кода в перехвате запуска программы установить типа защищенным и когда какой-то поток заходит при запуске процесса, при входе другого он будет остановлен, пока первый не выйдет? Добавлено через 1 час 3 минуты Такс, попробовал спин блокировки, по тому что увидел в интернете сделал вот так: Глобальные переменные
0
|
|||||||||||
|
Ушел с форума
|
|||||||||
| 15.06.2017, 09:58 | |||||||||
|
На двухъядерных и более процессорах потоки в системе могут физически выполняться параллельно. Во-первых, спин-лок - это очень опасный объект синхронизации. Неумелое его использование приводит к лишнему "прожиганию" CPU. А еще спин-лок накладывает ограничения на используемый тип памяти под блокировкой (только non paged, потому что под блокировкой всегда IRQL == DISPATCH_LEVEL). Этот объект синхронизации лучше использовать только исключительно там, где без него ну никак. А для остальных случаев есть fast mutex, ERESOURCE и т.д. Во-вторых, завершать пакет лучше не под блокировкой, а вне ее:
0
|
|||||||||
| 15.06.2017, 09:58 | |
|
User32.dll на Win x64 - это x86-библиотека, x64 или. и то и другое одновременно? Установка Visual Studio 2008 на Windows 7 Professional x64 bit Qt Creator & MS Visual Studio создание окна в Win 7 x64 Win API в Microsoft Visual Studio 2008 Не ставится Win 7 x86 и Win 7 x64 на GPT раздел жесткого диска Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
[golang] Конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов.
alhaos 10.06.2026
Задача
Реализовать конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов.
Сигнатура
func Fetch(urls string, maxConcurrent int) Result
Пример
urls :=. . .
|
[golang] Состояние гонки (race condition)
alhaos 10.06.2026
Состояние гонки (race condition)
Состояние гонки (Race Condition) — это ошибка, возникающая при одновременном доступе нескольких горутин к одним и тем же данным без должной синхронизации. При этом. . .
|
Взрослые отношения, и почему они не получаются
kumehtar 09.06.2026
Когда в детстве ребёнок не получает от родителей чего-то важного, он лишается не просто приятных переживаний, а основы для формирования определённых внутренних качеств и навыков. Если ребёнок не. . .
|
[golang] Worker Pool
alhaos 09.06.2026
Worker Pool
Worker Pool — паттерн конкурентной обработки задач в Go.
Суть: фиксированное количество горутин-воркеров читают задачи из общего канала
и пишут результаты в общий канал результатов. . . .
|
|
[golang] Pipeline
alhaos 08.06.2026
Pipeline
Pipeline — паттерн конкурентной обработки данных в Go.
Суть: данные проходят через цепочку независимых стадий, каждая из которых работает в своей горутине и общается с соседями через. . .
|
Свет внутри себя
kumehtar 07.06.2026
Пусть это будет здесь
lIs4oanZS9Y
|
Программа для com-порта
Uhbif79 05.06.2026
Всем привет, давно хотел изучить Qt, начинал, бросал, потом снова начинал. И сейчас вот смог написать свою первую программу.
До этого имел опыт программирования микроконтроллеров, писал прошивки на. . .
|
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений.
. . .
|