|
1 / 1 / 0
Регистрация: 18.07.2017
Сообщений: 50
|
|||||||||||
Как создать новый COM порт в диспетчере устройств с использованием fakemodem.sys?13.01.2023, 10:32. Показов 1468. Ответов 1
Метки нет (Все метки)
Добрый день!
Разбираюсь в процессе написания драйверов. Почитал Павла Йосифовича. Выкачал WDK, настроил Visual Studio, создал виртуалку с Windows. Вывел через KdPrint("Hello,world!"). И по скопипащенному из книги примеру при помощи драйвера и консольного приложения поменял приоритет треда. В последнем примере в функции DriverEntry создаётся (при помощи IoCreateSymbolycLink) текстовая ссылка (условно "MyDriver"), при помощи которой в main() приложения получается хэндлер:
0
|
|||||||||||
| 13.01.2023, 10:32 | |
|
Ответы с готовыми решениями:
1
Новый ноутбук не видит внешний жесткий диск даже в диспетчере устройств Как создать ярлык для "сетевые адаптёры" в Диспетчере устройств Новый SSD не отображается в БИОСе, но отображается в диспетчере устройств при подключении через USB-переходник |
|
Эксперт Hardware
|
|||||||||||||||||||||||||||||||||
| 17.01.2023, 13:22 | |||||||||||||||||||||||||||||||||
|
На вашем месте я бы начал с классической модели драйверов WDM, а не как в примере выше WDF, где большинство действий происходят под капотом прозрачно. Когда освоите WDM, можно будет переходить на WDF. Плюс такого подхода в том, что вы будете понимать, что именно делаете и зачем записывать то или иное значение в служебные структуры драйвера.
IoCreateDevice() (модель драйвера WDM), и только потом привязывать к нему линк IoCreateSymbolicLink() для вызова из приложений юзера. Как-правило, это делается внутри процедуры точки-входа DriverEntry(), которая ожидает от диспетчера в/в указатель на основную структуру драйвера DRIVER_OBJECT. В этой структуре мы должны прописать указатели на остальные функции драйвера, обязательными из которых являются DriverUnload() и AddDevice() - первая выгружает драйвер из памяти, а вторая будет вызываться каждый раз, когда диспетчер PnP обнаружит подключённое к порту устройство. Более того, в хвосте структуры DRIVER_OBJECT (по смещению 70h) имеется массив из 28-указателей на обработчики мажорных кодов IRP, куда нужно будет выборочно прописать обслуживаемые драйвером коды - поле так и называется "DRIVER_OBJECT.MajorFunction". Здесь имеет смысл воспользоваться отладчиком WinDbg, вот как он представляет эту структуру на системах х64:
IoCreateDevice(), а нам нужно лишь указать адрес процедуры DriverUnload() в своём драйвере, и перечень мажорных кодов, которые мы собираемся обслуживать. Указатель на обязательную AddDevice() зарыт в поле DriverExtension по смещению 30h (в нём лежит линк на одноимённую структуру):
IoCreateDevice(), которая имеет прототип ниже. Здесь в аргументе "DeviceType" передаём тип создаваемого устройства (полный список см. в хидере Ntddk.h, или здесь). Она возвратит указатель на структуру объекта нового устройства DEVICE_OBJECT:
Таким образом, отобразить устройство в диспетчере не проблема, но чтобы заставить его драйвер исправно функционировать, нужно согласно конкретному протоколу обмена, написать сотни строк кода. Обойти эту проблему можно двумя способами: (1)импортировать в свой драйвер функции системного serial.sys (тогда не нужно будет писать свои); или (2)просто не создавать свою, а утащить уже готовую структуру DRIVER_OBJECT у драйвера serial.sys.
fffffa80`0298d700 (первая строка лога). Так-же указаны адреса внутренних процедур DriverEntry(), DriverUnload(), AddDevice(), и типы обрабатываемых запросов IRP (nt!IopInvalidDeviceRequest означает необрабатываемая заглушка). К примеру, когда мы вызываем из своего/юзерского приложения CreateFile(), то управление получает процедура драйвера IRP_MJ_CREATE, когда закрываем дескриптор через CloseHandle() - IRP_MJ_CLOSE, и т.д. Таким образом, системный драйвер serial.sys обрабатывает всего 13 запросов, из 28-ми (1bh) возможных.Поскольку лог уже вернул нам адрес структуры DRIVER_OBJECT=fffffa80`0298d700, мы можем просмотреть её содержимое в заполненном виде. Если взять значения из выделенных стрелками полей, то они совпадают с теми, что в логе выше: kd> dt _driver_object
Так выглядит картина в общих чертах.. Утилита "WinObj" от sysinternal позволит отследить, создалось-ли устройство fn IoCreateDevice(), и привязала-ли IoCreateSymbolicLink() к нему линк, в пространстве имён объектов ядра.
0
|
|||||||||||||||||||||||||||||||||
| 17.01.2023, 13:22 | |
|
Помогаю со студенческими работами здесь
2
В диспетчере устройств, в контроллерах запоминающих устройств висит желтый значек SSD в диспетчере устройств виден как HDD Флешка определяется в диспетчере устройств, но не отображается как диск Как заставить автоматически запускаться устройства в диспетчере устройств? Отключил встроенное видео в диспетчере устройств, как починить? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|