如何实现关闭远程Windows2000系统.docVIP

  • 5
  • 0
  • 约3.85千字
  • 约 3页
  • 2018-06-01 发布于河南
  • 举报
如何实现关闭远程Windows2000系统

如何实现关闭远程Windows 2000系统 2001-10-30· ·周侃··yesky   在Win9x中退出系统大家一定不陌生吧?好象挺神乎的,其实说穿了不过就是调用了一个底层的API函数ExitWindowsEx()罢了。但这在Win2000中行不通。不信?你随便用VB,Delphi,C++Builder试一试,没反应吧?   这是因为Win2000其实就是WinNT 5.0,用的就是NT的内核。Windows NT可不象Win9x和Dos,可以随意进行底层操作,如在Win9x中可以随意关掉任何进程(如kernel32进程,这将导致死机),随意进行绝对磁盘扇区读写(如CIH病毒),Windows NT非常注重系统每个进程的权利(这一点很像Unix,但只有这样才能算得上是一个比较完整的操作系统!),一个普通的进程是不应具备有调用系统的权利(这也是为什么Win9x和Dos下病毒成灾的原因),强行调用ExitWindowsEx()只能是没有反应。所以唯一的做法是我们来赋予它足够的权限。   启动C++Builder,新建一个工程,添加三个按钮,Caption依次为“注销当前用户”、“退出Windows2000”和“重新启动Windows2000”,然后双击Button1,在中间加入以下代码: { HANDLE app; DWORD num; TOKEN_PRIVILEGES tok; //定义变量 OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,app); tok.PrivilegeCount=1; /*   OpenProcessToken()这个函数的作用是打开一个进程的访问令牌,其函数原形为 BOOL OpenProcessToken(  HANDLE ProcessHandle, // handle to process DWORD DesiredAccess, // desired access to process PHANDLE TokenHandle  // pointer to handle of open access token    );   其中第二个参数是访问的请求方式,比较繁杂,欲了解详情请查看 Win32 Programmers Reference   GetCurrentProcess()函数的作用是得到本进程的句柄 */ LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,(tok.Privileges[0].Luid)); tok.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED; /*   LookupPrivilegeValue()的作用是修改进程的权限,在此处为修改本进程成为具有退出系统的权限,其函数原形为 BOOL LookupPrivilegeValue( LPCTSTR lpSystemName, // address of string specifying the system LPCTSTR lpName, // address of string specifying the privilege PLUID lpLuid // address of locally unique identifier    ); */ AdjustTokenPrivileges(app,false,tok,sizeof(tok),tok,num); /* AdjustTokenPrivileges()的作用是通知Windows NT修改本进程的权利,其函数原形为 BOOL AdjustTokenPrivileges( HANDLE TokenHandle,  // handle to token that contains privileges BOOL DisableAllPrivileges,  // flag for disabling all privileges PTOKEN_PRIVILEGES NewState,  // pointer to new privilege information DWORD BufferLength,  // size, in bytes, of the PreviousState buffer PTOKEN_PRIVILEGES PreviousState, // receives original state of changed privileges PDWORD ReturnLength // receives required size of the

文档评论(0)

1亿VIP精品文档

相关文档