欢迎来到天天文库
浏览记录
ID:38081154
大小:27.50 KB
页数:3页
时间:2019-05-24
《如何实现关闭远程Windows2000系统》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、如何实现关闭远程Windows2000系统2001-10-30··周侃··yesky 在Win9x中退出系统大家一定不陌生吧?好象挺神乎的,其实说穿了不过就是调用了一个底层的API函数ExitWindowsEx()罢了。但这在Win2000中行不通。不信?你随便用VB,Delphi,C++Builder试一试,没反应吧? 这是因为Win2000其实就是WinNT5.0,用的就是NT的内核。WindowsNT可不象Win9x和Dos,可以随意进行底层操作,如在Win9x中可以随意关掉任何进程(如kerne
2、l32进程,这将导致死机),随意进行绝对磁盘扇区读写(如CIH病毒),WindowsNT非常注重系统每个进程的权利(这一点很像Unix,但只有这样才能算得上是一个比较完整的操作系统!),一个普通的进程是不应具备有调用系统的权利(这也是为什么Win9x和Dos下病毒成灾的原因),强行调用ExitWindowsEx()只能是没有反应。所以唯一的做法是我们来赋予它足够的权限。 启动C++Builder,新建一个工程,添加三个按钮,Caption依次为“注销当前用户”、“退出Windows2000”和“重新启动W
3、indows2000”,然后双击Button1,在中间加入以下代码:{HANDLEapp;DWORDnum;TOKEN_PRIVILEGEStok;//定义变量OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES
4、TOKEN_QUERY,&app);tok.PrivilegeCount=1;/* OpenProcessToken()这个函数的作用是打开一个进程的访问令牌,其函数原形为BOOLOpenProcessToken( HANDLE
5、ProcessHandle, //handletoprocessDWORDDesiredAccess, //desiredaccesstoprocessPHANDLETokenHandle //pointertohandleofopenaccesstoken ); 其中第二个参数是访问的请求方式,比较繁杂,欲了解详情请查看Win32Programmer'sReference GetCurrentProcess()函数的作用是得到本进程的句柄*/LookupPrivilegeValue(NULL,SE_
6、SHUTDOWN_NAME,&(tok.Privileges[0].Luid));tok.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;/* LookupPrivilegeValue()的作用是修改进程的权限,在此处为修改本进程成为具有退出系统的权限,其函数原形为BOOLLookupPrivilegeValue(LPCTSTRlpSystemName, //addressofstringspecifyingthesystemLPCTSTRlpName, //a
7、ddressofstringspecifyingtheprivilegePLUIDlpLuid //addressoflocallyuniqueidentifier );*/AdjustTokenPrivileges(app,false,&tok,sizeof(tok),&tok,&num);/*AdjustTokenPrivileges()的作用是通知WindowsNT修改本进程的权利,其函数原形为BOOLAdjustTokenPrivileges(HANDLETokenHandle, //handle
8、totokenthatcontainsprivilegesBOOLDisableAllPrivileges, //flagfordisablingallprivilegesPTOKEN_PRIVILEGESNewState, //pointertonewprivilegeinformationDWORDBufferLength, //size,inbytes,ofthePreviousStatebufferPTOKEN_PRIVILEGESPreviousState,//receivesoriginalst
9、ateofchangedprivilegesPDWORDReturnLength //receivesrequiredsizeofthePreviousStatebuffer );*/ExitWindowsEx(EWX_LOGOFF,0);//注销当前用户,不用多说} 如法炮制,Button2的OnClick代码为:{HANDLEapp;DWORDnum;TOKEN_PRIVILEGEStok;OpenPro
此文档下载收益归作者所有