210 lines
5 KiB
C++
210 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"
|
|
|
|
extern "C" {
|
|
#include <nt.h>
|
|
#include <ntrtl.h>
|
|
#include <nturtl.h>
|
|
}
|
|
#include <dbgutil.h>
|
|
#include <ole2.h>
|
|
#include <windows.h>
|
|
//#include <coiadm.hxx>
|
|
//#include <admacl.hxx>
|
|
#include <iiscnfg.h>
|
|
//#include <secpriv.h>
|
|
//#include <globlist.hxx>
|
|
#include <buffer.hxx>
|
|
#include <string.hxx>
|
|
#include <pwsctrl.h>
|
|
#include <shellapi.h>
|
|
#include <pwsdata.hxx>
|
|
#include <inetsvcs.h>
|
|
|
|
|
|
#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);
|
|
}
|