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

//循环接收数据

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

  推荐精品文章

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

  联系方式
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
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089