博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Win32 例程(关机,重启,注销)
阅读量:6049 次
发布时间:2019-06-20

本文共 1574 字,大约阅读时间需要 5 分钟。

#include 
#include
/* 系统特权提升 @lpName: SE_SHUTDOWN_NAME 关机,重启权限 */BOOL PrivilegePromote(LPCTSTR lpName) { HANDLE hToken = NULL; TOKEN_PRIVILEGES tkp = {0}; // 打开进程令牌 if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,&hToken)) { return FALSE; } // 查找系统权限的特权值 if (!LookupPrivilegeValue(NULL,lpName,&tkp.Privileges[0].Luid)) { CloseHandle(hToken); return TRUE; } // 调整令牌特权 if(!AdjustTokenPrivileges(hToken,FALSE,&tkp,sizeof(TOKEN_PRIVILEGES),NULL,NULL)) { CloseHandle(hToken); return FALSE; } return TRUE;}/* 系统启动控制:注销,重启,关机 @dwFlags:EWX_LOGOFF | EWX_REBOOT | EWX_SHUTDOWN @bForce:是否强制 */BOOL StartUpContrl(DWORD dwFlags,BOOL bForce) { // 参数校验 if (dwFlags != EWX_LOGOFF && dwFlags != EWX_REBOOT && dwFlags != EWX_SHUTDOWN) { return FALSE; } // 获取系统版本,ExitWindowsEx 在NT平台上需要提升权限 OSVERSIONINFO osvi = {0}; osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); // 版本信息获取 if ( !GetVersionEx(&osvi)) { return FALSE; } // 是NT系统 需要进行权限提升 if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT) { PrivilegePromote(SE_SHUTDOWN_NAME); } dwFlags |= (bForce != FALSE)? EWX_FORCE : EWX_FORCEIFHUNG; return ExitWindowsEx(dwFlags, 0);}int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nShowCmd ) { if (_tcscmp(lpCmdLine,_T("/r")) == 0){ StartUpContrl(EWX_REBOOT,TRUE); } else if (_tcscmp(lpCmdLine,_T("/s")) == 0){ StartUpContrl(EWX_SHUTDOWN,TRUE); } else if (_tcscmp(lpCmdLine,_T("/l")) == 0){ StartUpContrl(EWX_LOGOFF,TRUE); } return 0;}

转载于:https://www.cnblogs.com/wjchang/p/3671666.html

你可能感兴趣的文章
XCode工程中 Targets详解
查看>>
Ext.Msg.prompt的高级应用
查看>>
Postgres 中 to_char 格式化记录
查看>>
关于联合索引
查看>>
开源 java CMS - FreeCMS2.7 登录移动端管理中心
查看>>
Android FM模块学习之三 FM手动调频
查看>>
Python 设置系统默认编码以及其他编码问题大全
查看>>
Vbs脚本编程简明教程之十四
查看>>
如何UDP/TCP端口是否通了
查看>>
pxe实现系统的自动化安装
查看>>
Redis高可用技术解决方案总结
查看>>
Scale Out Owncloud 高可用(2)
查看>>
何为敏捷
查看>>
HA集群之四:Corosync+Pacemaker+DRBD实现HA Mysql
查看>>
服务器定义
查看>>
我的友情链接
查看>>
分布式系统的面试题15
查看>>
个人代码库の创建快捷方式
查看>>
由strcat函数引发的C语言中数组和指针问题的思考
查看>>
无锁编程
查看>>