Mail Archives: cygwin/2001/08/18/20:42:04
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 AT bowshernet DOT freeserve DOT co DOT uk>
>To: <cygwin AT cygwin DOT 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/
- Raw text -