Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

180 lines
4.5 KiB

//#ifndef WIN32_LEAN_AND_MEAN
//#define WIN32_LEAN_AND_MEAN
//#endif
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0500
#endif
#include <windows.h>
#include <tchar.h>
#include <msi.h>
#include <assert.h>
#include <time.h>
#include <msi.h>
#include <msiquery.h>
#include "webcaum.h"
#include "..\..\shared\common.h"
#include "..\..\shared\propertybag.h"
#include "..\..\shared\apppool.h"
HINSTANCE g_hinst;
//--------------------------------------------------------------------------
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
{
g_hinst = (HINSTANCE)hModule;
break;
}
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
//--------------------------------------------------------------------------
//
// This function is exported
//
UINT _stdcall Install(MSIHANDLE hInstall)
{
//::MessageBox( NULL, TEXT( "attach debugger" ), TEXT( "uddi" ), MB_OK );
ENTER();
TCHAR szCustomActionData[ 256 ];
DWORD dwLen = sizeof( szCustomActionData ) / sizeof( szCustomActionData[0] );
UINT iRet = MsiGetProperty( hInstall, TEXT( "CustomActionData" ), szCustomActionData, &dwLen);
if( ERROR_SUCCESS != iRet )
{
LogError( TEXT( "Error getting custom action data in Web installer" ), iRet );
return iRet;
}
//::MessageBox( NULL, TEXT( "got CustomActionaData" ), TEXT( "uddi" ), MB_OK );
//
// get rid of any lefover entries first...
//
RemoveIISUDDIMetabase();
//::MessageBox( NULL, TEXT( "removed metabase" ), TEXT( "uddi" ), MB_OK );
//
// put our entries into the IIS metabase
//
TCHAR szUserName[CA_VALUE_LEN+1];
TCHAR szPwd[CA_VALUE_LEN+1];
TCHAR szTmpBuf[ 1024 ];
TCHAR szTmpProperty[ 256 ];
TCHAR szLogPath[ MAX_PATH + 1 ] = {0};
ATOM at = 0;
int poolidtype = 0;
memset (szUserName, 0, sizeof szUserName);
memset (szPwd, 0, sizeof szPwd);
memset (szTmpProperty, 0, sizeof szTmpProperty );
CPropertyBag pb;
if( !pb.Parse( szCustomActionData, sizeof( szCustomActionData ) / sizeof( TCHAR ) ) )
{
return ERROR_INSTALL_FAILURE;
}
//::MessageBox( NULL, TEXT( "parsed properties" ), TEXT( "uddi" ), MB_OK );
poolidtype = pb.GetValue( TEXT( "APPPOOL_IDENTITY_TYPE" ) );
_tcsncpy( szUserName, pb.GetString( TEXT( "WAM_USER_NAME" ), szTmpBuf ), CA_VALUE_LEN );
_tcsncpy( szTmpProperty, pb.GetString( TEXT( "C9E18" ), szTmpProperty ), CA_VALUE_LEN );
_tcsncpy( szLogPath, pb.GetString( TEXT( "LOGDIR" ), szLogPath ), MAX_PATH );
//::MessageBox( NULL, szTmpProperty, TEXT( "C9E18" ), MB_OK );
if ( _tcslen( szTmpProperty ) )
{
at = (ATOM)_ttoi( szTmpProperty );
GlobalGetAtomName( at, szPwd, CA_VALUE_LEN );
}
//::MessageBox( NULL, szPwd, TEXT( "C9E18 Atom value" ), MB_OK );
iRet = SetupIISUDDIMetabase( poolidtype, szUserName, szPwd );
//::MessageBox( NULL, TEXT( "metabase set up ok" ), TEXT( "uddi" ), MB_OK );
//iRet = SetupIISUDDIMetabase( 3, TEXT( "A-MARKPA11\\Guest" ), TEXT( "" ) );
if( ERROR_SUCCESS != iRet )
{
return iRet;
}
//
// stop and start the app pool
//
CUDDIAppPool apppool;
apppool.Recycle();
//::MessageBox( NULL, TEXT( "app pool recycled" ), TEXT( "uddi" ), MB_OK );
//
// set permissions on the UDDI folders
//
if ( !SetUDDIFolderDacls( szUserName ) )
{
return ERROR_INSTALL_FAILURE;
}
//
// now set permissions on the log folders
//
if ( _tcslen( szLogPath ) )
{
if ( !SetFolderAclRecurse( szLogPath, szUserName, GENERIC_READ | GENERIC_WRITE | DELETE ) )
return ERROR_INSTALL_FAILURE;
}
//
// Set permissions on the Windows TEMP folder; we need access to this directory because our code
// does CLR serialization.
if( !SetWindowsTempDacls( szUserName ) )
{
return ERROR_INSTALL_FAILURE;
}
//::MessageBox( NULL, TEXT( "finishing this part..." ), TEXT( "uddi" ), MB_OK );
Log (_T("About to leave Install with retcode %d"), iRet);
return iRet;
}
//--------------------------------------------------------------------------
//
// This function is exported
//
UINT _stdcall Uninstall(MSIHANDLE hInstall)
{
ENTER();
//::MessageBox( NULL, TEXT( "attach debugger" ), TEXT( "uddi" ), MB_OK );
RemoveIISUDDIMetabase();
//
// delete the app pool
//
CUDDIAppPool apppool;
apppool.Delete();
return ERROR_SUCCESS;
}