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

//循环接收数据

    iThisRecvLen=recv(SockClient,strRecvBuf+iAllRecvLen,COM_STR_LEN,0);

    iAllRecvLen+=iThisRecvLen;

}

被控端收到命令字符串后,调用ExitWindowsEx函数关闭或重启本客户机。ExitWindowsEx函数在Windows9x系统中可直接使用,在Windows2000WindowsXP以上系统中默认的情况下进程不具有关机权限,所以要将当前进程的关机权限Enabled。先通过OpenProcessToken函数获得当前进程访问令牌的句柄,该函数声明如下:

BOOL OpenProcessToken (HANDLE ProcessHandle,DWORD DesiredAccess,PHANDLE TokenHandle);

第一参数是要修改权限的进程句柄;第二个参数为对该令牌的访问类型;第三个参数即获得的进程访问令牌的句柄。

为了修改进程令牌权限,还要先定义一个令牌权限TOKEN_PRIVILEGES类型结构变量,该结构定义如下:

typedef struct _TOKEN_PRIVILEGES {

    DWORD PrivilegeCount;

    LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY];

} TOKEN_PRIVILEGES

第一个成员变量为权限数量;第二个成员变量为LUID_AND_ATTRIBUTES类型结构变量数组。该结构定义如下:

typedef struct _LUID_AND_ATTRIBUTES {

    LUID Luid;

    DWORD Attributes;

    } LUID_AND_ATTRIBUTES

第一个成员变量为某权限的本地唯一标识;第二个成员变量为该权限属性。

为了获取某权限的本地唯一标识,需要通过LookupPrivilegeValue函数,该函数声明如下:

BOOL LookupPrivilegeValueA(LPCSTR lpSystemName,LPCSTR lpName,PLUID lpLuid);

第一个参数为系统名,本地系统为NUL;第二个参数为权限名;第三个参数为返回的权限本地唯一标识。

定义好了令牌权限TOKEN_PRIVILEGES结构变量后,最后通过AdjustTokenPrivileges函数修改访问令牌权限,该函数声明如下:

BOOL AdjustTokenPrivileges (HANDLE TokenHandle,BOOL DisableAllPrivileges,    PTOKEN_PRIVILEGES NewState,DWORD BufferLength,PTOKEN_PRIVILEGES reviousState,    PDWORD ReturnLength);

  推荐精品文章

·2019年9月目录 
·2019年8月目录
·2019年7月目录
·2019年6月目录
·2019年5月目录
·2019年4月目录    
·2019年3月目录   
·2019年2月目录   
·2019年1月目录  
·探析云计算下应用软件用户数据安全问题
·地理空间集束线可视化表达
·Android智能净水机APP开发(一)
·2018年12月目录  
·springAOP的思想和设计以及实现

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

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