C提升权限关机重启
#include <tchar.h>
#include <Windows.h>
BOOL EnableShutDownPriv()
{
HANDLE hToken = NULL;
TOKEN_PRIVILEGES tkp = { 0 };
关机程序代码if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) {
return FALSE;
}
if (!LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid)) { //其他权限 只需要修改
SE_SHUTDWON_NAME即可
CloseHandle(hToken);
return FALSE;
}
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if (!AdjustTokenPrivileges(hToken, FALSE, &tkp, sizeof(TOKEN_PRIVILEGES), NULL, NULL)) {
CloseHandle(hToken);
return FALSE;
}
return TRUE;
}
BOOL ReSetWindows(DWORD dwFlags, BOOL bForce)
{
//Check the param;
if (dwFlags != EWX_LOGOFF && dwFlags != EWX_REBOOT && dwFlags != EWX_SHUTDOWN) {
return FALSE;
}
//Get the os version;
OSVERSIONINFO osvi = { 0 };
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
if (!GetVersionEx(&osvi)) {
return FALSE;
}
if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT) {
EnableShutDownPriv();
}
dwFlags |= (bForce != FALSE) ? EWX_FORCE : EWX_FORCEIFHUNG;
return ExitWindowsEx(dwFlags, 0);
}
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) {
if (_tcscmp(lpCmdLine, _T("/r")) == 0) {
ReSetWindows(EWX_REBOOT, FALSE);
}
else if (_tcscmp(lpCmdLine, _T("/s")) == 0) {
ReSetWindows(EWX_SHUTDOWN, FALSE);
}
else if (_tcscmp(lpCmdLine, _T("/l")) == 0) {
ReSetWindows(EWX_LOGOFF, FALSE);
}
return 0;
}
附录:
如果开发的应⽤程序在别的电脑上提⽰:没有正确配置,简便⽅法⼀:
(1) 项⽬右键 -》 清单⼯具 -》 输⼊和输出 -》嵌⼊清单=》否
(2)release重新编译
如果提⽰:不是有效的win32程序:
项⽬右键-》配置属性-》常规-》平台⼯具集-》Visual Studio 2013 - Windows XP (v120_xp)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论