在windows xp中,资源管理器(explorer.exe)对于文件的复制/粘接是通过CopyFile(ExW)来完成的。但是,到了windows7却不是这样了。由于要hook文件操作api,所以必须知道windows7的explorer.exe掉了些什么函数。
通过wingdb可以发现,步骤如下:
1)在windows7下安装wingdb,并下载符号文件,并作设置;
2)将wingdb附加到explorer.exe进程;
3)在WriteFile处添加断点:bp kernel32!WriteFile
4) 输入命令 g;
5) 在资源管理器中进行复制然后粘贴,当粘贴后,通过ALT+TAB切换到wingdb,发现已到断点;
6)查看堆栈,输入命令:k
我们会发现,windows7资源管理器的文件复制/粘贴,主要用了SHFileOperationEx函数,下面没有调用CopyFile之类的函数。并且在windows7的shell32.dll中并没有SHFileOperationEx函数(只有SHFileOperation类函数)。
于是我不知道如何去hook这个SHFileOperationEx函数了,我用的是Detours,并不清楚其实现原理。