This is the mail archive of the cygwin@cygwin.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: Rebooting a Win9x/2000 box


Hi All...

I tried the EWX_FORCEIFHUNG option on Windows 2000 and it did not work. I 
still got a dialog box for my cygwin window. (I could not find the symbol 
for EWX_FORCEIFHUNG, so I user 0x10 for the value.) EWX_FORCE worked 
fine...I just wanted to be a bit more gentle if I could.

Thanks,

...Karl

>From: "Max Bowsher" <max@bowshernet.freeserve.co.uk>
>To: <cygwin@cygwin.com>
>Subject: Re: Rebooting a Win9x box
>Date: Sun, 12 Aug 2001 15:12:17 +0100
>
> > Can somebody write a program for Cygwin that shuts down a win98
> > *without* any messages?
>
>Here is all the information you should need to do that:
>
>Page from MSDN:
>Platform SDK: Windows System Information
>ExitWindowsEx
>The ExitWindowsEx function either logs off the current user, shuts down the
>system, or shuts down and restarts the system. It sends the
>WM_QUERYENDSESSION message to all applications to determine if they can be
>terminated.
>
>BOOL ExitWindowsEx(
>   UINT uFlags,       // shutdown operation
>   DWORD dwReserved   // reserved
>);
>Parameters
>uFlags
>[in] Specifies the type of shutdown. This parameter must include one of the
>following values. Value Meaning
>EWX_LOGOFF Shuts down all processes running in the security context of the
>process that called the ExitWindowsEx function. Then it logs the user off.
>EWX_POWEROFF Shuts down the system and turns off the power. The system must
>support the power-off feature.
>Windows NT/2000: The calling process must have the SE_SHUTDOWN_NAME
>privilege. For more information, see the following Remarks section.
>
>EWX_REBOOT Shuts down the system and then restarts the system.
>Windows NT/2000: The calling process must have the SE_SHUTDOWN_NAME
>privilege. For more information, see the following Remarks section.
>
>EWX_SHUTDOWN Shuts down the system to a point at which it is safe to turn
>off the power. All file buffers have been flushed to disk, and all running
>processes have stopped.
>Windows NT/2000: The calling process must have the SE_SHUTDOWN_NAME
>privilege. For more information, see the following Remarks section.
>
>
>
>This parameter can optionally include the following values. Value Meaning
>EWX_FORCE Forces processes to terminate. When this flag is set, the system
>does not send the WM_QUERYENDSESSION and WM_ENDSESSION messages. This can
>cause the applications to lose data. Therefore, you should only use this
>flag in an emergency.
>EWX_FORCEIFHUNG Windows 2000: Forces processes to terminate if they do not
>respond to the WM_QUERYENDSESSION or WM_ENDSESSION message. This flag is
>ignored if EWX_FORCE is used.
>
>
>
>dwReserved
>[in] Reserved; this parameter is ignored.
>Return Values
>If the function succeeds, the return value is nonzero.
>
>If the function fails, the return value is zero. To get extended error
>information, call GetLastError.
>
>Remarks
>The ExitWindowsEx function returns as soon as it has initiated the 
>shutdown.
>The shutdown or logoff then proceeds asynchronously.
>
>During a shutdown or log-off operation, applications that are shut down are
>allowed a specific amount of time to respond to the shutdown request. If 
>the
>time expires, the system displays a dialog box that allows the user to
>forcibly shut down the application, to retry the shutdown, or to cancel the
>shutdown request. If the EWX_FORCE value is specified, the system always
>forces applications to close and does not display the dialog box.
>
>Windows 2000: If the EWX_FORCEIFHUNG value is specified, the system forces
>hung applications to close and does not display the dialog box.
>
>################################ IMPORTANT
>#####################################
>Windows 95/98: Because of the design of the shell, calling ExitWindowsEx
>with EWX_FORCE fails to completely log off the user (the system terminates
>the applications and displays the Enter Windows Password dialog box,
>however, the user's desktop remains.) To log off the user forcibly,
>terminate the Explorer process before calling ExitWindowsEx with EWX_LOGOFF
>and EWX_FORCE.
>[See end of MSDN extract for example of doing this]
>################################ IMPORTANT
>#####################################
>
>Console processes receive a separate notification message,
>CTRL_SHUTDOWN_EVENT or CTRL_LOGOFF_EVENT, as the situation warrants. A
>console process routes these messages to its HandlerRoutine function.
>ExitWindowsEx sends these notification messages asynchronously; thus, an
>application cannot assume that the console notification messages have been
>handled when a call to ExitWindowsEx returns.
>
>Windows NT/2000: To shut down or restart the system, the calling process
>must use the AdjustTokenPrivileges function to enable the SE_SHUTDOWN_NAME
>privilege. For more information about security privileges, see Privileges.
>
>Windows 95/98: ExitWindowEx does not work from a console application, as it
>does on Windows NT/Windows 2000.
>
>Requirements
>   Windows NT/2000: Requires Windows NT 3.1 or later.
>   Windows 95/98: Requires Windows 95 or later.
>   Header: Declared in Winuser.h; include Windows.h.
>   Library: Use User32.lib.
>
>See Also
>System Shutdown Overview, System Shutdown Functions, AdjustTokenPrivileges,
>HandlerRoutine
>
>Built on Tuesday, November 16, 1999
>
>######################## END MSDN EXTRACT
>#####################################
>
>This will terminate explorer.exe
>This code will NOT work on WinNT (lacks the ToolHelp32 API),
>but should (untested) work on Win2K (with sufficient priviledges).
>
>#include <windows.h>
>#include <tlhelp32.h>
>
>void TermExplorer()
>{
>  PROCESSENTRY32 procentry;
>  BOOL bFlag;
>  HANDLE hExplorer;
>  int nPos;
>  HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0 );
>  if( hSnapShot == INVALID_HANDLE_VALUE ) return;
>  procentry.dwSize = sizeof(PROCESSENTRY32);
>  bFlag = Process32First( hSnapShot, &procentry );
>  while( bFlag )
>  {
>   nPos = lstrlen(procentry.szExeFile);
>   if (nPos)
>   {
>    while (procentry.szExeFile[--nPos] != '\\' );
>    if(lstrcmpi("explorer.exe",&(procentry.szExeFile[nPos+1]))==0)
>     hExplorer =
>OpenProcess(PROCESS_ALL_ACCESS,FALSE,procentry.th32ProcessID);
>   }
>   procentry.dwSize = sizeof(PROCESSENTRY32) ;
>   bFlag = Process32Next( hSnapShot, &procentry );
>  }
>  CloseHandle(hSnapShot);
>  TerminateProcess(hExplorer, 1);
>  CloseHandle(hExplorer);
>}
>
>
>
>--
>Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
>Bug reporting:         http://cygwin.com/bugs.html
>Documentation:         http://cygwin.com/docs.html
>FAQ:                   http://cygwin.com/faq/
>


_________________________________________________________________
Get your FREE download of MSN Explorer at http://explorer.msn.com/intl.asp


--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Bug reporting:         http://cygwin.com/bugs.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]