Перейти к содержанию
    

Как создать новый COM-порт в диспетчере устройств при помощи fakemodem.sys?

Добрый день!
Разбираюсь в процессе написания драйверов. Почитал Павла Йосифовича. Выкачал 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-порт?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

33 минуты назад, flammmable сказал:

Я его успешно собрал, установил на виртуалку и запустил.

Он запустился? От него есть отладка в DebugView? Дело в том, что современные версии Windows не запускают драйвера без цифровой подписи, если не сделать определенных движений в этом направлении (тестовые ключи для подписи и/или временно отключение проверки подписи).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 1/13/2023 at 10:37 AM, makc said:

Он запустился? От него есть отладка в DebugView? Дело в том, что современные версии Windows не запускают драйвера без цифровой подписи, если не сделать определенных движений в этом направлении (тестовые ключи для подписи и/или временно отключение проверки подписи).

Вполне запустился и выдал отладку ) Разумеется, есть проблемы с запуском неподписанных драйверов. Но у Павла Йосифовича написаны рекомендации, как притупить бдительность системы проверки цифровой подписи, которым я следовал )

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 из вышеуказанной ссылки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 тоже выложен, но с начальными знаниями определить, что является в нём основным, а что вспомогательным, не представляется возможным.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...