MiniFilter - 如何仅检测用户发起的 i/o 活动?

MiniFilter - How to detect only User initiated i/o activities?

我只需要检测用户发起的 i/o 活动。 当我说用户时,我实际上是指用户(双击打开文件,输入, 等)。

Data->RequestorMode == 1,仅打印用户模式,我需要用户发起的操作。

所以,我需要知道如何只打印用户自己进行的交易。 (打开文件, 双击、输入等...如前所述)

有什么建议吗?

谢谢!

Data->RequestorMode == 1, prints only User mode

所以

if (Data->RequestorMode == UserMode) DbgPrint("%x\n", Data->RequestorMode);

仅打印 UserMode

或者我说得更好 - if UserMode print UserMode - 仅打印 UserMode ..

双击文件时,您是在要求资源管理器代表您执行操作。 Explorer 通过检查文件的扩展名、查找与该扩展名关联的应用程序并根据打开文件的说明启动它来执行此操作。

Windows加载器负责将应用程序加载到内存中并设置它运行。为此,它必须至少打开可执行文件,通常是一个或多个 DLL。应用程序启动后,它可能还会在打开用户要求的文件之前打开一些配置文件。

所有这些打开的操作都是在同一个上下文中执行的。内核知道文件打开是哪个进程发起的,但是它无法区分它是由 Windows 加载程序打开的还是由应用程序本身打开的,也无法区分配置文件和用户双击的文件.因此,您将无法从文件系统筛选器驱动程序中检测到用户启动的文件打开操作。

也许可以使用 Windows Explorer 扩展,尽管这仅适用于使用 Explorer 或标准对话框之一打开的文件,即适用于大多数但不是所有应用程序。