最近研究了一下注册表监视,总结说来,可行的方法有以下四种,有其他做法,欢迎指出:
1.使用RegNotifyChangeKeyValue
这个函数可以监视注册表某一项及其子项的变化(包括添加、删除、修改等)。
此种方法的缺点:可以直接获取的注册表改变信息少之又少,如果是要获取比如修改项、修改时间、修改方式等,要通过其他方式来获取。
优点:平台兼容性好,98以后的系统基本都适用,与RegSaveKey、RegRestoreKey进行关联使用,实现注册表指定项的恢复。
2.使用ETW
ETW的意思就是windows事件追踪。
此种方法的缺点:注册表事件的跟踪直到windows server 2008和vista版本才具有,在其他低版本中,这种方式不起作用。
3.使用wmi
这种方式优点:系统兼容性强
缺点:RegistryKeyChangeEvent、RegistryTreeChangeEvent、RegistryValueChangeEvent获取相关数据时,它们只能监视“HKEY_LOCAL_MACHINE”下的变动,其他根键下的变动监视不了。
4.使用detours.lib
detours.lib是微软出的一个库,他可以用来监视win32 API的调用。根据这个机制,也可以监视注册表的变动。只需要监视对注册表进行操作的win32 API就可以了。这个库的32位版本可以从微软官网上免费下载,而且有相关商业开发的限制,具体可以看微软的说明,64位版的,只能付费得到。适用到微软各系统。
如有其他方式,欢迎指出。
转载于:https://blog.51cto.com/hakuyo/1215651