首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

(100分啊),VC如何在Vista和Win7下阻止手动的hibernate和sleep

2012-06-08 
在线等(100分啊!),VC怎么在Vista和Win7下阻止手动的hibernate和sleep?被这个问题烦扰一天了,还是没解决,倒

在线等(100分啊!),VC怎么在Vista和Win7下阻止手动的hibernate和sleep?
被这个问题烦扰一天了,还是没解决,倒是很多人(主要查的是美国程序员的帖子)说:you cannot stop the PC from entering a sleep or hibernation state when users explicitly require it……

有没有大师帮忙解决下啊,希望是验证过的,想说WM_POWERBROADCAST的PBT_APMQUERYSUSPEND就别凑热闹了,我验证过了不行,而且好像有正规文档说VISTA以后没这个消息了。

在线等啊,分能给多少就给多少!

[解决办法]
1,sleep 和hibernate的功能都是在ntoskrnl(xx).exe中完成的,如果MS没有公开的接口手动停掉,那么就只有跟踪分析了。分析方法很简单:用windbg(可能在关机时不能调试),bochs跟踪执行流程,找到关键调用函数,并找到与平台无关的一个方法。

2,HOOK该函数,在系统sleep或hibernate的时候,先进入到HOOK函数里,与自己的daemon程序进行通信,选择放行或阻止。

这个方法是下下策,不过肯定可行的;实现较复杂,会考虑很多的稳定性因素;如果LZ是做安全软件的,可以考虑;如果是普通应用,则绕过去吧
[解决办法]
mark russinovich在一次演讲中专门提到了这个事,就是从windows vista起没有任何正规方法能够阻止用户的休眠操作,驱动程序都不行。你只能靠api hook这种非常规手段。

热点排行