flammmable 0 13 января, 2023 Опубликовано 13 января, 2023 · Жалоба Добрый день! Разбираюсь в процессе написания драйверов. Почитал Павла Йосифовича. Выкачал WDK, настроил Visual Studio, создал виртуалку с Windows. Вывел через KdPrint("Hello, world!"). И по скопипащенному из книги примеру при помощи драйвера и консольного приложения поменял приоритет треда. В последнем примере в функции DriverEntry создаётся (при помощи IoCreateSymbolycLink) текстовая ссылка (условно "MyDriver"), при помощи которой в main() приложения получается хэндлер: HANDLE hDevice = CreateFile(L"\\\\.\\MyDriver", ... Хочу создать виртуальный COM-порт. Для этого взял пример fakemode из майкрософтовских примеров. Я его успешно собрал, установил на виртуалку и запустил. COM-порт в диспетчере устройств не появился (что, наверное, логично). Значит, надо как-то сообщить драйверу о необходимости создания этого COM-порта. Но как? В DriverEntry у примера fakemodem нет создания текстовой ссылки: NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath ) { NTSTATUS status = STATUS_SUCCESS; WDF_DRIVER_CONFIG config; KdPrint(("Fakemode Function Driver Sample - Driver Framework Edition.\n")); KdPrint(("Built %s %s\n", __DATE__, __TIME__)); WDF_DRIVER_CONFIG_INIT( &config, FmEvtDeviceAdd ); status = WdfDriverCreate( DriverObject, RegistryPath, WDF_NO_OBJECT_ATTRIBUTES, &config, // Driver Config Info WDF_NO_HANDLE ); if (!NT_SUCCESS(status)) { KdPrint( ("WdfDriverCreate failed with status 0x%x\n", status)); } return status; } Но даже если как-нибудь (может, дописав в код fakemodem создание текстовой ссылки, а может , при помощи OpenDriver(...), но это не точно) удастся получить в приложении хэндлер, то что делать дальше? В примере от Microsoft нет кода приложения usermode для использования самого драйвера fakemodem.sys. Как ему внушить, что мне требуется создать COM-порт? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 182 13 января, 2023 Опубликовано 13 января, 2023 · Жалоба 33 минуты назад, flammmable сказал: Я его успешно собрал, установил на виртуалку и запустил. Он запустился? От него есть отладка в DebugView? Дело в том, что современные версии Windows не запускают драйвера без цифровой подписи, если не сделать определенных движений в этом направлении (тестовые ключи для подписи и/или временно отключение проверки подписи). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
flammmable 0 13 января, 2023 Опубликовано 13 января, 2023 · Жалоба On 1/13/2023 at 10:37 AM, makc said: Он запустился? От него есть отладка в DebugView? Дело в том, что современные версии Windows не запускают драйвера без цифровой подписи, если не сделать определенных движений в этом направлении (тестовые ключи для подписи и/или временно отключение проверки подписи). Вполне запустился и выдал отладку ) Разумеется, есть проблемы с запуском неподписанных драйверов. Но у Павла Йосифовича написаны рекомендации, как притупить бдительность системы проверки цифровой подписи, которым я следовал ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 182 13 января, 2023 Опубликовано 13 января, 2023 · Жалоба 3 часа назад, flammmable сказал: Для этого взял пример fakemode из майкрософтовских примеров. Мне кажется в контексте задачи виртуального COM-порта интереснее взять за основу https://github.com/microsoft/Windows-driver-samples/tree/main/serial/VirtualSerial2 Модем - это драйвер более верхнего уровня по отношению к COM-порту и логически он является потребителем функций, экспортируемых драйвером COM-порта. PS: обратите внимание на страничку https://docs.microsoft.com/windows-hardware/drivers/serports/, на которую указывает Readme из вышеуказанной ссылки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
flammmable 0 13 января, 2023 Опубликовано 13 января, 2023 · Жалоба On 1/13/2023 at 1:26 PM, makc said: Мне кажется в контексте задачи виртуального COM-порта интереснее взять за основу https://github.com/microsoft/Windows-driver-samples/tree/main/serial/VirtualSerial2 Модем - это драйвер более верхнего уровня по отношению к COM-порту и логически он является потребителем функций, экспортируемых драйвером COM-порта. PS: обратите внимание на страничку https://docs.microsoft.com/windows-hardware/drivers/serports/, на которую указывает Readme из вышеуказанной ссылки. fakemodem гораздо более лаконичен (хотя ioctl.c у него будь здоров) в сравнении с VirtualSerial2. По моему мнению начинать нужно с малого и двигаться к большому. Так-то исходный код com0com тоже выложен, но с начальными знаниями определить, что является в нём основным, а что вспомогательным, не представляется возможным. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться