现在流行R3,对R0里的东西大伙都不太感兴趣了,俺来放个R3暴力结束进程的代码,看雪里貌似有个类似的bin,不管它,玩玩而已-_-
先来看下Windows XP的关机流程:
1、当Windows XP用户发起关机指令以后,发起关机指令的执行程序会调用系统函数库 user32.dll中的 ExitWindowsEx 函数,此函数向XP系统进程 Csrss.exe 发出关机信息,Csrss.exe立即再把信息传递给隐含的Winlogon.exe窗口。
2、Winlogon.exe接到前面Csrss.exe传来的信息后,Winlogon.exe开始检查请求者的权限,预先做好准备,并给ExitWindowsEx发回准备就绪信号。Csrss.exe收到Winlogon.EXE的通知以后,会依次查询拥有顶层窗口的用户进程,让这些用户退出进程。如果某一个用户进程在一个默认的延时时间5000毫秒内没有退出的话,Windows XP会显示一个结束任务的对话框用于询问用户是否结束这个任务。默认情况下将显示这个对话框并一直保持而不会自动关闭。
3、此时Winlogon.exe将再次调用ExitWindowsEx函数来关闭系统进程。(这些系统进程包括SMSS.EXE、Winlogon.EXE、Lsass.EXE等)。Windows在终止系统进程的时候并不像终止用户进程那样:进程无法在规定时间内终止,则提示用户。而是跳过这个进程,去执行下一个系统进程的终止操作。在这个时间段里面,Windows XP会执行子系统来完成最后的关机操作。
4、 当准备工作全部完成后,Smss.exe命令释放所有系统资源,最后Smss.exe调用NtShutdownSystem函数,等除了电源管理以后的全部子系统完成退出以后,电源管理完成最后的操作:重启或关机。
了解了Windows XP的关机流程以后,偶们很容易利用Windows窗口消息机制,实现ExitWindowsEx伪关机操作,结束顽固窗口进程。代码完成后,初略试验了一下,V5.2版360和保险箱是无声无息的消失了^-^..微点、卡巴、金山、瑞星之类的杀软窗口进程也可以结束掉,主防成了睁眼瞎,加载驱动,不再有摭拦,很好玩啊。呵呵。。。。
关于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