C # code for logout, restart, and Shutdown,
First, import the namespace
Using System. Runtime. InteropServices;
References
[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;
Integer 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 );
}
Private void button2_Click (object sender, EventArgs e)
{
// This code implements the restart function
DoExitWin (EWX_REBOOT );
}
Private void button3_Click (object sender, EventArgs e)
{
// This code can be deregistered
DoExitWin (EWX_LOGOFF );
}
Private void button1_Click_1 (object sender, EventArgs e)
{
// This code implements the shutdown Function
DoExitWin (EWX_SHUTDOWN );
}