220 lines
5 KiB
C++
220 lines
5 KiB
C++
|
/*++
|
||
|
|
||
|
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 <pwsdata.hxx>
|
||
|
#include <inetsvcs.h>
|
||
|
|
||
|
#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);
|
||
|
}
|