/*++ Copyright (c) 1997 Microsoft Corporation Module Name: pwsctrl.cpp Abstract: This is the main routine for the Internet Services suite. Author: Johnson Apacible (JohnsonA) 29-Apr-1997 Boyd Multerer (BoydM) 29-Apr-1997 --*/ //#include "stdafx.h" //#include "resource.h" extern "C" { #include #include #include } #include #include #include //#include //#include #include //#include //#include #include #include #include #include #include #include #define REGKEY_STP TEXT("SOFTWARE\\Microsoft\\INetStp") #define REGKEY_INSTALLKEY TEXT("InstallPath") //------------------------------------------------------------------------ //BOOL W95StartW3SVC( LPCSTR pszPath, LPCSTR pszPathDir, PCHAR pszParams ) BOOL W95StartW3SVC( void ) { HKEY hKey; TCHAR chPath[MAX_PATH+1]; DWORD cbPath; DWORD err, type; STR strPath; // get the server install path from the registry // open the registry key, if it exists err = RegOpenKeyEx( HKEY_LOCAL_MACHINE, // handle of open key REGKEY_STP, // address of name of subkey to open 0, // reserved KEY_READ, // security access mask &hKey // address of handle of open key ); // if we did not open the key for any reason (say... it doesn't exist) // then leave right away if ( err != ERROR_SUCCESS ) return FALSE; cbPath = sizeof(chPath); type = REG_SZ; err = RegQueryValueEx( hKey, // handle of key to query REGKEY_INSTALLKEY, // address of name of value to query NULL, // reserved &type, // address of buffer for value type (PUCHAR)chPath, // address of data buffer &cbPath // address of data buffer size ); // close the key RegCloseKey( hKey ); // if we did get the key for any reason (say... it doesn't exist) // then leave right away if ( err != ERROR_SUCCESS ) return FALSE; // add on the file name if (strPath.Copy(chPath)) { if (strPath.Append("\\inetinfo.exe")) { // and do it to it! ULONG_PTR res = (ULONG_PTR)ShellExecute( NULL, // handle to parent window NULL, // pointer to string that specifies operation to perform strPath.QueryStr(), // pointer to filename or folder name string "-e w3svc", // pointer to string that specifies executable-file parameters NULL, // pointer to string that specifies default directory SW_HIDE // whether file is shown when opened ); return ( res > 32 ); } } return FALSE; } //------------------------------------------------------------------------ BOOL W95ShutdownW3SVC( VOID ) { HANDLE hEvent; hEvent = CreateEvent(NULL, TRUE, FALSE, "Inet_shutdown"); if ( hEvent == NULL ) { return TRUE; // not there } if ( GetLastError() == ERROR_ALREADY_EXISTS ) { SetEvent( hEvent ); } CloseHandle(hEvent); return TRUE; } //------------------------------------------------------------------------ BOOL W95ShutdownIISADMIN( VOID ) { DWORD i; HANDLE hEvent; hEvent = CreateEvent(NULL, TRUE, FALSE, IIS_AS_EXE_OBJECT_NAME); if ( hEvent == NULL ) { return(TRUE); } if ( GetLastError() == ERROR_ALREADY_EXISTS ) { SetEvent( hEvent ); } CloseHandle(hEvent); for (i=0; i < 20; i++) { hEvent = CreateEvent(NULL, TRUE, FALSE, IIS_AS_EXE_OBJECT_NAME); if ( hEvent != NULL ) { DWORD err = GetLastError(); CloseHandle(hEvent); if ( err == ERROR_ALREADY_EXISTS ) { Sleep(500); continue; } } break; } return(TRUE); } //------------------------------------------------------------------------ BOOL IsIISAdminRunning( VOID ) { HANDLE hEvent; BOOL fFound = FALSE; hEvent = CreateEvent(NULL, TRUE, FALSE, IIS_AS_EXE_OBJECT_NAME); if ( hEvent != NULL ) { fFound = (GetLastError() == ERROR_ALREADY_EXISTS); CloseHandle(hEvent); } return(fFound); } //------------------------------------------------------------------------ BOOL IsInetinfoRunning( VOID ) { HANDLE hEvent; BOOL fFound = FALSE; hEvent = CreateEvent(NULL, TRUE, FALSE, PWS_SHUTDOWN_EVENT); if ( hEvent != NULL ) { fFound = (GetLastError() == ERROR_ALREADY_EXISTS); CloseHandle(hEvent); } return(fFound); }