- using System;
- using System.Collections;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Web;
- using System.Web.SessionState;
- using System.Web.UI;
- using System.Web.UI.WebControls;
- using System.Web.UI.HtmlControls;
- using System.Runtime.InteropServices;
- namespace WebApplication1_advapi
- {
- /**//// <summary>
- /// WebForm1 的摘要说明。
- /// </summary>
- public class WebForm1 : System.Web.UI.Page
- {
- protected const int SE_PRIVILEGE_ENABLED = 0x2;
- protected const int TOKEN_QUERY = 0x8;
- protected const int TOKEN_ADJUST_PRIVILEGES = 0x20;
- protected const string SE_SHUTDOWN_NAME = "SeShutdownPrivilege";
- protected const int EWX_LOGOFF = 0x0;
- protected const int EWX_SHUTDOWN = 0x1;
- protected const int EWX_REBOOT = 0x2;
- protected const int EWX_FORCE = 0x4;
- protected const int EWX_POWEROFF = 0x8;
- protected System.Web.UI.WebControls.Button Button1;
- protected const int EWX_FORCEIFHUNG = 0x10;
- [StructLayout(LayoutKind.Sequential, Pack=1)]
- protected struct LuidStruct
- {
- public int Count;
- public long Luid;
- public int Attr;
- }
- [DllImport("kernel32.dll", ExactSpelling=true)]
- protected static extern IntPtr GetCurrentProcess();
- [DllImport("advapi32.dll", SetLastError=true)]
- protected static extern bool OpenProcessToken(IntPtr h, int acc, ref IntPtr phtok);
- [DllImport("advapi32.dll", SetLastError=true)]
- protected static extern bool LookupPrivilegeValue(string host, string name, ref long pluid);
- [DllImport("advapi32.dll", SetLastError=true, ExactSpelling=true)]
- protected static extern bool AdjustTokenPrivileges(IntPtr htok, bool disall, ref LuidStruct newst, int len, IntPtr prev, IntPtr relen);
- [DllImport("user32.dll", SetLastError=true, ExactSpelling=true)]
- protected static extern bool ExitWindowsEx(int flg, int rea);
- protected static void DoExitWindows(int flg)
- {
- LuidStruct tp;
- IntPtr hproc = GetCurrentProcess();
- IntPtr htok = IntPtr.Zero;
- OpenProcessToken(hproc, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, ref htok);
- tp.Count = 1;
- tp.Luid = 0;
- tp.Attr = SE_PRIVILEGE_ENABLED;
- LookupPrivilegeValue(null, SE_SHUTDOWN_NAME, ref tp.Luid);
- AdjustTokenPrivileges(htok, false, ref tp, 0, IntPtr.Zero, IntPtr.Zero);
- ExitWindowsEx(flg, 0);
- }
- public static void Shutdown()
- {
- DoExitWindows(EWX_SHUTDOWN);
- }
- public static void Reboot()
- {
- DoExitWindows(EWX_REBOOT | EWX_FORCE);
- }
- public static void Logoff()
- {
- DoExitWindows(EWX_LOGOFF);
- }
- [DllImport("advapi32.dll", SetLastError=true, ExactSpelling=false)]
- protected static extern bool InitiateSystemShutdown(string name, string msg, int timeout, bool force, bool reboot);
- private void Page_Load(object sender, System.EventArgs e)
- {
- // 在此处放置用户代码以初始化页面
- }
- Web 窗体设计器生成的代码#region Web 窗体设计器生成的代码
- override protected void OnInit(EventArgs e)
- {
- //
- // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
- //
- InitializeComponent();
- base.OnInit(e);
- }
- /**//// <summary>
- /// 设计器支持所需的方法 - 不要使用代码编辑器修改
- /// 此方法的内容。
- /// </summary>
- private void InitializeComponent()
- {
- this.Button1.Click += new System.EventHandler(this.Button1_Click);
- this.Load += new System.EventHandler(this.Page_Load);
- }
- #endregion
- private void Button1_Click(object sender, System.EventArgs e)
- {
- InitiateSystemShutdown(null,null,0,true,true);
- }
- }
- }
转载于:https://blog.51cto.com/cnming/386925