MFC-关机注销重启

本文介绍了如何在MFC应用程序中使用ExitWindowsEx函数进行关机、注销和重启操作,强调在调用该函数前必须先提升进程权限以确保能够执行这些关键操作。文章分为提权、关机、注销、重启四个步骤进行详细讲解。
摘要由CSDN通过智能技术生成

关机注销重启都是windows的重要操作,所以调用ExitWindowsEx这个函数之前一定要对当前进程进行提权,就是提升权限,使得当前的进程能操作这些重要的函数.

1.提权

//提权函数
BOOL AdjustPrivilege()
{
    BOOL bRet = FALSE;
    TOKEN_PRIVILEGES tp = { 0 };//令牌权限结构
    HANDLE hToken = nullptr;//令牌句柄

    do 
    {
        //打开当前进程令牌,并且获取它              //令牌权限修改和查询
        if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|
            TOKEN_QUERY,&hToken))
            break;
        //获取关机注销重启的LUID(Locally Unique Identifier),局部唯一标识
        if (!LookupPrivilegeValue(nullptr,SE_SHUTDOWN_NAME,&tp.Privileges[0].Luid))
            break;
        tp.PrivilegeCount = 1;//修改权限的个数
        tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;//激活SE_SHUTDOWN_NAME这个权限
        //提升权限//FALSE表示可以修改权限//把需要修改的权限传进来
        if(!AdjustTokenPrivileges(hToken,FALSE,&tp,0,(PTOKEN_PRIVILEGES)nullptr,0))
            break;
        bRet = TRUE;
    } while (FALSE);
    if (hToken)
        CloseHandle(hToken);
    return bRet;
}

2.关机

    //提权
    AdjustPrivilege();
    ExitWindowsEx(EWX_SHUTDOWN,0);

3.注销

    //提权
    AdjustPrivilege();
    ExitWindowsEx(EWX_LOGOFF, 0);

4.重启

    //提权
    AdjustPrivilege();
    ExitWindowsEx(EWX_REBOOT, 0);

5.还有很多的操作,只要对其进行提权就可以了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值