Возможно ли открыть драйвер-фильтр из-под user-а

Тема в разделе "WASM.WIN32", создана пользователем tisole, 6 мар 2012.

  1. tisole

    tisole New Member

    Публикаций:
    0
    Регистрация:
    23 май 2011
    Сообщения:
    4
    Здравствуйте всем!

    Возникла следующая ситуация:
    имеется драйвер-фильтр, который я хочу открыть в приложении с помощью функции
    Код (Text):
    1. m_hDriver = CreateFile(
    2. IPM_SYMBOLIC_DRIVER_NAME,
    3. GENERIC_READ | GENERIC_WRITE,
    4. 0,
    5. NULL,
    6. OPEN_EXISTING,
    7. 0,
    8. NULL
    9. );
    Если приложение работает под админом — все отлично. Как только запускаю приложение
    под пользователем без прав админа, при открытии драйвера появляется ошибка access denied.

    В связи с этим хотелось бы спросить у участников форума, возможно ли открытие драйвера под user-ом
    с помощью CreateFile. Может быть помогут некие манипуляции с параметром LPSECURITY_ATTRIBUTES, который сейчас NULL.
     
  2. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    tisole
    Какой именно девайс ты пытаешься открыть - CDO или FiDO?
    Как создаётся этот девайс в драйвере и как он там используется?
     
  3. shchetinin

    shchetinin Member

    Публикаций:
    0
    Регистрация:
    27 май 2011
    Сообщения:
    715
    tisole
    1)Простой юзер не должен иметь доступ к драйверам. Это как аксиома.
    2) LPSECURITY_ATTRIBUTES данный параметер действует только если вы создаете объект, но не открываете. А обращения к драйверу подрозумевает открытия (OPEN_EXISTING).
    Из под обычного пользователя таким способом нельзя обращатся к драйверу. Либо через промежуточное звено(сервис ) либо через шаред мемори(PIPEs, LPC которое создает драйвер ).
     
  4. tisole

    tisole New Member

    Публикаций:
    0
    Регистрация:
    23 май 2011
    Сообщения:
    4
    Я имею дело с NdisIMDriver.
    RegisterDevice в драйвере осуществляется как-то так
    Код (Text):
    1.         MajorFunction[IRP_MJ_CREATE]        = IoDispatch;
    2.         MajorFunction[IRP_MJ_CLOSE]     = IoDispatch;
    3.         MajorFunction[IRP_MJ_DEVICE_CONTROL] = IoDispatch;
    4.         MajorFunction[IRP_MJ_CLEANUP]       = IoDispatch;
    5.  
    6.         Status = NdisMRegisterDevice(m_Handle, "\\Device\\", "\\DosDevices\\", &MajorFunction[0], &pDeviceObject, &m_pNdisDeviceHandle);