/*++ 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" #include #include #include "pwsctrl.h" #define REGKEY_STP _T("SOFTWARE\\Microsoft\\INetStp") #define REGKEY_INSTALLKEY _T("InstallPath") //------------------------------------------------------------------------ //BOOL W95StartW3SVC( LPCSTR pszPath, LPCSTR pszPathDir, PCHAR pszParams ) BOOL W95StartW3SVC( void ) { HKEY hKey; TCHAR chPath[MAX_PATH+1]; DWORD cbPath; DWORD err, type; // 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 CString sz = chPath; sz += _T("\\inetinfo.exe"); // and do it to it! HINSTANCE res = ShellExecute( NULL, // handle to parent window NULL, // pointer to string that specifies operation to perform sz, // pointer to filename or folder name string _T("-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 ( HandleToUlong(res) > 32 ); /* STARTUPINFO startupInfo; PROCESS_INFORMATION processInfo; ZeroMemory(&startupInfo, sizeof(STARTUPINFO)); startupInfo.cb = sizeof(STARTUPINFO); if ( !CreateProcess( pszPath, pszParams, NULL, NULL, FALSE, 0, NULL, pszPathDir, &startupInfo, &processInfo) ) { printf("Create process failed with %d\n", GetLastError()); return FALSE; } return TRUE; */ } //------------------------------------------------------------------------ BOOL W95ShutdownW3SVC( VOID ) { DWORD i; HANDLE hEvent; hEvent = CreateEventA(NULL, TRUE, FALSE, PWS_SHUTDOWN_EVENT); if ( hEvent == NULL ) { return TRUE; // not there } if ( GetLastError() == ERROR_ALREADY_EXISTS ) { SetEvent( hEvent ); } CloseHandle(hEvent); for (i=0; i < 25; i++) { if ( IsInetinfoRunning() ) { Sleep(500); continue; } break; } return TRUE; } //------------------------------------------------------------------------ BOOL W95ShutdownIISADMIN( VOID ) { DWORD i; HANDLE hEvent; hEvent = CreateEvent(NULL, TRUE, FALSE, _T(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++) { if ( IsIISAdminRunning() ) { Sleep(500); continue; } break; } return(TRUE); } //------------------------------------------------------------------------ BOOL IsIISAdminRunning( VOID ) { HANDLE hEvent; BOOL fFound = FALSE; hEvent = CreateEvent(NULL, TRUE, FALSE, _T(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, _T(PWS_SHUTDOWN_EVENT)); if ( hEvent != NULL ) { fFound = (GetLastError() == ERROR_ALREADY_EXISTS); CloseHandle(hEvent); } return(fFound); }