首页 > Windows开发 > 详细

Windows编程之提权2

时间:2014-04-09 08:54:43      阅读:614      评论:0      收藏:0      [点我收藏+]

实现打开程序自动关机:

需要用到的函数

bubuko.com,布布扣
BOOL ExitWindowsEx(

UINT uFlags, // 关闭参数

DWORD dwReserved // 系统保留,一般取0

);
bubuko.com,布布扣
 uFlags 说明
EWX_FORCE 强制终止进程。
EWX_LOGOFF 关闭所有进程,然后注销用户。
EWX_POWEROFF 关闭系统并关闭电源。该系统必须支持断电。
EWX_REBOOT 关闭系统,然后重新启动系统。
EWX_SHUTDOWN 关闭系统,安全地关闭电源。所有文件缓冲区已经刷新到磁盘上,所有正在运行的进程已经停止。

 

 

 

 

(Windows要求:Windows NT中:调用进程必须有SE_SHUTDOWN_NAME特权。Windows 9X中:可以直接调用。)

 

 

delphi代码实现:

bubuko.com,布布扣
procedure TForm1.FormCreate(Sender: TObject);
begin
    Shutdown;
end;

function TForm1.GetShutdownRoot:Boolean;
var
  myhandle:THandle;    //返回句柄
  myprivilege:TOKEN_PRIVILEGES;    //Luid and privilege数组
  myluid:Int64;         //luid
  buff:Cardinal;
begin
    Result:=False;
    //打开进程关联的访问令牌
    if not OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES+TOKEN_QUERY,myhandle) then Result:=False;
    //设置一个关机权限,获取luid
    if not LookupPrivilegeValue(nil,SeShutdownPrivileges,myluid) then Result:=False;
    myprivilege.PrivilegeCount:=1; //指定特权数组个数为1
    myprivilege.Privileges[0].Luid:=myluid;
    myprivilege.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED; //特权启用
    //通知操作系统特权为打开状态
    AdjustTokenPrivileges(myhandle,False,myprivilege,SizeOf(myprivilege),nil,buff);
    if not CloseHandle(myhandle) then Result:=False;           //关闭句柄对象
    Result:=True;
end;

procedure TForm1.Shutdown;
begin
   if not GetShutdownRoot then ShowMessage(获得关机权限失败);
   if not ExitWindowsEx(EWX_SHUTDOWN,0) then ShowMessage(关机失败!);          //关机
end;
bubuko.com,布布扣

 

Windows编程之提权2,布布扣,bubuko.com

Windows编程之提权2

原文:http://www.cnblogs.com/itsoldiers/p/3653305.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!