0

这是我所拥有的:

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

问题:在 XP 上,这两个家伙一起工作很好,但是当我开始将它们移植到 Vista 和 Win7 系统上时,问题很快就出现了。

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

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

十分感谢!

4

2 回答 2

2

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

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

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


最后一点,您提到的内容(监控挂载、卸载和移动文件)已经内置在 Windows 中。我不知道您为什么要编写驱动程序,而您可以使用WM_DEVICECHANGE(用于挂载/卸载)和FindFirstChangeNotification/ReadDirectoryChangesW和/或 NTFS 日志进行 MoveFile 检测。

于 2011-05-19T14:14:49.420 回答
0

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

于 2011-05-19T14:15:28.583 回答