注销、关机、重启计算机源码

本文提供了一段用于在Windows系统中执行注销、关机及重启操作的C++源代码示例。该代码适用于Windows NT系列操作系统,并针对不同操作进行了详细说明。

一段注销、关机、重启计算机的源码,编译环境 WIN7 VS2010

// ExitWindows.h

#define _AFXDLL
#pragma once

#include <afxwin.h>

#define B_LOGOFF          0
#define B_SHUTDOWN        0x00000001
#define B_REBOOT          0x00000002


int BExitWindows(UINT nFlag)
{
HANDLE hToken;
    TOKEN_PRIVILEGES tkp;
DWORD dwVersion;

dwVersion = GetVersion(); //获得Windows NT或Win32的版本号


switch(nFlag)
{
case B_LOGOFF://注销
ExitWindowsEx(EWX_LOGOFF,0);
break;


case B_REBOOT://重新启动
if (dwVersion < 0x80000000)  
{// Windows NT系列
            if(!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
return -1;
            if(!LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid))
return -1;


tkp.PrivilegeCount = 1;  // 设置一个权限
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;


            AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES)NULL, 0);


            ExitWindowsEx(EWX_REBOOT | EWX_FORCE, 0);
}
else
{//Windows 95系列
            ExitWindowsEx(EWX_FORCE | EWX_REBOOT,0);
}
break;


case B_SHUTDOWN://关闭计算机
   if (dwVersion < 0x80000000) 
{// Windows NT
   if(!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
return -1;
            if(!LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid))
return -1;


            tkp.PrivilegeCount = 1;  // 设置一个权限
            tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;


            AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES)NULL, 0);


            ExitWindowsEx(EWX_SHUTDOWN |EWX_FORCE, 0);
}
else
{
            ExitWindowsEx(EWX_FORCE | EWX_SHUTDOWN,0);
}
break;
    }
return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值