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.
467 lines
9.3 KiB
467 lines
9.3 KiB
/*++
|
|
|
|
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
|