標(biāo) 題:
玩玩360——ExitWindowsEx大法
作 者:
dplayer
時(shí) 間: 2009-09-10,13:54
鏈 接: http://bbs.pediy.com/showthread.php?t=97539
現(xiàn)在流行R3,對(duì)R0里的東西大伙都不太感興趣了,俺來(lái)放個(gè)R3暴力結(jié)束進(jìn)程的代碼,看雪里貌似有個(gè)類似的bin,不管它,玩玩而已-_-
?????先來(lái)看下Windows?XP的關(guān)機(jī)流程: ?
?????1、當(dāng)Windows?XP用戶發(fā)起關(guān)機(jī)指令以后,發(fā)起關(guān)機(jī)指令的執(zhí)行程序會(huì)調(diào)用系統(tǒng)函數(shù)庫(kù)?user32.dll中的?ExitWindowsEx?函數(shù),此函數(shù)向XP系統(tǒng)進(jìn)程?Csrss.exe?發(fā)出關(guān)機(jī)信息,Csrss.exe立即再把信息傳遞給隱含的Winlogon.exe窗口。 ?
?????2、Winlogon.exe接到前面Csrss.exe傳來(lái)的信息后,Winlogon.exe開(kāi)始檢查請(qǐng)求者的權(quán)限,預(yù)先做好準(zhǔn)備,并給ExitWindowsEx發(fā)回準(zhǔn)備就緒信號(hào)。Csrss.exe收到Winlogon.EXE的通知以后,會(huì)依次查詢擁有頂層窗口的用戶進(jìn)程,讓這些用戶退出進(jìn)程。如果某一個(gè)用戶進(jìn)程在一個(gè)默認(rèn)的延時(shí)時(shí)間5000毫秒內(nèi)沒(méi)有退出的話,Windows?XP會(huì)顯示一個(gè)結(jié)束任務(wù)的對(duì)話框用于詢問(wèn)用戶是否結(jié)束這個(gè)任務(wù)。默認(rèn)情況下將顯示這個(gè)對(duì)話框并一直保持而不會(huì)自動(dòng)關(guān)閉。
3、此時(shí)Winlogon.exe將再次調(diào)用ExitWindowsEx函數(shù)來(lái)關(guān)閉系統(tǒng)進(jìn)程。(這些系統(tǒng)進(jìn)程包括SMSS.EXE、Winlogon.EXE、Lsass.EXE等)。Windows在終止系統(tǒng)進(jìn)程的時(shí)候并不像終止用戶進(jìn)程那樣:進(jìn)程無(wú)法在規(guī)定時(shí)間內(nèi)終止,則提示用戶。而是跳過(guò)這個(gè)進(jìn)程,去執(zhí)行下一個(gè)系統(tǒng)進(jìn)程的終止操作。在這個(gè)時(shí)間段里面,Windows?XP會(huì)執(zhí)行子系統(tǒng)來(lái)完成最后的關(guān)機(jī)操作。
??4、?當(dāng)準(zhǔn)備工作全部完成后,Smss.exe命令釋放所有系統(tǒng)資源,最后Smss.exe調(diào)用NtShutdownSystem函數(shù),等除了電源管理以后的全部子系統(tǒng)完成退出以后,電源管理完成最后的操作:重啟或關(guān)機(jī)。
????了解了Windows?XP的關(guān)機(jī)流程以后,偶們很容易利用Windows窗口消息機(jī)制,實(shí)現(xiàn)ExitWindowsEx偽關(guān)機(jī)操作,結(jié)束頑固窗口進(jìn)程。代碼完成后,初略試驗(yàn)了一下,V5.2版360和保險(xiǎn)箱是無(wú)聲無(wú)息的消失了^-^..微點(diǎn)、卡巴、金山、瑞星之類的殺軟窗口進(jìn)程也可以結(jié)束掉,主防成了睜眼瞎,加載驅(qū)動(dòng),不再有摭攔,很好玩啊。呵呵。。。。
???關(guān)于
WM_QUERYENDSESSION,MSDN上有明確的講解,摘錄如下,
The?WM_QUERYENDSESSION?message?is?sent?when?the?user?chooses?to?end?the?session?or?when?an?application?calls?the?ExitWindows?function.?If?any?application?returns?zero,?the?session?is?not?ended.?The?system?stops?sending??????WM_QUERYENDSESSION?messages?as?soon?as?one?application?returns?zero.?
After?processing?this?message,?the?system?sends?the?WM_ENDSESSION?message?with?the?wParam?parameter?set?to?the?results?of?the?WM_QUERYENDSESSION?message.?
WM_QUERYENDSESSION?
nSource?=?(UINT)?wParam;????//?source?of?end-session?request?
fLogOff?=?lParam????????????//?logoff?flag?
?
Parameters
nSource?
Reserved?for?future?use.?
fLogOff?
Value?of?lParam.?Indicates?whether?the?user?is?logging?off?or?shutting?down?the?system.?Supported?values?include:?ENDSESSION_LOGOFF.?
Return?Values
If?an?application?can?terminate?conveniently,?it?should?return?TRUE;?otherwise,?it?should?return?FALSE.?
Remarks
By?default,?the?DefWindowProc?function?returns?TRUE?for?this?message
代碼放后面了,大家共同交流學(xué)習(xí)。祝大家節(jié)日快樂(lè),每天都有毒殺-_-