Есть драйвер, создающий для связи с юзер-мод девайс и символическую ссылку. Код (Text): RtlInitUnicodeString(&DeviceName, dDeviceName); RtlInitUnicodeString(&SymbolicLinkName, dSymbolicLinkName); status = IoCreateDevice(DriverObject, // pointer to driver object 0, // размер дополнительной памяти связанной с устройством &DeviceName, // device name FILE_DEVICE_NULL, // device type 0, // device characteristics FALSE, // is device exclusive &DeviceObject); // pointer to device object DbgPrint("Device create status: %d", status); if (status == STATUS_SUCCESS) status = IoCreateSymbolicLink(&SymbolicLinkName, &DeviceName); else { DbgPrint("symbol link not created"); return STATUS_DEVICE_NOT_READY; } После запуска драйвера перестает работать возможность переключения пользователей (Switch user). При попытке переключения появляется черный экран и сообщение в DebugView - Trying to disable physical device not enabled in this session. Кто-нибудь сталкивался с такой проблемой? Может быть есть другие способы взаимодействия между драйвером и юзер-модом при которых не возникают подобные проблемы?
Если symbol link не создана, устройство надо удалить. Код (Text): NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath) { NTSTATUS st; PCWSTR dDeviceName = L"\\Device\\hookmon"; PCWSTR dSymbolicLinkName = L"\\DosDevices\\hookmon"; RtlInitUnicodeString(&DeviceName, dDeviceName); RtlInitUnicodeString(&SymbolicLinkName, dSymbolicLinkName); st = IoCreateDevice(DriverObject, 0, &DeviceName, FILE_DEVICE_NULL, 0, FALSE, &deviceObject); if (NT_SUCCESS(st)) { st = IoCreateSymbolicLink(&SymbolicLinkName, &DeviceName); if (NT_SUCCESS(st)) { DriverObject->MajorFunction[IRP_MJ_CREATE] = DriverObject->MajorFunction[IRP_MJ_CLOSE] = DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = DriverDispatcher; #ifdef DEBUG DriverObject->DriverUnload = DriverUnload; #endif } else { IoDeleteDevice(deviceObject); } } return st; }