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 box


> 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/


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