139 lines
2.6 KiB
C++
139 lines
2.6 KiB
C++
/*++
|
|
|
|
Copyright (c) 1999 Microsoft Corporation
|
|
|
|
Module Name :
|
|
ulw3.cxx
|
|
|
|
Abstract:
|
|
W3 Handler Driver
|
|
|
|
Author:
|
|
Bilal Alam (balam) 13-Dec-1999
|
|
|
|
Environment:
|
|
Win32 - User Mode
|
|
|
|
Project:
|
|
ULW3.DLL
|
|
--*/
|
|
|
|
|
|
/************************************************************
|
|
* Include Headers
|
|
************************************************************/
|
|
|
|
#include "precomp.hxx"
|
|
|
|
/************************************************************
|
|
* Declarations
|
|
************************************************************/
|
|
|
|
// BUGBUG
|
|
#undef INET_INFO_KEY
|
|
#undef INET_INFO_PARAMETERS_KEY
|
|
|
|
//
|
|
// Configuration parameters registry key.
|
|
//
|
|
#define INET_INFO_KEY \
|
|
"System\\CurrentControlSet\\Services\\w3svc"
|
|
|
|
#define INET_INFO_PARAMETERS_KEY \
|
|
INET_INFO_KEY "\\Parameters"
|
|
|
|
const CHAR g_pszWpRegLocation[] =
|
|
INET_INFO_PARAMETERS_KEY "\\w3core";
|
|
|
|
|
|
|
|
DECLARE_DEBUG_PRINTS_OBJECT();
|
|
DECLARE_DEBUG_VARIABLE();
|
|
DECLARE_PLATFORM_TYPE();
|
|
|
|
/************************************************************
|
|
* Type Definitions
|
|
************************************************************/
|
|
|
|
W3_SERVER * g_pW3Server = NULL;
|
|
|
|
HRESULT
|
|
UlW3Start(
|
|
INT argc,
|
|
LPWSTR argv[],
|
|
BOOL fCompatibilityMode
|
|
)
|
|
/*++
|
|
Description:
|
|
|
|
Perform one time initialization, including ULATQ setup.
|
|
Wait on shutdown. Then clean up.
|
|
|
|
Assumes that this startup thread is CoInitialized MTA.
|
|
|
|
--*/
|
|
{
|
|
HRESULT hr = NO_ERROR;
|
|
|
|
CREATE_DEBUG_PRINT_OBJECT("w3core");
|
|
if (!VALID_DEBUG_PRINT_OBJECT())
|
|
{
|
|
return E_FAIL;
|
|
}
|
|
|
|
LOAD_DEBUG_FLAGS_FROM_REG_STR( g_pszWpRegLocation, DEBUG_ERROR );
|
|
|
|
INITIALIZE_PLATFORM_TYPE();
|
|
|
|
DBG_ASSERT( g_pW3Server == NULL );
|
|
|
|
//
|
|
// Create the global W3_SERVER object
|
|
//
|
|
|
|
g_pW3Server = new W3_SERVER( fCompatibilityMode );
|
|
if ( g_pW3Server == NULL )
|
|
{
|
|
hr = HRESULT_FROM_WIN32( ERROR_NOT_ENOUGH_MEMORY );
|
|
goto Finished;
|
|
}
|
|
|
|
//
|
|
// Do global initialization (but no listen)
|
|
//
|
|
|
|
hr = g_pW3Server->Initialize( argc, argv );
|
|
if ( FAILED( hr ) )
|
|
{
|
|
goto Finished;
|
|
}
|
|
|
|
//
|
|
// Start listening
|
|
//
|
|
|
|
hr = g_pW3Server->StartListen();
|
|
if ( FAILED( hr ) )
|
|
{
|
|
goto Finished;
|
|
}
|
|
|
|
Finished:
|
|
|
|
//
|
|
// Cleanup
|
|
//
|
|
|
|
if ( g_pW3Server != NULL )
|
|
{
|
|
g_pW3Server->Terminate( hr );
|
|
delete g_pW3Server;
|
|
g_pW3Server = NULL;
|
|
}
|
|
|
|
DELETE_DEBUG_PRINT_OBJECT();
|
|
|
|
return hr;
|
|
}
|
|
|