windows-nt/Source/XPSP1/NT/inetsrv/iis/svcs/irtl/pwssvcs/pwsctrl.cxx

210 lines
5 KiB
C++
Raw Normal View History

2020-09-26 03:20:57 -05:00
/*++
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);
}