using System; using System.Runtime.InteropServices; class shoutdown { [StructLayout (LayoutKind.Sequential, Pack = 1)] internal struct TokPriv1Luid { public int Count; " 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 Con st 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); // can be seen in XP help information to get different parameters have // SHUTDOWN / DoExitWin (EWX_SHUTDOWN);? } } windows applications, above Main () the previous code Need to put the following code: [stathread]
Static void main ()
{{
.......
................}