我是靠谱客的博主 任性路人,这篇文章主要介绍注销、关机、重启计算机源码,现在分享给大家,希望可以做个参考。

一段注销、关机、重启计算机的源码,编译环境 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;
}

最后

以上就是任性路人最近收集整理的关于注销、关机、重启计算机源码的全部内容,更多相关注销、关机、重启计算机源码内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(113)

评论列表共有 0 条评论

立即
投稿
返回
顶部