您的位置:首页 > 其它

防止系统时间被更改的一种想法

2011-01-21 22:43 204 查看
背景:

项目上的业务会涉及到时间的问题,最近一段时间客户向我们反映说在统计客户办理业务时间的时候,经常会出现负数,让我们查找原因;经过我们分析数据后得出的结论,基本确定是由于在使用的过程中系统时间被篡改,导致开始时间比结束时间大,所以才会出现这个问题!

想法:

因为以前用过全局钩子,感觉这个可能用上,但是经过实际验证,不管用什么钩子,都不会拦截到WM_TIMECHANGE消息,所以转而投入到网上寻求解决方法!

从网上查到预防系统时间被更改的方法不都,其中的一个就是更改修改系统时间的客户权限,这个具体操作可以从网上找!

另外还从网上注意到一句话,当系统时间被更改的时候,系统会向所有的进程中发送WM_TIMECHANGE消息,然后网上提供了一个解决方法(是用Dephil写的),答题意思是,建立一个定时器,隔一定的时间去读一次系统时间,然后在窗口处理函数中,拦截WM_TIMECHANGE消息,当收到WM_TIMECHANGE时,自动将系统时间设置为上次调用定时器函数时读到的数据,但是我觉得这种方法不行,因为如果在两次调用定时器函数之间,监测到时间被更改,然后再将时间设置为上次读到的正确时间,这已经导致时间不准确了!

最后,我想到了一个方法,用过C++的朋友都应该对GetTickCount(),GetLocalTime()等系列函数不陌生吧,我的想法是在函数启动的时候,先调用GetTickCount()一次,保存到一个变量中,此时再调用一次GetLocalTime()函数,获取到当前系统时间,然后保存到SYSTEMTIME对象中;当调用定时器函数时,再取一次GetTickCount()值,然后判断两次值的差,然后把这个差加到上次的SYSTEMTIME对象中,然后再设置当前系统时间

现在还只是这个想法,也正在用程序验证着,稍后会把代码贴出来
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: