windows-nt/Source/XPSP1/NT/inetsrv/iis/ui/admin/pws/pwsctrl.cpp
2020-09-26 16:20:57 +08:00

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);
}