|
|
//+--------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1996 - 1999
//
// File: certcli.cpp
//
// Contents: Cert Server client implementation
//
// History: 24-Aug-96 vich created
//
//---------------------------------------------------------------------------
#include "pch.cpp"
#pragma hdrstop
#include "certsrvd.h"
#include "configp.h"
#include "config.h"
#include "getconf.h"
#include "request.h"
#include "certtype.h"
#include "csif.h" // CertIf includes
#include "csprxy.h" // CertPrxy includes
#include "resource.h"
#include "csresstr.h"
HINSTANCE g_hInstance = NULL;
extern CRITICAL_SECTION g_csDomainSidCache; extern CRITICAL_SECTION g_csOidURL; extern BOOL g_fInitDone = FALSE; extern BOOL g_fOidURL = FALSE;
#if DBG_CERTSRV
extern VOID RegisterMemoryDeleteCriticalSection(); #endif
CComModule _Module;
BEGIN_OBJECT_MAP(ObjectMap) OBJECT_ENTRY(CLSID_CCertConfig, CCertConfig) OBJECT_ENTRY(CLSID_CCertGetConfig, CCertGetConfig) OBJECT_ENTRY(CLSID_CCertRequest, CCertRequest) #include "csifm.h" // CertIf object map entries
END_OBJECT_MAP()
/////////////////////////////////////////////////////////////////////////////
// DLL Entry Point
extern "C" BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) { BOOL fRet = TRUE; // assume OK
__try { fRet = CertPrxyDllMain(hInstance, dwReason, lpReserved); switch (dwReason) { case DLL_PROCESS_ATTACH: myVerifyResourceStrings(hInstance); _Module.Init(ObjectMap, hInstance); DisableThreadLibraryCalls(hInstance); g_hInstance = hInstance; InitializeCriticalSection(&g_csDomainSidCache); g_fInitDone = TRUE; InitializeCriticalSection(&g_csOidURL); g_fOidURL = TRUE; break;
case DLL_PROCESS_DETACH: myFreeColumnDisplayNames(); if (g_fOidURL) { DeleteCriticalSection(&g_csOidURL); } if (g_fInitDone) { DeleteCriticalSection(&g_csDomainSidCache); } DbgTerminate(); _Module.Term(); #if DBG_CERTSRV
RegisterMemoryDeleteCriticalSection(); #endif
g_hInstance = NULL; break; } } __except(EXCEPTION_EXECUTE_HANDLER) { // return failure
fRet = FALSE; } return(fRet); }
/////////////////////////////////////////////////////////////////////////////
// Used to determine whether the DLL can be unloaded by OLE
STDAPI DllCanUnloadNow(void) { return( (S_OK == CertPrxyDllCanUnloadNow() && 0 == _Module.GetLockCount())? S_OK : S_FALSE); }
/////////////////////////////////////////////////////////////////////////////
// Returns a class factory to create an object of the requested type
STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv) { HRESULT hr; hr = CertPrxyDllGetClassObject(rclsid, riid, ppv); if (S_OK != hr) { hr = _Module.GetClassObject(rclsid, riid, ppv); if (S_OK == hr && NULL != *ppv) { myRegisterMemFree(*ppv, CSM_NEW | CSM_GLOBALDESTRUCTOR); } } return(hr); }
/////////////////////////////////////////////////////////////////////////////
// DllRegisterServer - Adds entries to the system registry
STDAPI DllRegisterServer(void) { HRESULT hr; HRESULT hr2; HKEY hGPOExtensions;
// we remove the registration of GPO Processing call backs. This was
// intended for upgrading B2 clients.
hr = RegOpenKeyEx( HKEY_LOCAL_MACHINE, TEXT("Software\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon\\GPExtensions"), 0, KEY_WRITE | KEY_READ, &hGPOExtensions);
if (S_OK == hr) { RegDeleteKey(hGPOExtensions, TEXT("PublicKeyPolicy")); RegCloseKey(hGPOExtensions); }
hr = CertPrxyDllRegisterServer();
// registers object, typelib and all interfaces in typelib
hr2 = _Module.RegisterServer(TRUE);
if (S_OK == hr) { hr = hr2; }
//register the evenlog
hr2 = myAddLogSourceToRegistry(L"%SystemRoot%\\System32\\pautoenr.dll", L"AutoEnrollment");
if (S_OK == hr) { hr = hr2; } return(hr); }
/////////////////////////////////////////////////////////////////////////////
// DllUnregisterServer - Removes entries from the system registry
STDAPI DllUnregisterServer(void) { HRESULT hr; HRESULT hr2; HKEY hGPOExtensions;
hr = RegOpenKeyEx( HKEY_LOCAL_MACHINE, TEXT("Software\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon\\GPExtensions"), 0, KEY_WRITE | KEY_READ, &hGPOExtensions); if (S_OK == hr) { hr = RegDeleteKey(hGPOExtensions, TEXT("PublicKeyPolicy")); RegCloseKey(hGPOExtensions); }
hr = CertPrxyDllUnregisterServer(); hr2 = _Module.UnregisterServer(); if (S_OK == hr) { hr = hr2; } return(hr); }
// Register certcli.dll with the following command line to install templates:
// regsvr32 /i:i /n certcli.dll
STDAPI DllInstall( IN BOOL, // bInstall
IN LPCWSTR pszCmdLine) { LPCWSTR wszCurrentCmd = pszCmdLine;
// parse the cmd line
while(wszCurrentCmd && *wszCurrentCmd) { while(*wszCurrentCmd == L' ') wszCurrentCmd++; if(*wszCurrentCmd == 0) break;
switch(*wszCurrentCmd++) { case L'i': CCertTypeInfo::InstallDefaultTypes(); return S_OK; } } return S_OK; }
void __RPC_FAR *__RPC_USER MIDL_user_allocate( IN size_t cb) { return(CoTaskMemAlloc(cb)); }
void __RPC_USER MIDL_user_free( IN void __RPC_FAR *pb) { CoTaskMemFree(pb); }
VOID myFreeColumnDisplayNames() { extern VOID myFreeColumnDisplayNames2();
CACleanup(); myFreeColumnDisplayNames2(); myFreeResourceStrings("certcli.dll"); }
|