windows - 当用户创建挂载点时如何获得通知?

标签 windows winapi

首先,这里是限制条件:

  • 必须在 XP 上运行
  • 必须通知驱动器号分配和将卷安装到文件夹
  • 不得“唤醒”正在休眠的驱动器。
  • 我真的不想轮询驱动器。

我尝试过的:

  1. 谷歌
  2. 我查看了 WMI 和 Win32_LogicalDisk 类。我可以确定哪些驱动器安装到驱动器号,但不能确定安装到文件夹的驱动器。 Win32_Volume* 和 Win32_MountPoint 类将是完美的,但在 XP 上不可用。
  3. 我已经尝试使用 FindFirstVolume 和 GetVolumePathNamesForVolumeName 轮询驱动器(尽管我不想这样做),但似乎必须先启动驱动器才能提供信息。再一次,呃,轮询。

我正在考虑使用 API Hook 来 Hook 对 SetVolumeMountPoint 和 DeleteVolumeMountPoint 的调用的可能性,但我认为这不会捕获所有内容,而且看起来这可能是一个丑陋的 hack。

所以,是的,我正在寻找建议:)

最佳答案

SetVolumeMountPoint 上的 API Hook 应该可以让您拦截卷挂载。不过我不确定网络共享。

但这不会是一个“丑陋的黑客”。您正在尝试做的是 Windows 中内置的 Hook 。 Codeproject.com 有很棒的 AP​​I Hook 教程:http://www.codeproject.com/KB/system/hooksys.aspx

所以你实际上陈述了你自己的最佳解决方案。请记住,还有一个单独的驱动器号 API:http://nukz.net/reference/fileio/hh/winbase/fsys_6j8z.htm

您的项目听起来很有趣。通常,特洛伊木马和防病毒软件会尝试执行此操作(并且它们还会捕获网络共享。)我只是对这个话题很熟悉,所以我希望这对您有所帮助。

关于windows - 当用户创建挂载点时如何获得通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/226758/

相关文章:

winapi - "machine sleep"+ WaitForSingleObject + 有限超时

c++ - 使用 LogonUserW 并使用句柄执行应用程序

windows - 如何在批处理脚本中获取所有子文件夹的名称?

windows - Windows 主机文件中的通配符

php - PDO 驱动程序在 Windows 中没有值(value)

c++ - 是否可以在 MessageBox() 中显示 HWND->i?

c++ - 打印作业时,最后的作业状态是 JOB_STATUS_PAUSED,而不是 JOB_STATUS_PRINTED

c++ - 两个 Windows 应用程序可以使用命令行进行通信吗?

c# - StreamWriter 打开时修改日期不会更新

c++ - 为什么我不能在同一个分配中保留两个连续的内存区域而不用一次调用保留它们?