小弟现在想编写下面的代码:
运行某个程序,记录下该程序曾经读过哪些文件、写过哪些文件。请问有没有方法可以做到这个,应该怎么做?谢谢。

解决方案 »

  1.   

    http://www.codeproject.com/shell/shchangenotifyregister.asp
      

  2.   

    非常感谢jiangsheng(蒋晟.MSMVP2004Jan)。可是,我试了里面的方法,发现这里方法只能检测出浏览器对文件的一些操作,并不能检测出其它应用程序对文件的操作。请问要监视其它应用程序的(读写)操作有什么好方法吗?或者,如果上面文章里的SHChangeNotifyRegister可以,怎样具体实现呢?请赐教。
      

  3.   

    用FindFirstChangeNotification看看,但是不要依赖于这些通知。参考http://www.geocities.com/SiliconValley/4942/notify.html。
      

  4.   

    试过了 FindFirstChangeNotification , 它确实能检测出所有应用程序对目录内文件的改动,可是:它不能检测出其他程序对文件的读操作,而且,无法知道具体是哪个应用程序对哪个文件进行了操作。还有,我还找到了一个函数:ReadDirectoryChangesW,它能检测出对哪个文件进行了操作,可是,仍然不知道是哪个应用程序操作的,也不能得到是否有程序对文件进行了读的操作。有没有函数能检测出是哪个应用程序操作的,以及程序对文件进行了读的操作能否得到?期待回答。(顺便说一句,http://www.geocities.com/SiliconValley/4942/notify.html我打不开)
      

  5.   

    提供思路:
        1.做一个API HOOK,钩住API中相关文件打开,读写函数。
        2.一不做二不休,替换系统KERNEL32.DLL。
      

  6.   

    >>提供思路:
        1.做一个API HOOK,钩住API中相关文件打开,读写函数。
        2.一不做二不休,替换系统KERNEL32.DLL。感觉难度不小,仰慕!
      

  7.   

    >>回复人: zijida(深水游鱼,吐泡泡被追殴)
    >>提供思路:
    >>   1.做一个API HOOK,钩住API中相关文件打开,读写函数。
    这个怎么做呀?请问有相交的资料吗?还有,如果是dos程序的操作,也能钩得到吗?
      

  8.   

    (已经结贴照样顶!)
    回答你上面的问题。API Hook是windows操作系统下对系统提供的API函数的一种干预方法。它通过修改进程环境上下文来"钩住"API调用,以达到监视,甚至修改标准API功能的目的。API函数一般都是由系统核心动态库及扩展库提供的,而文件操作函数就是由KERNEL32.DLL提供。所以对于运行于实模式下的dos程序的话,API Hook是没有作用的。API Hook的标准实现在很多资料里都讲过,网上也有很多文章来讲。
    首先是提供一个标准API函数的替代函数,也就是说,在系统调用到你HOOK的API时,你想要做什么动作,都可以在你的替代函数里实现。然后就是HOOK技术。这个我讲一下原理:系统中每个进程维护一张Import Table,记录着进程运行中需要用到的外部函数的地址。HOOK的原理就是用替代函数的入口替换要HOOK的函数的入口,这样当外部函数被调用时,被调用的就是替代函数。现在标准的作法是系统钩子DLL,就是写一个实现了函数入口替换的DLL,通过系统钩子挂接到当前系统下的每个进程中去,挂接时完成函数入口替换。对于DOS程序无法做到监视另一程序操作。
      

  9.   

    非常感谢 zijida(深水游鱼,吐泡泡被追殴)你的这段话让我学到了很多东西 ^_^