假设我拥有所有必要的权限,我将如何关闭或重新启动位于同一LAN中的系统。
请参阅以下代码
OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES,
&tokenHandle);
LookupPrivilegeValue("Computer name", SE_REMOTE_SHUTDOWN_NAME,
&tokenPrivileges.Privileges[0].Luid);
tokenPrivileges.PrivilegeCount = 1;
tokenPrivileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(tokenHandle, FALSE, &tokenPrivileges, 0,
0, 0);
switch(action)
{
default:
case constEWXReboot:
case constEWXRestartApps:
if (!InitiateSystemShutdownEx("Computer name","Remote machine shutdown", 10, TRUE, TRUE, SHTDN_REASON_MAJOR_APPLICATION))
{
ErrGen(constErrCannotRestartSystem);
}
break;
我收到错误代码#53找不到网络路径。 请建议我在这里出错。
答案 0 :(得分:4)
InitiateSystemShutdownEx win API函数将执行此操作。
启动指定计算机的关闭和可选重启,并可选择记录关闭的原因。
要关闭本地计算机,调用线程必须具有SE_SHUTDOWN_NAME权限。要关闭远程计算机,调用线程必须具有远程计算机上的SE_REMOTE_SHUTDOWN_NAME权限。默认情况下,用户可以在登录的计算机上启用SE_SHUTDOWN_NAME权限,管理员可以在远程计算机上启用SE_REMOTE_SHUTDOWN_NAME权限。
答案 1 :(得分:0)
您不需要使用API - 只需拨打shutdown.exe
即可调用system()
,例如:
system("shutdown -r -f -t 00 -m \\\\computername");