Mailing-List: contact cygwin-help AT sourceware DOT cygnus DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT sources DOT redhat DOT com Delivered-To: mailing list cygwin AT sources DOT redhat DOT com X-Originating-IP: [24.0.161.175] From: "Karl M" To: cygwin AT cygwin DOT com Subject: Re: Rebooting a Win9x/2000 box Date: Sat, 18 Aug 2001 17:41:38 -0700 Mime-Version: 1.0 Content-Type: text/plain; format=flowed Message-ID: X-OriginalArrivalTime: 19 Aug 2001 00:41:38.0425 (UTC) FILETIME=[B4CDA690:01C12847] 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" >To: >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 >#include > >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/