如何在Vista&上连接FS Minifilter驱动程序和我的应用程序Win7的?

时间:2011-05-19 14:05:53

标签: c++ visual-studio-2010 driver interaction

我在这里:

  • 用户应用程序 - 它是MSVC项目,服务,用C ++编写,带有小型Boost& STL(应用程序正在使用钩子来获取用户的操作)
  • 驱动程序 - 它是一个FS Minifilter驱动程序,用于监控USB挂载/卸载操作和文件移动

问题:在XP上,这两个人一起工作得非常好,但是当我开始将它们移植到Vista& Win7系统,麻烦迅速上升。

  • 驱动程序未安装,因为它未签名
  • 挂钩不起作用,因为在Vista及以上服务中放置了不同的会话,并且无法与用户会话交互(f * ck!)......
  • UAC - 当它打开时,它不会从我的应用程序访问驱动程序,等等......

但是:我只是想听听,是否有可能在Vista&上连接驱动程序和用户应用程序。 Win7与UAC-is-on,如果可能的话,必须有什么条件来执行这种交互(例如,驱动程序必须签名或者其他东西......)?

非常感谢!

2 个答案:

答案 0 :(得分:2)

您的驱动程序应该为用户模式应用程序公开虚拟设备以打开并与之交互(通常通过IOCTL)。

这完全独立于您正在使用的文件系统设备层。

当您的驱动程序创建此新虚拟设备时,它可以设置权限以允许任何用户打开它,只允许提升管理员等。


最后请注意,您提到的内容(监视mount,unmount和MoveFile)已内置于Windows中。我不知道为什么在编写驱动程序时可以使用WM_DEVICECHANGE(对于mount / unmount)和FindFirstChangeNotification / ReadDirectoryChangesW和/或NTFS日志进行MoveFile检测。

答案 1 :(得分:0)

如果您在启动时设置选项,则可以安装未签名的驱动程序(google for it,不记得它是如何完成的)。使用钩子来获取用户操作绝不是一个好主意。使用IPC。 IIRC您可以在调用CreateService时设置Desktop标志(SERVICE_INTERACTIVE_PROCESS),告诉服务它可以与桌面交互。 如果你想获得有关USB mount / umount的通知你为什么不使用系统事件和文件修改FindFirstChangeNotification(http://msdn.microsoft.com/en-us/library/aa364417%28v=VS.85% 29.aspx)?