#include <windows.h>
BOOL MySystemShutdown()
{
HANDLE hToken
TOKEN_PRIVILEGES tkp
// 得到进程的token
if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
return( FALSE )
// 为了关机权限,得到LUID
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,
&tkp.Privileges[0].Luid)
tkp.PrivilegeCount = 1 // one privilege to set
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED
// 得到进程的关机权限
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,
(PTOKEN_PRIVILEGES)NULL, 0)
if (GetLastError() != ERROR_SUCCESS)
return FALSE
// 强制所有程序关闭,并关机
if (!ExitWindowsEx(EWX_REBOOT
| EWX_FORCE,
SHTDN_REASON_MAJOR_OPERATINGSYSTEM |
SHTDN_REASON_MINOR_UPGRADE |
SHTDN_REASON_FLAG_PLANNED))
return FALSE
return TRUE
}
void main()
{
MySystemShutdown()
}
如果用C接口来 *** 作windows内核实现这一功能,需要的代码量及专业知识会很多,同时也不易理解。不过可以从另一个角度去解决这个问题,即通过系统调用windows命令来实现。在C语言中,有一个函数system,其功能就是调用系统环境中的命令,对于windows来说,就是可以再ms-dos中执行的命令。
而windows是有shutdown命令的,使电脑一分钟后重启的系统命令为
shutdown
/r
/t
60
其中shutdown为命令主体,/r表示执行重启 *** 作(reboot),/t为等待的时间,单位为秒,这里用的是要求的60秒,即一分钟。
知道了原理,就可以实现代码了:
#include
//system所在的头文件
int main()
{
system("shutdown /r /t 60")
return 0
}
实际代码就这样一句话就可以了。
错误代码0xc000012d通常表示应用程序无法正常启动,这可能是由于许多原因引起的。下面是一些可能的解决方法:1、安装最新的Windows更新:首先,请确保您的计算机已安装最新的Windows更新。这将有助于解决许多常见的错误和问题。
2、重新安装应用程序:尝试重新安装应用程序,有时可能是安装文件损坏或出现其他错误导致应用程序无法正常启动。
3、检查计算机中的病毒和恶意软件:您的计算机上可能存在病毒或恶意软件,这可能会导致应用程序无法正常启动。请运行杀毒软件和恶意软件扫描程序,确保您的计算机安全。
4、运行应用程序的兼容性:右键单击应用程序的可执行文件,选择“属性”,然后在“兼容性”选项卡中选择“以兼容性模式运行此程序”。然后选择合适的Windows版本。
5、禁用防病毒软件:有时防病毒软件可能会阻止应用程序正常运行。尝试禁用防病毒软件并重新运行应用程序。
6、修复或重装 *** 作系统:如果以上方法都无法解决问题,您可能需要修复或重新安装 *** 作系统。
总之,错误代码0xc000012d可能是由许多不同的原因引起的,因此需要对具体情况进行分析和解决。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)