论坛: 编程破解 标题: VC++的问题! 复制本贴地址    
作者: hongyang [hongyang]    论坛用户   登录
我在看一个自动关机,注销,重新启动计算机的程序时有几处不了解,希望大家给予指教!谢谢!!下面是程序的一部分:

IsHow是定义的变量:case 0是代表注销,case 1是代表重新启动,case 2是代表关闭计算机

其中的case 1 if(dwVersion<0X80000000)中的0X80000000是怎么回事?

函数OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken)
的意识是什么?后面的参数怎么理解?

函数LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid)
的含义是什么?参数怎么理解?

函数AdjustTokenPrivileges(hToken,FALSE,&tkp,0,(PTOKEN_PRIVILEGES)NULL,0)
的含义是什么?参数怎么理解??




代码如下:

void CRebootDlg::OnOK()
{
// TODO: Add extra validation here
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
DWORD dwVersion;

dwVersion=GetVersion();

switch(IsHow)
{
case 0:
ExitWindowsEx(EWX_LOGOFF,0);
break;
case 1:
if(dwVersion<0X80000000)
{
OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken);
LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid);
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_REBOOT,0);
}
break;
case 2:
if(dwVersion<0X80000000)
{
OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken);
LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid);

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;
}
}

谢谢!!望大家指教!!

地主 发表时间: 10/25 21:55

回复: hongyang [hongyang]   论坛用户   登录
我是新手,望大家多多指教啊~~~~~~~~!!谢谢了!!!

B1层 发表时间: 10/26 17:14

回复: shesh [shesh]   版主   登录
这些问题你得先去看书.

否则回答下来,我也能写一本书了.

B2层 发表时间: 10/26 18:20

回复: Royy [royy]   论坛用户   登录
简单的说就是在winnt或2000系统下,关机是需要权限的,这一系列的函数就是向系统申请关机权限。

B3层 发表时间: 10/26 20:57

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号