WindowsXP-SP1/inetsrv/iis/svcs/infocomm/log/comlog/comlog.cpp
2020-09-30 16:53:49 +02:00

469 lines
9.3 KiB
C++
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*++
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 lpvReserved
)
/*++
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;
DWORD dwDisp;
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