admin管理员组

文章数量:1534837

2023年12月20日发(作者:)

Windows XP系统通过一个名为的程序来完成关机操作(位置在WindowsSystem32shutdown文件),一般情况下XP的关机是由关机程序来实现的,关机的时候调用。由此可知要阻止强行关机就是要取消对的调用。

以下是对命令的详细介绍。

-a

取消关机

-f

强行关闭应用程序。

-m 计算机名

控制远程计算机。

-i

显示图形用户界面,但必须是Shutdown的第一个参数。

-l

注销当前用户。

-r

关机并重启。

-t时间

设置关机倒计时。

-c"消息内容"

输入关机对话框中的消息内容(不能超127个字符)。

比如你的电脑要在23:00关机,可以选择“开始→运行”,输入“at 23:00 Shutdown -s”,这样,到了23点,电脑就会出现“系统关机”对话框,默认有30秒钟的倒计时并提示你保存工作。如果你想以倒计时的方式关机,可以输入“ -s -t 3600”,这里表示60分钟后自动关机,“3600”代表60分钟。

如果想取消的话,可以在运行中输入“shutdown -a”。另外输入“shutdown -i”,则可以打开设置自动关机对话框,对自动关机进行设置。 -i

显示图形用户界面,但必须是Shutdown的第一个参数。

Windows的关机流程简介

1. 用户发起关机指令以后,发起关机指令的程序(调用系统函数库 中的ExitWindowsEx函数)会通知Windows子系统,收到通知以后会和做一个数据交换,接着由通知开始关闭系统的流程

2.

收到的通知以后,会依次查询拥有顶层窗口的用户进程,让这些用户进程退出。如果某一个用户进程在一个默认的超时时间5000毫秒(可以通过修改注册表键值HKEY_CURRENT_USERCont rol PanelDesktop HungAppTimeout设定超时时间)内没有退出的话,Windows会显示一个结束任务对话框用于询问用户是否结束这个任务。默认情况下将显示这个对话框并一直保持而不会自动关闭。对于控制台程序来说,基本情况类似,只不过Windows使用HK EY_CURRENT_USERControl PanelDesktop WaitToKillAppTimeout值来设置超时时间。

3. 接着是轮到终止系统进程了(再次调用ExitWindowsEx关闭COM对象进程)。系统进程包括、、等。Windows在终止系统进程的时候并不像终止用户进程那样如果无法在规定时间内终止则提示用户,而是跳过这个进程,去执行下一个系统

进程的终止操作。使用的超时时间和第2步使用的时间相同。

上述3个步骤是整个Windows关机过程中最耗费时间的一段,大多数关机缓慢的原因都是因为这3个步骤引起的。完成前3个步骤以后,进入了关机操作的第4个阶段,也是最后一个阶段。

4.

调用一个原生API函数NtShutdownSystem()来命令系统执行后面的扫尾工作。在这个阶段里面,Windows执行子系统会完成最后的关机操作,例如:设备驱动在这个阶段里面完成一些驱动设定的特殊操作;

也是在这个阶段,配置管理系统将被修改过的注册表数据会写道磁盘里面。等除了电源管理以后的全部子系统完成退出以后,电源管理完成最后的操作:如重启、关机等。

一 Windows关机全过程详解

简单地说,在Windows关机时,系统做了以下工作:

1.

软保护

首先先结束登录用户打开的所有程序,保存用户的设置和系统设置,然后停止系统服务和操作系统大部分进程。

2.

硬保护

复位硬件,如复位磁盘的磁头、停止硬件驱动程序等。

3.

断电

断开主板给各硬件设备的电源。当然这步需要主板的电源管理模块支持,一般来说,ATX电源和主板都支持软断电。

在整个关机过程中,软保护是最耗时的,少则五六秒,多则上分钟。刚安装的操作系统,因为未安装驱动和开启额外的系统服务,关机非常快。开启服务一多,关机就慢下来了,特别是安装了有Bug的驱动,问题可能更糟。

软保护

寻修网/提示,为了保证数据的完整性,软保护是必须的,不管是操作系统本身还是第三方的应用程序。

软保护的步骤有:

1.

用户发起关机指令以后,发起关机指令的程序会通知Windows子系统,收到通知以后会和做一个数据交换,接着由通知开始关闭系统的流程

