Chinaunix首页 | 论坛 | 博客
  • 博客访问: 8346929
  • 博文数量: 1413
  • 博客积分: 11128
  • 博客等级: 上将
  • 技术积分: 14685
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-13 10:03
个人简介

follow my heart...

文章分类

全部博文(1413)

文章存档

2013年(1)

2012年(5)

2011年(45)

2010年(176)

2009年(148)

2008年(190)

2007年(293)

2006年(555)

分类: C/C++

2006-09-12 13:30:13

[点评:在win95/98下面,直接用exitwindowsex就可完成。但是在2k/XP下面,你必须获得底层特权,才可以完成关机操作。这也是2K比较安全的表现。]

//在WINDOWS2K/XP下实现计算机的关机操作
//必须要有SE_SHUTDOWN_NAME,不像在WIN9X中直接用ExitWindowsEx即可
//这种方法是直接将系统做为WinNT执行
HANDLE hProcess, hToken;
TOKEN_PRIVILEGES NewState;
DWORD ProcessId, ReturnLength = 0;
LUID luidPrivilegeLUID;

ProcessId = GetCurrentProcessId();
hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcessId);
if(!OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES, &hToken))
//return 0;
ShowMessage("ok");

if(!LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &luidPrivilegeLUID))
//return 0;
ShowMessage("ok");

NewState.PrivilegeCount = 1;
NewState.Privileges[0].Luid = luidPrivilegeLUID;
NewState.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if(AdjustTokenPrivileges(hToken, FALSE, &NewState, NULL, NULL, NULL))
ExitWindowsEx(EWX_FORCE | EWX_POWEROFF, 0);
//return 0;
ShowMessage("ok");
//当然,在一些情况下,应该选判断操作系统是WinNT还是Win9x
long lngVersion;
lngVersion=GetVersion();
if(lngVersion & 0x80000000)
xt=0;//是Win9x
else
xt=1;//是WinNT

阅读(859) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~