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

发布于 2024-11-08 14:31:19 字数 583 浏览 4 评论 0原文

这是我所拥有的:

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

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

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

但是:我只是想听听,是否真的可以在 Vista 和 Windows 上连接驱动程序和用户应用程序? Win7 与 UAC-is-on,如果可能的话,执行此交互必须满足哪些条件(例如,驱动程序必须签名或可能是其他东西......)?

非常感谢!

Here what I have:

  • the user application - it's MSVC project, service, written on C++ with small Boost & STL (app are using hooks to get users actions)
  • the driver - it's a FS Minifilter Driver, that monitors USB mount/umount actions, and file movements

Problem: On XP, this two guys works great together, but when I'm started to port them on Vista & Win7 systems, the troubles rised quickly.

  • driver doesn't installing, because it's not signed
  • hooks are not working, because in Vista and above servicies are placed to the different session, and unable to interact with user session (f*ck!)...
  • UAC - that doesn't gave access from my application to driver when it's ON, and so, and so...

But: I just want to hear, is there realy possible to connect driver and user application on Vista & Win7 with UAC-is-on, and if it's possible, what are conditions must be to perform this interaction (for example, driver must be signed or maybe something else...)?

Great thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

吐个泡泡 2024-11-15 14:31:19

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

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

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


最后一点,您提到的内容(监视挂载、卸载和 MoveFile)已经内置于 Windows 中。我不知道为什么当您可以使用 WM_DEVICECHANGE (用于安装/卸载)和 FindFirstChangeNotification/ReadDirectoryChangesW 和/时还要编写驱动程序或用于 MoveFile 检测的 NTFS 日志。

Your driver should expose a virtual device for the user-mode application to open and interact with (often via IOCTLs).

This is completely independent of the filesystem device layers you are already working with.

When your driver creates this new virtual device, it can set permissions to allow any user to open it, only elevated admins, etc.


As a final note, the things you mentioned (monitoring mount, unmount, and MoveFile) are already built into Windows. I don't know why you are writing a driver when you could use WM_DEVICECHANGE (for mount/unmount) and the FindFirstChangeNotification/ReadDirectoryChangesW and/or NTFS logs for MoveFile detection.

国粹 2024-11-15 14:31:19

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

You can install unsigned drivers if you set the option on boot (google for it, can't remember how it's done). Using hooks to get user action is never a good idea. Use IPC. IIRC you can set a Desktop flag (SERVICE_INTERACTIVE_PROCESS) when calling CreateService that tells the service it can interact with the desktop.
If you want to get notifications about USB mount/umount why don't you use system events, and for file modifications FindFirstChangeNotification (http://msdn.microsoft.com/en-us/library/aa364417%28v=VS.85%29.aspx)?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文