Winapi Windows资源管理器以一种巧妙的方式监视目录更改?

Winapi Windows资源管理器以一种巧妙的方式监视目录更改?,winapi,explorer,readdirectorychangesw,Winapi,Explorer,Readdirectorychangesw,我有一个沙箱系统,通过挂接Ntxxx文件系统API重定向文件修改。有趣的是,如果我在我的沙盒中移动记事本->文件/打开对话框中的文件,例如从desktop\a.txt移动到desktop\b\a.txt,real desktop上的a.txt文件就会消失,在我按F5刷新real desktop后,它会回来。实际上,桌面文件夹中根本没有任何更改,因为所有更改都是定向的。我知道大多数应用程序使用像ReadDirectoryChanges这样的API来监控更改,但显然explorer做了一些不同的事情

我有一个沙箱系统,通过挂接Ntxxx文件系统API重定向文件修改。有趣的是,如果我在我的沙盒中移动记事本->文件/打开对话框中的文件,例如从desktop\a.txt移动到desktop\b\a.txt,real desktop上的a.txt文件就会消失,在我按F5刷新real desktop后,它会回来。实际上,桌面文件夹中根本没有任何更改,因为所有更改都是定向的。我知道大多数应用程序使用像ReadDirectoryChanges这样的API来监控更改,但显然explorer做了一些不同的事情。我试过这样的工具,他们并没有观察到桌面上的任何变化。我猜SHFileOperation在某种程度上与资源管理器进行了内部交互,但谁知道详细信息以及如何防止此通知?用户看到一个文件在实际存在时消失了,这真的很奇怪。

windows调用windows\u存储!SHChangeNotify而不是shell32中的那个。为什么Windows有两个相同API的副本,它们不同吗?

我不知道你看到了什么。但是Shell也使用它来获得更改通知。命名空间中的任何文件夹都可以通知侦听这些事件的任何人某些内容已更改,即使事实上没有更改。例如,如果我通知资源管理器某个项目已被删除,它将被删除并在下次刷新时重新出现,但我没有看到windbgno中调用了SHChangeNotify,我想知道Nofication资源管理器接收到的是什么。好的,它肯定不是SHChangeXXX,我在资源管理器中阻止了所有SHChangeNotifyRegister和SHChangeNotifyRegisterThread调用,但它还是消失了!!!