Как подключить драйвер минифильтра FS и мое приложение к Vista и Win7? - PullRequest
0 голосов
/ 19 мая 2011

Вот что у меня есть:

  • пользовательское приложение - это проект MSVC, сервис, написанный на C ++ с небольшим Boost & STL (приложение использует хуки для получения действий пользователя)
  • драйвер - это драйвер минифильтра FS, который отслеживает действия монтирования / размонтирования USB и перемещения файлов

Проблема :В XP эти два парня прекрасно работают вместе, но когда я начал их портировать на системы Vista и Win7, проблемы быстро нарастали.

  • драйвер не устанавливается, потому что он не подписан
  • перехватчики не работают, потому что в Vista и выше службы размещаются в другом сеансе и не могут взаимодействовать с сеансом пользователя (f * ck!) ...
  • UAC - это не 'я получил доступ из моего приложения к драйверу, когда он включен, и так, и так ...

Но : я просто хочу услышать, есть ли реально подключить драйвери пользовательское приложение на Vista и Win7 с включенным UAC, и если это возможно, каковыдолжны быть условия для выполнения этого взаимодействия (например, драйвер должен быть подписан или что-то еще ...)?

Большое спасибо!

Ответы [ 2 ]

2 голосов
/ 19 мая 2011

Ваш драйвер должен предоставлять виртуальное устройство для открытия приложения пользовательского режима и взаимодействия с ним (часто через IOCTL).

Это полностью не зависит от слоев устройств файловой системы, с которыми вы уже работаете.

Когда ваш драйвер создает это новое виртуальное устройство, он может устанавливать разрешения, позволяющие открывать его любому пользователю, только администраторам с повышенными правами и т. Д.


В качестве заключительного замечания, все, что вы упомянули (наблюдение за монтированием, размонтирование и перемещение файла), уже встроено в Windows. Я не знаю, почему вы пишете драйвер, когда вы можете использовать WM_DEVICECHANGE (для монтирования / размонтирования) и журналы FindFirstChangeNotification / ReadDirectoryChangesW и / или NTFS для обнаружения MoveFile.

0 голосов
/ 19 мая 2011

Вы можете установить неподписанные драйверы, если вы установили опцию при загрузке (Google для этого, не помню, как это сделано). Использование хуков для получения действий пользователя никогда не было хорошей идеей. Используйте IPC. IIRC вы можете установить флаг рабочего стола (SERVICE_INTERACTIVE_PROCESS) при вызове CreateService, который сообщает сервису, что он может взаимодействовать с рабочим столом. Если вы хотите получать уведомления о подключении / отключении USB, почему бы вам не использовать системные события, а также для изменений файлов FindFirstChangeNotification (http://msdn.microsoft.com/en-us/library/aa364417%28v=VS.85%29.aspx)?

...