|
|
/*++
Copyright (c) 1995-1996 Microsoft Corporation
Module Name : clapi.cpp
Abstract: CLAPI - Common logging layer
Author:
Terence Kwan ( terryk ) 18-Sep-1996
Project:
IIS Logging 3.0
--*/
#include "precomp.hxx"
#include "comlog.hxx"
#include <inetsvcs.h>
DECLARE_PLATFORM_TYPE();
// by exporting DllRegisterServer, you can use regsvr.exe
#define CLAPI_PROG_ID "CLAPI.INETLOGINFORMATION"
#define CLAPI_CLSID_KEY_NAME "CLSID"
#define CLAPI_INPROC_SERVER "InProcServer32"
#define CLAPI_CLSID "{A1F89741-F619-11CF-BC0F-00AA006111E0}"
/*
#define LOGPUBLIC_PROG_ID "MSIISLOG.MSLOGPUBLIC"
#define LOGPUBLIC_CLSID "{FB583AC4-C361-11d1-8BA4-080009DCC2FA}"
*/ extern "C" {
BOOL WINAPI DLLEntry( HINSTANCE hDll, DWORD dwReason, LPVOID lpvReserved ); }
BOOL WINAPI DLLEntry( HINSTANCE hDll, DWORD dwReason, LPVOID ) /*++
Routine Description:
DLL entrypoint.
Arguments:
hDLL - Instance handle.
Reason - The reason the entrypoint was called. DLL_PROCESS_ATTACH DLL_PROCESS_DETACH DLL_THREAD_ATTACH DLL_THREAD_DETACH
Reserved - Reserved.
Return Value:
BOOL - TRUE if the action succeeds.
--*/ { BOOL bReturn = TRUE;
switch ( dwReason ) {
case DLL_PROCESS_ATTACH: DisableThreadLibraryCalls(hDll); break;
case DLL_PROCESS_DETACH: break;
default: break; }
return bReturn; } // DllEntry
STDAPI DllRegisterServer(void) /*++
Routine Description: MFC register server function
Arguments:
Return Value:
--*/ {
LONG ret = E_UNEXPECTED; HKEY hProgID = NULL; HKEY hCLSID = NULL; HKEY hClapi = NULL; HKEY hKey; HMODULE hModule;
CHAR szName[MAX_PATH+1];
//
// CLAPI.INETLOGINFORMATION
//
hProgID = CreateKey( HKEY_CLASSES_ROOT, CLAPI_PROG_ID, CLAPI_PROG_ID);
if ( hProgID == NULL ) { IIS_PRINTF((buff,"Cannot set value for key %s\n", CLAPI_PROG_ID)); goto exit; }
hCLSID = CreateKey(hProgID, CLAPI_CLSID_KEY_NAME, CLAPI_CLSID);
if ( hCLSID == NULL ) { IIS_PRINTF((buff,"Cannot set value %s for key %s\n", CLAPI_CLSID_KEY_NAME, CLAPI_CLSID)); goto exit; }
RegCloseKey(hCLSID); hCLSID = NULL;
//
// CLSID
//
if ( RegOpenKeyExA(HKEY_CLASSES_ROOT, CLAPI_CLSID_KEY_NAME, 0, KEY_ALL_ACCESS, &hCLSID) != ERROR_SUCCESS ) {
IIS_PRINTF((buff,"Cannot open CLSID key\n")); goto exit; }
hClapi = CreateKey(hCLSID,CLAPI_CLSID,CLAPI_PROG_ID); if ( hClapi == NULL ) { goto exit; }
//
// InProcServer32
//
hModule=GetModuleHandleA("iscomlog.dll"); if (hModule == NULL) { IIS_PRINTF((buff,"GetModuleHandle failed with %d\n",GetLastError())); goto exit; }
if (GetModuleFileNameA(hModule, szName, sizeof(szName))==0) {
IIS_PRINTF((buff, "GetModuleFileName failed with %d\n",GetLastError())); goto exit; }
hKey = CreateKey(hClapi,CLAPI_INPROC_SERVER,szName);
if ( hKey == NULL ) { goto exit; }
if (RegSetValueExA(hKey, "ThreadingModel", 0, REG_SZ, (LPBYTE)"Both", sizeof("Both")) != ERROR_SUCCESS) {
RegCloseKey(hKey); hKey = NULL; goto exit; } RegCloseKey(hKey);
/*
//
// Set ProgID key
//
hKey = CreateKey(hClapi,"ProgID",CLAPI_PROG_ID); if ( hKey == NULL ) { goto exit; }
RegCloseKey(hKey); ret = S_OK;
if ( hClapi != NULL ) { RegCloseKey(hClapi); hClapi = NULL; }
if ( hProgID != NULL ) { RegCloseKey(hProgID); hProgID = NULL; }
if ( hCLSID != NULL ) { RegCloseKey(hCLSID); hCLSID = NULL; }
//
// MSIISLOG.MSLOGPUBLIC
//
hProgID = CreateKey( HKEY_CLASSES_ROOT, LOGPUBLIC_PROG_ID, LOGPUBLIC_PROG_ID);
if ( hProgID == NULL ) { IIS_PRINTF((buff,"Cannot set value for key %s\n", LOGPUBLIC_PROG_ID)); goto exit; }
hCLSID = CreateKey(hProgID, CLAPI_CLSID_KEY_NAME, LOGPUBLIC_CLSID);
if ( hCLSID == NULL ) { IIS_PRINTF((buff,"Cannot set value %s for key %s\n", CLAPI_CLSID_KEY_NAME, LOGPUBLIC_CLSID)); goto exit; }
RegCloseKey(hCLSID); hCLSID = NULL;
//
// CLSID
//
if ( RegOpenKeyExA(HKEY_CLASSES_ROOT, CLAPI_CLSID_KEY_NAME, 0, KEY_ALL_ACCESS, &hCLSID) != ERROR_SUCCESS ) {
IIS_PRINTF((buff,"Cannot open CLSID key\n")); goto exit; }
hClapi = CreateKey(hCLSID,LOGPUBLIC_CLSID,LOGPUBLIC_PROG_ID); if ( hClapi == NULL ) { goto exit; }
//
// InProcServer32
//
hModule=GetModuleHandleA("iscomlog.dll"); if (hModule == NULL) { IIS_PRINTF((buff,"GetModuleHandle failed with %d\n",GetLastError())); goto exit; }
if (GetModuleFileNameA(hModule, szName, sizeof(szName))==0) {
IIS_PRINTF((buff, "GetModuleFileName failed with %d\n",GetLastError())); goto exit; }
hKey = CreateKey(hClapi,CLAPI_INPROC_SERVER,szName);
if ( hKey == NULL ) { goto exit; }
if (RegSetValueExA(hKey, "ThreadingModel", 0, REG_SZ, (LPBYTE)"Both", sizeof("Both")) != ERROR_SUCCESS) {
RegCloseKey(hKey); goto exit; }
RegCloseKey(hKey);
//
// Set ProgID key
//
hKey = CreateKey(hClapi,"ProgID",LOGPUBLIC_PROG_ID); if ( hKey == NULL ) { goto exit; }
RegCloseKey(hKey); */ ret = S_OK;
exit:
if ( hClapi != NULL ) { RegCloseKey(hClapi); hClapi = NULL; }
if ( hProgID != NULL ) { RegCloseKey(hProgID); hProgID = NULL; }
if ( hCLSID != NULL ) { RegCloseKey(hCLSID); hCLSID = NULL; }
return ret;
} // DllRegisterServer
STDAPI DllUnregisterServer( VOID ) { LONG err; CHAR tmpBuf[MAX_PATH+1];
//
// delete CLASSES/CLAPI.INETLOGINFORMATION/CLSID
//
strcpy(tmpBuf,CLAPI_PROG_ID); strcat(tmpBuf,TEXT("\\")); strcat(tmpBuf,CLAPI_CLSID_KEY_NAME);
err = RegDeleteKey(HKEY_CLASSES_ROOT, tmpBuf);
//
// delete CLASSES/CLAPI.INETLOGINFORMATION
//
err = RegDeleteKey(HKEY_CLASSES_ROOT, CLAPI_PROG_ID);
//
// delete CLASSES/CLSID/{}/InProcServer32
//
strcpy(tmpBuf,CLAPI_CLSID_KEY_NAME); strcat(tmpBuf,TEXT("\\")); strcat(tmpBuf,CLAPI_CLSID); strcat(tmpBuf,TEXT("\\")); strcat(tmpBuf,CLAPI_INPROC_SERVER);
err = RegDeleteKey(HKEY_CLASSES_ROOT, tmpBuf);
//
// delete CLASSES/CLSID/{}/ProgID
//
strcpy(tmpBuf,CLAPI_CLSID_KEY_NAME); strcat(tmpBuf,TEXT("\\")); strcat(tmpBuf,CLAPI_CLSID); strcat(tmpBuf,TEXT("\\")); strcat(tmpBuf,"ProgID");
err = RegDeleteKey(HKEY_CLASSES_ROOT, tmpBuf);
//
// delete CLASSES/CLSID/{}
//
strcpy(tmpBuf,CLAPI_CLSID_KEY_NAME); strcat(tmpBuf,TEXT("\\")); strcat(tmpBuf,CLAPI_CLSID);
err = RegDeleteKey(HKEY_CLASSES_ROOT, tmpBuf);
/*
//
// delete CLASSES/MSIISLOG.MSLOGPUBLIC/CLSID
//
strcpy(tmpBuf,LOGPUBLIC_PROG_ID); strcat(tmpBuf,TEXT("\\")); strcat(tmpBuf,CLAPI_CLSID_KEY_NAME);
err = RegDeleteKey(HKEY_CLASSES_ROOT, tmpBuf);
//
// delete CLASSES/CLAPI.INETLOGINFORMATION
//
err = RegDeleteKey(HKEY_CLASSES_ROOT, LOGPUBLIC_PROG_ID);
//
// delete CLASSES/CLSID/{}/InProcServer32
//
strcpy(tmpBuf,CLAPI_CLSID_KEY_NAME); strcat(tmpBuf,TEXT("\\")); strcat(tmpBuf,LOGPUBLIC_CLSID); strcat(tmpBuf,TEXT("\\")); strcat(tmpBuf,CLAPI_INPROC_SERVER);
err = RegDeleteKey(HKEY_CLASSES_ROOT, tmpBuf);
//
// delete CLASSES/CLSID/{}/ProgID
//
strcpy(tmpBuf,CLAPI_CLSID_KEY_NAME); strcat(tmpBuf,TEXT("\\")); strcat(tmpBuf,LOGPUBLIC_CLSID); strcat(tmpBuf,TEXT("\\")); strcat(tmpBuf,"ProgID");
err = RegDeleteKey(HKEY_CLASSES_ROOT, tmpBuf);
//
// delete CLASSES/CLSID/{}
//
strcpy(tmpBuf,CLAPI_CLSID_KEY_NAME); strcat(tmpBuf,TEXT("\\")); strcat(tmpBuf,LOGPUBLIC_CLSID);
err = RegDeleteKey(HKEY_CLASSES_ROOT, tmpBuf); */ return S_OK;
} // DllUnregisterServer
|