InitiateSystemShutdownA 函数 (winreg.h)
启动指定计算机的关闭和可选重启。
若要记录事件日志中关闭的原因,请调用 InitiateSystemShutdownEx 函数。
语法
BOOL InitiateSystemShutdownA(
[in, optional] LPSTR lpMachineName,
[in, optional] LPSTR lpMessage,
[in] DWORD dwTimeout,
[in] BOOL bForceAppsClosed,
[in] BOOL bRebootAfterShutdown
);
参数
[in, optional] lpMachineName
要关闭的计算机的网络名称。 如果 lpMachineNameNULL 或空字符串,则该函数将关闭本地计算机。
[in, optional] lpMessage
要显示在关闭对话框中的消息。 如果没有消息,则可以 NULL 此参数。
Windows Server 2003 和 Windows XP:此字符串也作为注释存储在事件日志条目中。
Windows Server 2003 和具有 SP1 的 Windows XP:字符串限制为 3072 TCHAR。
[in] dwTimeout
应显示关闭对话框的时间长度(以秒为单位)。 显示此对话框时,AbortSystemShutdown 函数可以停止关闭。
如果 dwTimeout 不为零,InitiateSystemShutdown 在指定计算机上显示对话框。 该对话框显示调用函数的用户的名称,显示由 lpMessage 参数指定的消息,并提示用户注销。 创建对话框时会发出蜂鸣声,并保留在系统中的其他窗口之上。 对话框可以移动,但不能关闭。 计时器在强制关闭前的剩余时间进行计数。
如果 dwTimeout 为零,则计算机关闭而不显示对话框,AbortSystemShutdown无法停止关闭。
具有 SP1 的 Windows Server 2003 和 Windows XP:超时值限制为 MAX_SHUTDOWN_TIMEOUT 秒。
Windows Server 2003 和具有 SP1 的 Windows XP:如果要关闭的计算机是终端服务服务器,系统将向所有本地和远程用户显示一个对话框,警告他们已启动关闭。 该对话框包括请求关闭的人员、显示消息(请参阅 lpMessage),以及服务器关闭前的时间。
[in] bForceAppsClosed
如果此参数 TRUE,则具有未保存更改的应用程序将被强行关闭。 请注意,这可能会导致数据丢失。
如果此参数 FALSE,系统将显示一个对话框,指示用户关闭应用程序。
[in] bRebootAfterShutdown
如果此参数 TRUE,则计算机在关闭后立即重启。 如果此参数 FALSE,系统会将所有缓存刷新到磁盘并安全地关闭系统。
返回值
如果函数成功,则返回值为非零。
如果函数失败,则返回值为零。 若要获取扩展的错误信息,请调用 GetLastError。
言论
若要关闭本地计算机,调用线程必须具有 SE_SHUTDOWN_NAME 权限。 若要关闭远程计算机,调用线程必须在远程计算机上具有 SE_REMOTE_SHUTDOWN_NAME 权限。 默认情况下,用户可以在登录的计算机上启用 SE_SHUTDOWN_NAME 特权,管理员可以在远程计算机上启用 SE_REMOTE_SHUTDOWN_NAME 特权。 有关详细信息,请参阅 使用特殊特权运行。
失败的常见原因包括无效或无法访问的计算机名称或权限不足。 如果在指定计算机上正在进行关闭,则返回错误 ERROR_SHUTDOWN_IN_PROGRESS。 如果启用了快速用户切换但未登录用户,则可以返回错误 ERROR_NOT_READY。
非零返回值并不意味着注销是还是会成功。 关闭是一个异步进程,在 API 调用返回或根本不返回之后,它可能会发生。 即使超时值为零,关闭仍可由应用程序、服务甚至系统中止。 非零返回值指示权限和参数的验证成功,并且系统已接受关闭请求。
调用此函数时,调用方必须指定是否应强行关闭具有未保存更改的应用程序。 如果调用方选择不强制关闭这些应用程序,并且具有未保存更改的应用程序在控制台会话上运行,则在用户登录到控制台会话中止关闭、保存更改、关闭应用程序或强制应用程序关闭之前,关闭将继续关闭。 在此期间,除了主机用户之外,可能不中止关闭,并且可能不会启动另一个关闭。
请注意,调用此函数时,bForceAppsClosed 参数设置为 TRUE 可避免这种情况。 请记住,执行此操作可能会导致数据丢失。
Windows Server 2003 和 Windows XP:如果计算机已锁定,并且 bForceAppsClosed 参数 FALSE,则最后一个错误代码是 ERROR_MACHINE_LOCKED。 如果系统尚未准备好处理请求,则最后一个错误代码 ERROR_NOT_READY。 应用程序应稍等片刻,然后重试调用。 例如,如果关闭请求同时用户尝试登录到系统,则系统可能未读以启动关闭,并返回 ERROR_NOT_READY。 在这种情况下,应用程序应稍等片刻,然后重试调用。
例子
有关示例,请参阅 显示关闭对话框。
注意
winreg.h 标头将 InitiateSystemShutdown 定义为一个别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将中性编码别名与不中性编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows XP [桌面应用 |UWP 应用] |
支持的最低服务器 | Windows Server 2003 [桌面应用 |UWP 应用] |
目标平台 | 窗户 |
标头 | winreg.h (包括 Windows.h) |
库 | Advapi32.lib |
DLL | Advapi32.dll |