Jump to content
Xtreme .Net Talk

Recommended Posts

Posted

Dear I have used Win32 API but its not working under XP

in Windows XP it only logoff PC , no restart no shutdown

 

In XP i did this to restart PC

Shell("SHUTDOWN -R")

 

I was just asking about it, rather .NET Framework have any functions some thing like this

The one and only

Dr. Madz

eee-m@il

Posted

But ExitWindowsEx reaise an error when i try to call this method

with this

 

ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0)

 

if i type this code as

ExitWindowsEx([color=red]EWX_SHUTDOWN[/color], 0)

then there is no problem with other windows but windos XP do not shutdown.

 

It cause an error if i try to give it more then 1 flags.

The one and only

Dr. Madz

eee-m@il

  • 4 months later...
Posted

Found this with google

http://www.visualcsharp.it/Sorgenti/Shutdown/Shutdown.asp

Coments are in italian, but code is clear...

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("Sto per spegnere il computer...");
        //Modificare EWX_SHUTDOWN con EWX_LOGOFF, EWX_REBOOT, ecc, ecc...
        DoExitWin(EWX_SHUTDOWN);
     }
}



Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...