|
![]() | 作者: 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号