2017-02-11 11 views
0

Я написал драйвер режима ядра для доступа к памяти на плате PCI Express, и я могу общаться с драйвером IO Control с помощью функций CreateFile и DeviceIOControl. Все выглядит хорошо, за исключением того факта, что пользовательское приложение должно запускаться с правами администратора, поскольку требуется доступ на чтение/запись к устройству PCI. Это вызов в моем приложении, потому что я не могу ожидать, что мои пользователи получат права администратора при запуске приложения. Чтобы решить эту проблему, я привел следующие идеи:Доступ к драйверу IOControl из пользовательского приложения без администратора priviledge

1) Создание именованного канала в драйвере и доступ к нему в пользовательском приложении, но я не уверен, что драйвер имеет доступ к API окон для создания и доступа именованный канал.

2) Создание службы Windows, которая запускается с правами администратора и становится интерфейсом между пользовательским приложением и драйвером. Хотя это практично, это решение кажется излишним.

Я ценю любые комментарии по вышеуказанным решениям, а также общую практику общения с водителем.

Благодаря

+0

Использование DeviceIOControl(), безусловно, может быть кикер-убийцей, поэтому обычно требуются права доступа администратора. Установщик драйверов определяет значение для ключа безопасности. Посмотрите на c: \ windows \ inf \ wvid.inf для примера, раздел [Vid_Device.NT.AddReg]. Выполнение его программно после установки [обсуждается здесь] (https://msdn.microsoft.com/en-us/library/windows/hardware/ff563755 (v = vs.85) .aspx). –

ответ

2

Ваш водитель может назначить любые разрешения подходят на объекты устройство создает. Настройки по умолчанию позволяют администраторам отправлять запросы управления ввода-вывода на устройство, но вы можете настроить его, как вам нравится.

Раздел MSDN под названием Securing Device Objects охватывает это.

1

Спасибо всем за предоставление ваших комментариев. WdfDeviceInitAssignSddlString - это то, что мне нужно было использовать в моем KMDF. Этот API определяет привилегии, необходимые для доступа к контроллеру ввода-вывода драйвера.