В диспетчере устройств если вызвать контекстное меню любого устройства то можно увидеть (Обновить драйверы..., отключить, удалить, обновить конфигурацию оборудования, свойства).
Для моей виртуальной клавиатуры отсутствует отключить и удалить.
Убрал всё лишнее и оставил следующий код.
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)
{
KdPrint(("DRIVER_ENTRY DriverObject=%Xh;\n", DriverObject));
DriverObject->DriverUnload = DriverUnload;
DriverObject->DriverExtension->AddDevice = AddDevice;
return 0;
}
NTSTATUS AddDevice(IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT pdo)
{
PDEVICE_OBJECT fdo;
NTSTATUS status = IoCreateDevice(DriverObject, sizeof(DEVICE_EXTENSION), NULL, FILE_DEVICE_KEYBOARD, NULL, true, &fdo);
if (!NT_SUCCESS(status)) {
KdPrint(("HID emulation: createPdoFilter IoCreateDeviceSecure error: %x\n", status));
return status;
}
KdPrint(("ADD_DEVICE DriverObject=%Xh; pdo=%Xh; fdo=%Xh\n", DriverObject, pdo, fdo));
return 0;
}
VOID DriverUnload(IN PDRIVER_OBJECT DriverObject)
{
KdPrint(("UNLOAD DriverObject=%Xh; DeviceObject=%Xh\n", DriverObject, DriverObject->DeviceObject));
IoDeleteDevice(DriverObject->DeviceObject);
}
При установке выполняется DriverEntry и AddDevice.
Мне кажется что виновником является kbdclass.sys
Если убрать функцию AddDevice то драйвер спокойно удаляется.