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("正在關(guān)閉計算機……");
?????????//?修改?EWX_SHUTDOWN?或者?EWX_LOGOFF,?EWX_REBOOT等實現(xiàn)不同得功能。
?????????//?在XP下可以看到幫助信息,以得到不同得參數(shù)
?????????//?SHUTDOWN?/?
?????????DoExitWin(EWX_SHUTDOWN);
??????}
}
本文摘自 :https://blog.51cto.com/u