Как создать новый 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-порт?