2. 收到的通知以后,会依次查询拥有顶层窗口的用户进程,让这些用户进程退出。如果某一个用户进程在一个默认的超时时间5000毫秒(可以通过修改注册表键值HKEY_CURRENT_USERCont rol PanelDesktop HungAppTimeout设定超时时间)内没有退出的话,Windows会显示一个结束任务对话框用于询问用户是否结束这个任务。默认情况下将显示这个对话框并一直保持而不会自动关闭。对于控制台程序来说,基本情况类似,只不过Windows使用HK EY_CURRENT_USERControl PanelDesktop WaitToKillAppTimeout值来设置超时时间。

3.

接着是轮到终止系统进程了。系统进程包括、、等。Windows在终止系统进程的时候并不像终止用户进程那样如果无法在规定时间内终止则提示用户,而是跳过这个进程,去执行下一个系统

进程的终止操作。使用的超时时间和第2步使用的时间相同。

硬保护和断电

在完成软保护过程后,调用一个原生API函数ZwShutdownSystem()或NtShutdownSystem()来命令系统执行后面的扫尾工作,包括上面提到的硬保护和ATX断电。

在ZwShutdownSystem函数调用过程中,Windows执行子系统会完成最后的关机操作,例如:设备驱动在这个阶段里面完成一些驱动设定的特殊操作;也是在这个阶段,配置管理系统将被修改过的注册表数据会写道磁盘里面。等除了电源管理以后的全部子系统完成退出以后,电源管理完成最后的操作,如重启、关机等。

响应关机的事件

不管是直接按机箱上的Power按钮,还是点击开始菜单->关闭计算机(注销、关机、重启),我们的应用程序都可以响应这类事件,那就是窗口消息WM_QUERYENDSESSION和WM_ENDSESSION。

系统提供了一个常用的API实现系统的注销、关机和重启,它的声明为:

BOOL ExitWindowsEx(

UINT uFlags,

DWORD dwReason

);

参数uFlags可分为两类,之间可以用“|”合并:

1.

关闭动作,有以下标志:EWX_LOGOFF(注销)、EWX_SHUTDOWN(关闭系统后不切断电源,即使主板支持ATX电源管理)、EWX_POWEROFF(关机,关闭系统后切断电源,需主板支持)、EWX_REBOOT(重启)。

2.

关闭强度,有以下标志:数值0(安全关闭,不使用该类标志时默认为该项)、EWX_FORCEIFHUNG(应用程序挂起一段时间后强行关闭)、EWX_FORCE(强行关闭,不管应用程序有没有挂起)。

如果不使用关闭强度标志(EWX_FORCE或EWX_FORCEIFHUNG),关机是安全的,也就是说,在关机的软保护时,系统将给每个以桌面为顶级的窗口进程发送WM_QUERYENDSESSION消息。如果超过5000毫秒(可以通过修改注册表键值HKEY_CURRENT_USERCont rol PanelDesktop HungAppTimeout设定超时时间)仍未有WM_QUERYENDSESSION消息的返回,则弹出结束任务对话框用于询问用户是否结束这个任务。默认情况下将显示这个对话框并一直保持而不会自动关闭;如果设置了自动结束任务(HKEY_CURRENT_USERCont rol PanelDesktopAutoEndTasks键值改为1),那么超时(HungAppTimeout)后仍未有WM_QUERYENDSESSION消息的返回值时,不再显示结束任务对话框而直接结束这个挂起的任务。如果多个进程响应了WM_QUERYENDSESSION并挂起(如记事本弹出询问是否保存的消息框),那么系统对于每个进程是串行处理的,即等待第一个挂起的进程响应WM_QUERYENDSESSION并返回后(立即发送WM_ENDSESSION通知同一窗口用户的选择<是否确认关闭>),再给下一个进程发送WM_QUERYENDSESSION并等待挂起超时。

直接断电关机

如上分析,如果您不在乎应用程序的数据丢失和操作系统的系统文件破坏(可能进不了系统),您完全可以把关机的软保护过程省略,来加快关机的速度。网上已经有许多快速关机软件,就是直接调用中的ZwShutdownSystem()实现的。当然Windows系统本身也提供了这样的功能让您有选择地快速关机:打开任务管理器,按住键盘的Ctrl键,同时点击菜单“关机”-“关闭(或重启)”,即可在一两秒内立即断电关机。

本文标签: 关机系统进程用户