监视程序,这个名字听起来似乎很陌生。它的用途主要是在后台监视系统中关键信息的改变,比如注册表的改变及硬盘上由于文件操作引起的改变等等。
也许有人会问了,编制这样的程序有什么价值呢?硬盘上文件改变了,我只要在资源管理器里点一点不就全都清楚了吗?问题当然不会这样简单,如今大家的硬盘都已经用G来做单位了,一块4.3G的硬盘中,大大小小的文件全都加起来也会有若干万(相信新购机的朋友会考虑IBM10.1G的大硬盘,那文件数量将更加不可想象),更何况那些看不见的系统文件和隐藏文件了。再加上注册表,那其中的条条款款,数量也丝毫不逊于硬盘上的文件。要想随时知道自己机器是否有所变动,绝对不是一件很轻松的事。而监视程序就可以随时检测到这些变化,帮助我们了解这些情况。
当然这只是监视程序的一部分作用,它最大的作用就是可以记录下某个软件安装前后系统的改变,从而为卸载这个软件提供重要的依据。虽然Windows自带了一个Uninstall Shield,但是它似乎并不能很干净地把原来的软件卸掉,每次卸载总会留下一些讨厌的残渣,致使系统中的垃圾信息不断增长,我们的硬盘空间也总是莫名其妙地越用越少。因此,一些号称能够完全卸载软件的专用卸载工具应运而生。在这其中,有一些就运用了监视系统的技术,比如Uninstaller Manager和RegMonitor。
下面我们开始讨论如何编程实现这一监视功能。首先介绍几个重要的api函数:
FindFirstChangeNotification( );
FindNextChangeNotification( );
WaitForSingleObject( );
其中FindFirstChangeNotification(lpzpath,fwatchsubtree,fdwfilter)中的lpzpath表示要监视的路径名,fwatchsubtree判断是否查看子目录,fdwfilter为要监视的事件,函数执行成功后返回一个句柄。