正文

C#关闭计算机  --危险啊--请慎重2008-09-03 07:10:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/yzrj/37919.html

分享到:

using System;using System.Runtime.InteropServices;   class shoutdown{   [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;    private static 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 static void Main()      {         Console.WriteLine("正在关闭计算机……");         // 修改 EWX_SHUTDOWN 或者 EWX_LOGOFF, EWX_REBOOT等实现不同得功能。         // 在XP下可以看到帮助信息,以得到不同得参数         // SHUTDOWN /?         DoExitWin(EWX_SHUTDOWN);      }}  

阅读(1973) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册