Ошибка при switch user

Тема в разделе "WASM.NT.KERNEL", создана пользователем Weberd, 17 окт 2008.

  1. Weberd

    Weberd New Member

    Публикаций:
    0
    Регистрация:
    14 июн 2007
    Сообщения:
    67
    Есть драйвер, создающий для связи с юзер-мод девайс и символическую ссылку.
    Код (Text):
    1.     RtlInitUnicodeString(&DeviceName,       dDeviceName);
    2.     RtlInitUnicodeString(&SymbolicLinkName, dSymbolicLinkName);
    3.  
    4.     status = IoCreateDevice(DriverObject,   // pointer to driver object
    5.         0,                // размер дополнительной памяти связанной с устройством
    6.         &DeviceName,      // device name
    7.         FILE_DEVICE_NULL, // device type
    8.         0,                // device characteristics
    9.         FALSE,            // is device exclusive
    10.         &DeviceObject);   // pointer to device object
    11.  
    12.     DbgPrint("Device create status:  %d", status);
    13.  
    14.     if (status == STATUS_SUCCESS)
    15.         status = IoCreateSymbolicLink(&SymbolicLinkName, &DeviceName);
    16.     else
    17.     {
    18.         DbgPrint("symbol link not created");
    19.         return STATUS_DEVICE_NOT_READY;
    20.         }
    После запуска драйвера перестает работать возможность переключения пользователей (Switch user). При попытке переключения появляется черный экран и сообщение в DebugView - Trying to disable physical device not enabled in this session.

    Кто-нибудь сталкивался с такой проблемой?
    Может быть есть другие способы взаимодействия между драйвером и юзер-модом при которых не возникают подобные проблемы?
     
  2. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Если symbol link не создана, устройство надо удалить.

    Код (Text):
    1. NTSTATUS
    2. DriverEntry(
    3.         IN PDRIVER_OBJECT DriverObject,
    4.         IN PUNICODE_STRING RegistryPath)
    5. {
    6.     NTSTATUS    st;
    7.     PCWSTR      dDeviceName       = L"\\Device\\hookmon";
    8.     PCWSTR      dSymbolicLinkName = L"\\DosDevices\\hookmon";
    9.  
    10.     RtlInitUnicodeString(&DeviceName, dDeviceName);
    11.     RtlInitUnicodeString(&SymbolicLinkName, dSymbolicLinkName);
    12.  
    13.     st = IoCreateDevice(DriverObject, 0, &DeviceName, FILE_DEVICE_NULL, 0, FALSE, &deviceObject);
    14.     if (NT_SUCCESS(st)) {
    15.         st = IoCreateSymbolicLink(&SymbolicLinkName, &DeviceName);
    16.         if (NT_SUCCESS(st)) {
    17.             DriverObject->MajorFunction[IRP_MJ_CREATE] =
    18.             DriverObject->MajorFunction[IRP_MJ_CLOSE]  =
    19.             DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = DriverDispatcher;
    20. #ifdef DEBUG
    21.             DriverObject->DriverUnload = DriverUnload;
    22. #endif
    23.             }
    24.         else {
    25.             IoDeleteDevice(deviceObject);
    26.             }
    27.         }
    28.    
    29.     return st;
    30. }
     
  3. Weberd

    Weberd New Member

    Публикаций:
    0
    Регистрация:
    14 июн 2007
    Сообщения:
    67
    Это мне не помогает, из-за того, что все запускается нормально, но винда не может удалить device.