关机,重启代码(C#.NET)

using   System;  
using   System.Runtime.InteropServices;  
   
namespace   MDINew  
{  
   
 public   class   MDI
 {  
  [StructLayout(LayoutKind.Sequential,   Pack=1)]  
   internal   struct   TokPriv1Luid  
  {  
   public   int   Count;  
   public   long   Luid;  
   public   int   Attr;  
  }  
   
  [DllImport("kernel32.dll",   ExactSpelling=true)   ]  
  internal   static   extern   IntPtr   GetCurrentProcess();  
   
  [DllImport("advapi32.dll",   ExactSpelling=true,   SetLastError=true)   ]  
  internal   static   extern   bool   OpenProcessToken(   IntPtr   h,   int   acc,   ref   IntPtr   phtok   );  
   
  [DllImport("advapi32.dll",   SetLastError=true)   ]  
  internal   static   extern   bool   LookupPrivilegeValue(   string   host,   string   name,   ref   long   pluid   );  
   
  [DllImport("advapi32.dll",   ExactSpelling=true,   SetLastError=true)   ]  
  internal   static   extern   bool   AdjustTokenPrivileges(   IntPtr   htok,   bool   disall,  
   ref   TokPriv1Luid   newst,   int   len,   IntPtr   prev,   IntPtr   relen   );  
   
  [DllImport("user32.dll",   ExactSpelling=true,   SetLastError=true)   ]  
  internal   static   extern   bool   ExitWindowsEx(   int   flg,   int   rea   );  
   
  internal   const   int   SE_PRIVILEGE_ENABLED   =   0x00000002;  
  internal   const   int   TOKEN_QUERY   =   0x00000008;  
  internal   const   int   TOKEN_ADJUST_PRIVILEGES   =   0x00000020;  
  internal   const   string   SE_SHUTDOWN_NAME   =   "SeShutdownPrivilege";  
  internal   const   int   EWX_LOGOFF   =   0x00000000;  
  internal   const   int   EWX_SHUTDOWN   =   0x00000001;  
  internal   const   int   EWX_REBOOT   =   0x00000002;  
  internal   const   int   EWX_FORCE   =   0x00000004;  
  internal   const   int   EWX_POWEROFF   =   0x00000008;  
  internal   const   int   EWX_FORCEIFHUNG   =   0x00000010;  
   
  public   void   DoExitWin(   int   flg   )  
  {  
   bool   ok;  
   TokPriv1Luid   tp;  
   IntPtr   hproc   =   GetCurrentProcess();  
   IntPtr   htok   =   IntPtr.Zero;  
   ok   =   OpenProcessToken(   hproc,   TOKEN_ADJUST_PRIVILEGES   |   TOKEN_QUERY,   ref   htok   );  
   tp.Count   =   1;  
   tp.Luid   =   0;  
   tp.Attr   =   SE_PRIVILEGE_ENABLED;  
   ok   =   LookupPrivilegeValue(   null,   SE_SHUTDOWN_NAME,   ref   tp.Luid   );  
   ok   =   AdjustTokenPrivileges(   htok,   false,   ref   tp,   0,   IntPtr.Zero,   IntPtr.Zero   );  
   ok   =   ExitWindowsEx(   flg,   0   );  
  }  
   
  public   void   Reboot()  
  {  
   DoExitWin(   EWX_REBOOT   );  
  }  
   
 }  
}  
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值