你好,欢迎来到电脑编程技巧与维护杂志社! [免费注册][请登录 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:杂志经典 / 计算机安全与维护
远程开机关机(七)
 

第一个参数为访问令牌句柄;第二个参数为是否取消所有权限;第三个参数为前面定义好的令牌权限;后面三个参数针用于保存修改前的令牌权限,分别为用于保存的内存长度、保存的内存地址、实际保存的内存长度。

具体代码如下:

if(strcmp("POWOFF",strRecvBuf)==0)

{  

closesocket(SockClient);

    WSACleanup();

    if(GetVersion()<0x80000000)//判断WINDOWS系统版本号

    {  

HANDLE hProcessToken;

        TOKEN_PRIVILEGES tkp;

    OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hProcessToken);

    LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid);

        tkp.PrivilegeCount = 1;

        tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

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

    }

//强迫所有进程退出、关闭计算机并切断电源

    ExitWindowsEx(EWX_FORCE|EWX_POWEROFF,0);

}

Windows2000WindowsXP以上系统中,也可用InitiateSystemShutdown函数代替ExitWindowsEx函数关闭本机,InitiateSystemShutdown函数的使用在下面介绍。

2.无被控端软件

由于Windows2000WindowsXP以上的系统本身支持远程关机,所以也可不编写被控端软件,Windows API中已提供现成的函数InitiateSystemShutdown,其声明如下:

BOOL InitiateSystemShutdownA(LPSTR lpMachineName,LPSTR lpMessage,DWORD dwTimeout,BOOL bForceAppsClosed,BOOL bRebootAfterShutdown);

第一个参数为机器名,本机为NULL;第二个参数为关机提示对话框中显示的消息;第三个参数为关机前提示的时间;第四个参数为是否强制关闭应用程序;第五个参数为是否重启。

远程关机需要具有相应权限,如果在域环境下可以直接以域管理员身份登录系统获得远程关机的权限,一般在机房或网吧中都是工作组环境,无法直接获得远程关机的权限,怎么办呢?通过试验我找到了一个办法,具体步骤如下:

1)在被控机上通过“计算机管理”建立一个用户,然后在“组策略”中该用户配置远程关机权限,具体操作为:运行“gpedit.msc”打开“组策略编辑器”。在“组策略”左侧树窗口中依次打开“计算机配置”、“Windows 设置”、“安全设置”、“本地策略”、“用户权利指派”。在“组策略”右侧列表窗口选择“从远端系统强制关机”策略添加该用户。

  推荐精品文章

·2020年5月目录 
·2020年4月目录 
·2020年3月目录 
·2020年2月目录 
·2020年1月目录 
·2019年12月目录 
·2019年11月目录 
·2019年10月目录
·2019年9月目录 
·2019年8月目录
·2019年7月目录
·2019年6月目录
·2019年5月目录
·2019年4月目录    

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区长春桥路5号6号楼1209室,邮编:100089