c语言关机后重启参数保存,C语言win32学习(1)-关机、重启、注销功能的实现

C语言win32学习(1)-关机、重启、注销功能的实现

(2018-01-30 23:23:39)

#include #define _WIN32_WINNT 0x0500 #include BOOL

EnableShutDownPriv() { HANDLE hToken = NULL; TOKEN_PRIVILEGES tkp =

{0}; //得到当前进程的访问令牌的句柄,并且进行

修改令牌权限和查询令牌权限(TOKEN_ADJUST_PRIVILEGES和TOKEN_QUERY) 的操作 if (

!OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES |

TOKEN_QUERY, &hToken ) ) { return FALSE; }

//LookupPrivilegeValue函数查看系统权限的特权值,返回信息到一个LUID结构体里。 //Windows

NT中调用进程必须有 SE_SHUTDOWN_NAME 特权。

//第一个参数为查询本地系统的权限,第二个参数为指定查询的权限,即SE_SHUTDOWN_NAME,第三个参数用来接收所返回的制定特权名称的信息。

if ( !LookupPrivilegeValue( NULL, SE_SHUTDOWN_NAME,

&tkp.Privileges[0].Luid ) ) { CloseHandle( hToken ); return

FALSE; } tkp.PrivilegeCount = 1;//指定 特权数组的个数(因为下一个参数是一个数组)

tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;//特权启用.

//第一个参数是包含特权的句柄 //第二个参数是禁用所有权限标志 //第三个参数是新特权信息的指针(结构体)

//第四个参数是缓冲数据大小,以字节为单位的PreviousState的缓存区(sizeof)

//第五个参数是接收被改变特权当前状态的Buffer //第六个参数是接收PreviousState缓存区要求的大小 if (

!AdjustTokenPrivileges( hToken, FALSE, &tkp,

sizeof(TOKEN_PRIVILEGES), NULL, NULL ) ) { CloseHandle( hToken );

return FALSE; } return TRUE; } BOOL ReSetWindows(DWORD dwFlags,

BOOL bForce) { //检测用户输入的选项 if ( dwFlags != EWX_LOGOFF &&

dwFlags != EWX_REBOOT && dwFlags != EWX_SHUTDOWN ) { return

FALSE; } //得到计算机的版本号 OSVERSIONINFO osvi = {0};

osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);

//如果没有获取到计算机的版本号,那么返回false if ( !GetVersionEx(&osvi) ) { return

FALSE; } //如果用户的计算机为 windowsNT类型 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; }

分享:

a4c26d1e5885305701be709a3d33442f.png喜欢

0

a4c26d1e5885305701be709a3d33442f.png赠金笔

加载中,请稍候......

评论加载中,请稍候...

发评论

登录名: 密码: 找回密码 注册记住登录状态

昵   称:

评论并转载此博文

a4c26d1e5885305701be709a3d33442f.png

发评论

以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值