mirror of https://github.com/tongzx/nt5src
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.
881 lines
23 KiB
881 lines
23 KiB
// wamreg.cpp : Implementation of DLL Exports.
|
|
|
|
|
|
// Note: Proxy/Stub Information
|
|
// To merge the proxy/stub code into the object DLL, add the file
|
|
// dlldatax.c to the project. Make sure precompiled headers
|
|
// are turned off for this file, and add _MERGE_PROXYSTUB to the
|
|
// defines for the project.
|
|
//
|
|
// If you are not running WinNT4.0 or Win95 with DCOM, then you
|
|
// need to remove the following define from dlldatax.c
|
|
// #define _WIN32_WINNT 0x0400
|
|
//
|
|
// Further, if you are running MIDL without /Oicf switch, you also
|
|
// need to remove the following define from dlldatax.c.
|
|
// #define USE_STUBLESS_PROXY
|
|
//
|
|
// Modify the custom build rule for wamreg.idl by adding the following
|
|
// files to the Outputs.
|
|
// wamreg_p.c
|
|
// dlldata.c
|
|
// To build a separate proxy/stub DLL,
|
|
// run nmake -f wamregps.mk in the project directory.
|
|
|
|
#include "common.h"
|
|
|
|
#include "objbase.h"
|
|
#include "initguid.h"
|
|
#include "iwamreg.h"
|
|
#include "iadmext.h"
|
|
#include "dlldatax.h"
|
|
#include "auxfunc.h"
|
|
#include "wmrgsv.h"
|
|
|
|
#include "WamAdm.h"
|
|
#include "comobj.h"
|
|
|
|
#include "dbgutil.h"
|
|
|
|
#ifdef _MERGE_PROXYSTUB
|
|
extern "C" HINSTANCE hProxyDll;
|
|
#endif
|
|
|
|
#define IIS_DEFAULT_PACKAGE 0
|
|
|
|
#ifndef _NO_TRACING_
|
|
#include <initguid.h>
|
|
DEFINE_GUID(IisWamRegGuid,
|
|
0x784d8917, 0xaa8c, 0x11d2, 0x92, 0x5e, 0x00, 0xc0, 0x4f, 0x72, 0xd9, 0x0e);
|
|
#ifdef _IIS_6_0
|
|
#include "w3ctrlps.h"
|
|
#endif // _IIS_6_0
|
|
#endif
|
|
DECLARE_DEBUG_VARIABLE();
|
|
DECLARE_DEBUG_PRINTS_OBJECT();
|
|
DECLARE_PLATFORM_TYPE();
|
|
|
|
const CHAR g_pszModuleName[] = "WAMREG";
|
|
|
|
HINSTANCE g_hModule = NULL;
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// DLL Entry Point
|
|
|
|
extern "C"
|
|
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
|
|
{
|
|
lpReserved;
|
|
#ifdef _MERGE_PROXYSTUB
|
|
if (!PrxDllMain(hInstance, dwReason, lpReserved))
|
|
return FALSE;
|
|
#endif
|
|
|
|
BOOL fReturn = FALSE;
|
|
|
|
if (dwReason == DLL_PROCESS_ATTACH)
|
|
{
|
|
DisableThreadLibraryCalls(hInstance);
|
|
|
|
g_hModule = hInstance;
|
|
|
|
INITIALIZE_PLATFORM_TYPE();
|
|
#ifdef _NO_TRACING_
|
|
SET_DEBUG_FLAGS(DEBUG_ERROR);
|
|
CREATE_DEBUG_PRINT_OBJECT( g_pszModuleName);
|
|
#else
|
|
// CREATE_DEBUG_PRINT_OBJECT( g_pszModuleName);
|
|
#endif
|
|
/*
|
|
if ( !VALID_DEBUG_PRINT_OBJECT())
|
|
{
|
|
fReturn = FALSE;
|
|
}
|
|
else
|
|
{
|
|
*/
|
|
g_pWmRgSrvFactory = new CWmRgSrvFactory();
|
|
fReturn = g_WamRegGlobal.Init();
|
|
//}
|
|
|
|
}
|
|
else if (dwReason == DLL_PROCESS_DETACH)
|
|
{
|
|
g_WamRegGlobal.UnInit();
|
|
delete g_pWmRgSrvFactory;
|
|
DELETE_DEBUG_PRINT_OBJECT();
|
|
}
|
|
|
|
fReturn = TRUE; // ok
|
|
return fReturn;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// Used to determine whether the DLL can be unloaded by OLE
|
|
|
|
STDAPI DllCanUnloadNow(void)
|
|
{
|
|
#ifdef _MERGE_PROXYSTUB
|
|
if (PrxDllCanUnloadNow() != S_OK)
|
|
return S_FALSE;
|
|
#endif
|
|
if (g_dwRefCount == 0)
|
|
{
|
|
return S_OK;
|
|
}
|
|
else
|
|
{
|
|
return S_FALSE;
|
|
}
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// Returns a class factory to create an object of the requested type
|
|
|
|
STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)
|
|
{
|
|
HRESULT hrReturn = E_FAIL;
|
|
|
|
#ifdef _MERGE_PROXYSTUB
|
|
if (PrxDllGetClassObject(rclsid, riid, ppv) == S_OK)
|
|
return S_OK;
|
|
#endif
|
|
|
|
if (rclsid == CLSID_WmRgSrv)
|
|
{
|
|
if (FAILED(g_pWmRgSrvFactory->QueryInterface(riid, ppv)))
|
|
{
|
|
*ppv = NULL;
|
|
hrReturn = E_INVALIDARG;
|
|
}
|
|
else
|
|
{
|
|
hrReturn = NOERROR;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
hrReturn = S_OK;
|
|
}
|
|
|
|
return hrReturn;
|
|
}
|
|
|
|
|
|
HRESULT WamReg_RegisterServer()
|
|
{
|
|
HKEY hKeyCLSID, hKeyInproc32;
|
|
HKEY hKeyIF, hKeyStub32;
|
|
HKEY hKeyAppID, hKeyTemp;
|
|
DWORD dwDisposition;
|
|
BOOL fIsWin95 = FALSE;
|
|
char pszName[MAX_PATH+1 + sizeof("inetinfo.exe -e iisadmin")];
|
|
|
|
|
|
//
|
|
// if win95, then don't register as service
|
|
//
|
|
|
|
if ( IISGetPlatformType() == PtWindows95 ) {
|
|
|
|
fIsWin95 = TRUE;
|
|
}
|
|
|
|
if (fIsWin95) {
|
|
|
|
HMODULE hModule=GetModuleHandle(TEXT("WAMREG.DLL"));
|
|
if (!hModule) {
|
|
return E_UNEXPECTED;
|
|
}
|
|
|
|
WCHAR wchName[MAX_PATH + 1];
|
|
if (GetModuleFileName(hModule, pszName, sizeof(pszName))==0) {
|
|
return E_UNEXPECTED;
|
|
}
|
|
|
|
int i;
|
|
|
|
//
|
|
// Set pszName to the command to start the web server
|
|
//
|
|
|
|
for (i = strlen(pszName) -1; (i >= 0) && (pszName[i] != '/') & (pszName[i] != '\\'); i--) {
|
|
}
|
|
|
|
pszName[i + 1] = '\0';
|
|
strcat(pszName, "inetinfo.exe -e iisadmin");
|
|
}
|
|
|
|
HRESULT hr;
|
|
|
|
//
|
|
//register AppID
|
|
//CLSID_WamAdmin, 0x61738644, 0xF196, 0x11D0, 0x99, 0x53, 0x00, 0xC0, 0x4F, 0xD9, 0x19, 0xC1)
|
|
//
|
|
|
|
if (ERROR_SUCCESS != RegCreateKeyEx(HKEY_CLASSES_ROOT,
|
|
TEXT("AppID\\{61738644-F196-11D0-9953-00C04FD919C1}"),
|
|
NULL,
|
|
TEXT(""),
|
|
REG_OPTION_NON_VOLATILE,
|
|
KEY_ALL_ACCESS,
|
|
NULL,
|
|
&hKeyAppID,
|
|
&dwDisposition))
|
|
{
|
|
return E_UNEXPECTED;
|
|
}
|
|
else
|
|
{
|
|
if (ERROR_SUCCESS != RegSetValueEx(hKeyAppID,
|
|
TEXT(""),
|
|
NULL,
|
|
REG_SZ,
|
|
(BYTE*) TEXT("IIS WAMREG admin Service"),
|
|
sizeof(TEXT("IIS WAMREG Admin Service"))))
|
|
{
|
|
RegCloseKey(hKeyAppID);
|
|
return E_UNEXPECTED;
|
|
}
|
|
|
|
if (!fIsWin95)
|
|
{
|
|
if (ERROR_SUCCESS != RegSetValueEx(hKeyAppID,
|
|
TEXT("LocalService"),
|
|
NULL,
|
|
REG_SZ,
|
|
(BYTE *) TEXT("IISADMIN"),
|
|
sizeof(TEXT("IISADMIN"))))
|
|
{
|
|
RegCloseKey(hKeyAppID);
|
|
return E_UNEXPECTED;
|
|
}
|
|
}
|
|
|
|
RegCloseKey(hKeyAppID);
|
|
}
|
|
|
|
//
|
|
// register CLSID
|
|
//WamAdmin_CLSID
|
|
|
|
if (ERROR_SUCCESS != RegCreateKeyEx(HKEY_CLASSES_ROOT,
|
|
TEXT("CLSID\\{61738644-F196-11D0-9953-00C04FD919C1}"),
|
|
NULL,
|
|
TEXT(""),
|
|
REG_OPTION_NON_VOLATILE,
|
|
KEY_ALL_ACCESS,
|
|
NULL,
|
|
&hKeyCLSID,
|
|
&dwDisposition))
|
|
{
|
|
return E_UNEXPECTED;
|
|
}
|
|
else
|
|
{
|
|
|
|
if (ERROR_SUCCESS != RegSetValueEx(hKeyCLSID,
|
|
TEXT(""),
|
|
NULL,
|
|
REG_SZ,
|
|
(BYTE*) TEXT("IIS WAMREG Admin"),
|
|
sizeof(TEXT("IIS WAMREG Admin"))))
|
|
{
|
|
RegCloseKey(hKeyCLSID);
|
|
return E_UNEXPECTED;
|
|
}
|
|
|
|
if (ERROR_SUCCESS != RegSetValueEx(hKeyCLSID,
|
|
TEXT("AppID"),
|
|
NULL,
|
|
REG_SZ,
|
|
(BYTE*) TEXT("{61738644-F196-11D0-9953-00C04FD919C1}"),
|
|
sizeof(TEXT("{61738644-F196-11D0-9953-00C04FD919C1}"))))
|
|
{
|
|
RegCloseKey(hKeyCLSID);
|
|
return E_UNEXPECTED;
|
|
}
|
|
|
|
|
|
if (fIsWin95)
|
|
{
|
|
if (ERROR_SUCCESS != RegCreateKeyEx(hKeyCLSID,
|
|
TEXT("LocalServer32"),
|
|
NULL,
|
|
TEXT(""),
|
|
REG_OPTION_NON_VOLATILE,
|
|
KEY_ALL_ACCESS,
|
|
NULL,
|
|
&hKeyTemp,
|
|
&dwDisposition))
|
|
{
|
|
RegCloseKey(hKeyCLSID);
|
|
return E_UNEXPECTED;
|
|
}
|
|
else
|
|
{
|
|
if (ERROR_SUCCESS != RegSetValueEx(hKeyTemp,
|
|
TEXT(""),
|
|
NULL,
|
|
REG_SZ,
|
|
(BYTE*) pszName,
|
|
strlen(pszName) + 1))
|
|
{
|
|
RegCloseKey(hKeyTemp);
|
|
RegCloseKey(hKeyCLSID);
|
|
return E_UNEXPECTED;
|
|
}
|
|
|
|
RegCloseKey(hKeyTemp);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (ERROR_SUCCESS != RegSetValueEx(hKeyCLSID,
|
|
TEXT("LocalService"),
|
|
NULL,
|
|
REG_SZ,
|
|
(BYTE*) TEXT("IISADMIN"),
|
|
sizeof(TEXT("IISADMIN"))))
|
|
{
|
|
RegCloseKey(hKeyCLSID);
|
|
return E_UNEXPECTED;
|
|
}
|
|
}
|
|
RegCloseKey(hKeyCLSID);
|
|
}
|
|
|
|
//
|
|
// Main Interfaces
|
|
//
|
|
|
|
//
|
|
// WAMREG Admin Interface
|
|
//IID_IWamAdmin, 0x29822AB7, 0xF302, 0x11D0, 0x99, 0x53, 0x00, 0xC0, 0x4F, 0xD9, 0x19, 0xC1
|
|
|
|
if (ERROR_SUCCESS != RegCreateKeyEx(HKEY_CLASSES_ROOT,
|
|
TEXT("CLSID\\{29822AB7-F302-11D0-9953-00C04FD919C1}"),
|
|
NULL,
|
|
TEXT(""),
|
|
REG_OPTION_NON_VOLATILE,
|
|
KEY_ALL_ACCESS,
|
|
NULL,
|
|
&hKeyCLSID,
|
|
&dwDisposition))
|
|
{
|
|
return E_UNEXPECTED;
|
|
}
|
|
else
|
|
{
|
|
if (ERROR_SUCCESS != RegSetValueEx(hKeyCLSID,
|
|
TEXT(""),
|
|
NULL,
|
|
REG_SZ,
|
|
(BYTE*) TEXT("PSFactoryBuffer"),
|
|
sizeof(TEXT("PSFactoryBuffer"))))
|
|
{
|
|
RegCloseKey(hKeyCLSID);
|
|
return E_UNEXPECTED;
|
|
}
|
|
|
|
if (ERROR_SUCCESS != RegCreateKeyEx(hKeyCLSID,
|
|
"InprocServer32",
|
|
NULL,
|
|
TEXT(""),
|
|
REG_OPTION_NON_VOLATILE,
|
|
KEY_ALL_ACCESS,
|
|
NULL,
|
|
&hKeyInproc32,
|
|
&dwDisposition))
|
|
{
|
|
RegCloseKey(hKeyCLSID);
|
|
return E_UNEXPECTED;
|
|
}
|
|
else
|
|
{
|
|
if (ERROR_SUCCESS != RegSetValueEx(hKeyInproc32,
|
|
TEXT(""),
|
|
NULL,
|
|
REG_SZ,
|
|
(BYTE*) "WAMREGPS.DLL",
|
|
sizeof(TEXT("WAMREGPS.DLL"))))
|
|
{
|
|
RegCloseKey(hKeyInproc32);
|
|
RegCloseKey(hKeyCLSID);
|
|
return E_UNEXPECTED;
|
|
}
|
|
|
|
if (ERROR_SUCCESS != RegSetValueEx(hKeyInproc32,
|
|
TEXT("ThreadingModel"),
|
|
NULL,
|
|
REG_SZ,
|
|
(BYTE*) "Both",
|
|
sizeof("Both")-1 ))
|
|
{
|
|
RegCloseKey(hKeyInproc32);
|
|
RegCloseKey(hKeyCLSID);
|
|
return E_UNEXPECTED;
|
|
}
|
|
|
|
RegCloseKey(hKeyInproc32);
|
|
}
|
|
RegCloseKey(hKeyCLSID);
|
|
}
|
|
|
|
|
|
//
|
|
// WAMREG Admin Interface
|
|
//IID_IWamAdmin2, 0x29822AB8, 0xF302, 0x11D0, 0x99, 0x53, 0x00, 0xC0, 0x4F, 0xD9, 0x19, 0xC1
|
|
|
|
if (ERROR_SUCCESS != RegCreateKeyEx(HKEY_CLASSES_ROOT,
|
|
TEXT("CLSID\\{29822AB8-F302-11D0-9953-00C04FD919C1}"),
|
|
NULL,
|
|
TEXT(""),
|
|
REG_OPTION_NON_VOLATILE,
|
|
KEY_ALL_ACCESS,
|
|
NULL,
|
|
&hKeyCLSID,
|
|
&dwDisposition))
|
|
{
|
|
return E_UNEXPECTED;
|
|
}
|
|
else
|
|
{
|
|
if (ERROR_SUCCESS != RegSetValueEx(hKeyCLSID,
|
|
TEXT(""),
|
|
NULL,
|
|
REG_SZ,
|
|
(BYTE*) TEXT("PSFactoryBuffer"),
|
|
sizeof(TEXT("PSFactoryBuffer"))))
|
|
{
|
|
RegCloseKey(hKeyCLSID);
|
|
return E_UNEXPECTED;
|
|
}
|
|
|
|
if (ERROR_SUCCESS != RegCreateKeyEx(hKeyCLSID,
|
|
"InprocServer32",
|
|
NULL,
|
|
TEXT(""),
|
|
REG_OPTION_NON_VOLATILE,
|
|
KEY_ALL_ACCESS,
|
|
NULL,
|
|
&hKeyInproc32,
|
|
&dwDisposition))
|
|
{
|
|
RegCloseKey(hKeyCLSID);
|
|
return E_UNEXPECTED;
|
|
}
|
|
else
|
|
{
|
|
if (ERROR_SUCCESS != RegSetValueEx(hKeyInproc32,
|
|
TEXT(""),
|
|
NULL,
|
|
REG_SZ,
|
|
(BYTE*) "WAMREGPS.DLL",
|
|
sizeof(TEXT("WAMREGPS.DLL"))))
|
|
{
|
|
RegCloseKey(hKeyInproc32);
|
|
RegCloseKey(hKeyCLSID);
|
|
return E_UNEXPECTED;
|
|
}
|
|
|
|
if (ERROR_SUCCESS != RegSetValueEx(hKeyInproc32,
|
|
TEXT("ThreadingModel"),
|
|
NULL,
|
|
REG_SZ,
|
|
(BYTE*) "Both",
|
|
sizeof("Both")-1 ))
|
|
{
|
|
RegCloseKey(hKeyInproc32);
|
|
RegCloseKey(hKeyCLSID);
|
|
return E_UNEXPECTED;
|
|
}
|
|
|
|
RegCloseKey(hKeyInproc32);
|
|
}
|
|
RegCloseKey(hKeyCLSID);
|
|
}
|
|
|
|
//
|
|
|
|
//
|
|
// register Interfaces
|
|
//
|
|
|
|
//
|
|
// ANSI Main Interface
|
|
// WamReg Admin Interface
|
|
|
|
if (ERROR_SUCCESS != RegCreateKeyEx(HKEY_CLASSES_ROOT,
|
|
TEXT("Interface\\{29822AB7-F302-11D0-9953-00C04FD919C1}"),
|
|
NULL,
|
|
TEXT(""),
|
|
REG_OPTION_NON_VOLATILE,
|
|
KEY_ALL_ACCESS,
|
|
NULL,
|
|
&hKeyIF,
|
|
&dwDisposition))
|
|
{
|
|
return E_UNEXPECTED;
|
|
}
|
|
else
|
|
{
|
|
if (ERROR_SUCCESS != RegSetValueEx(hKeyIF,
|
|
TEXT(""),
|
|
NULL,
|
|
REG_SZ,
|
|
(BYTE*) TEXT("IWamAdmin"),
|
|
sizeof(TEXT("IWamAdmin"))))
|
|
{
|
|
RegCloseKey(hKeyIF);
|
|
return E_UNEXPECTED;
|
|
}
|
|
|
|
if (ERROR_SUCCESS != RegCreateKeyEx(hKeyIF,
|
|
"ProxyStubClsid32",
|
|
NULL,
|
|
TEXT(""),
|
|
REG_OPTION_NON_VOLATILE,
|
|
KEY_ALL_ACCESS,
|
|
NULL,
|
|
&hKeyStub32,
|
|
&dwDisposition))
|
|
{
|
|
RegCloseKey(hKeyIF);
|
|
return E_UNEXPECTED;
|
|
}
|
|
else
|
|
{
|
|
if (ERROR_SUCCESS != RegSetValueEx(hKeyStub32,
|
|
TEXT(""),
|
|
NULL,
|
|
REG_SZ,
|
|
(BYTE*)"{29822AB7-F302-11D0-9953-00C04FD919C1}",
|
|
sizeof("{29822AB7-F302-11D0-9953-00C04FD919C1}")))
|
|
{
|
|
RegCloseKey(hKeyStub32);
|
|
RegCloseKey(hKeyIF);
|
|
return E_UNEXPECTED;
|
|
}
|
|
|
|
RegCloseKey(hKeyStub32);
|
|
}
|
|
RegCloseKey(hKeyIF);
|
|
}
|
|
|
|
// WamReg Admin Interface
|
|
// IID_IWamAdmin2
|
|
if (ERROR_SUCCESS != RegCreateKeyEx(HKEY_CLASSES_ROOT,
|
|
TEXT("Interface\\{29822AB8-F302-11D0-9953-00C04FD919C1}"),
|
|
NULL,
|
|
TEXT(""),
|
|
REG_OPTION_NON_VOLATILE,
|
|
KEY_ALL_ACCESS,
|
|
NULL,
|
|
&hKeyIF,
|
|
&dwDisposition))
|
|
{
|
|
return E_UNEXPECTED;
|
|
}
|
|
else
|
|
{
|
|
if (ERROR_SUCCESS != RegSetValueEx(hKeyIF,
|
|
TEXT(""),
|
|
NULL,
|
|
REG_SZ,
|
|
(BYTE*) TEXT("IWamAdmin2"),
|
|
sizeof(TEXT("IWamAdmin2"))))
|
|
{
|
|
RegCloseKey(hKeyIF);
|
|
return E_UNEXPECTED;
|
|
}
|
|
|
|
if (ERROR_SUCCESS != RegCreateKeyEx(hKeyIF,
|
|
"ProxyStubClsid32",
|
|
NULL,
|
|
TEXT(""),
|
|
REG_OPTION_NON_VOLATILE,
|
|
KEY_ALL_ACCESS,
|
|
NULL,
|
|
&hKeyStub32,
|
|
&dwDisposition))
|
|
{
|
|
RegCloseKey(hKeyIF);
|
|
return E_UNEXPECTED;
|
|
}
|
|
else
|
|
{
|
|
if (ERROR_SUCCESS != RegSetValueEx(hKeyStub32,
|
|
TEXT(""),
|
|
NULL,
|
|
REG_SZ,
|
|
(BYTE*)"{29822AB8-F302-11D0-9953-00C04FD919C1}",
|
|
sizeof("{29822AB8-F302-11D0-9953-00C04FD919C1}")))
|
|
{
|
|
RegCloseKey(hKeyStub32);
|
|
RegCloseKey(hKeyIF);
|
|
return E_UNEXPECTED;
|
|
}
|
|
|
|
RegCloseKey(hKeyStub32);
|
|
}
|
|
RegCloseKey(hKeyIF);
|
|
}
|
|
|
|
return NOERROR;
|
|
}
|
|
|
|
STDAPI WamReg_UnRegisterServer(void) {
|
|
|
|
BOOL fIsWin95 = FALSE;
|
|
|
|
|
|
//
|
|
// if win95, then don't register as service
|
|
//
|
|
|
|
if ( IISGetPlatformType() == PtWindows95 ) {
|
|
|
|
fIsWin95 = TRUE;
|
|
}
|
|
|
|
//
|
|
// register AppID
|
|
//
|
|
RegDeleteKey(HKEY_CLASSES_ROOT, TEXT("AppID\\{61738644-F196-11D0-9953-00C04FD919C1}"));
|
|
|
|
//RegDeleteKey(HKEY_CLASSES_ROOT, TEXT("AppID\\{61738646-F196-11D0-9953-00C04FD919C1}"));
|
|
|
|
//
|
|
// register CLSID
|
|
//
|
|
|
|
if (fIsWin95)
|
|
{
|
|
RegDeleteKey(HKEY_CLASSES_ROOT, TEXT("CLSID\\{61738644-F196-11D0-9953-00C04FD919C1}\\LocalServer32"));
|
|
}
|
|
|
|
RegDeleteKey(HKEY_CLASSES_ROOT, TEXT("CLSID\\{61738644-F196-11D0-9953-00C04FD919C1}"));
|
|
|
|
/*
|
|
if (fIsWin95) {
|
|
RegDeleteKey(HKEY_CLASSES_ROOT, TEXT("CLSID\\{61738646-F196-11D0-9953-00C04FD919C1}\\LocalServer32"));
|
|
}
|
|
|
|
RegDeleteKey(HKEY_CLASSES_ROOT, TEXT("CLSID\\{61738646-F196-11D0-9953-00C04FD919C1}"));
|
|
*/
|
|
|
|
//
|
|
// WAMREG Interfaces
|
|
//
|
|
|
|
//
|
|
// Admin Interface
|
|
//
|
|
|
|
RegDeleteKey(HKEY_CLASSES_ROOT, TEXT("CLSID\\{29822AB7-F302-11D0-9953-00C04FD919C1}\\InprocServer32"));
|
|
|
|
RegDeleteKey(HKEY_CLASSES_ROOT, TEXT("CLSID\\{29822AB7-F302-11D0-9953-00C04FD919C1}"));
|
|
|
|
//
|
|
// Replication Interface
|
|
//
|
|
/*
|
|
RegDeleteKey(HKEY_CLASSES_ROOT, TEXT("CLSID\\{29822AB8-F302-11D0-9953-00C04FD919C1}\\InprocServer32"));
|
|
|
|
RegDeleteKey(HKEY_CLASSES_ROOT, TEXT("CLSID\\{29822AB8-F302-11D0-9953-00C04FD919C1}"));
|
|
*/
|
|
|
|
//
|
|
// deregister Interfaces
|
|
//
|
|
|
|
//
|
|
// Admin Interface
|
|
//
|
|
|
|
RegDeleteKey(HKEY_CLASSES_ROOT, TEXT("Interface\\{29822AB7-F302-11D0-9953-00C04FD919C1}\\ProxyStubClsid32"));
|
|
|
|
RegDeleteKey(HKEY_CLASSES_ROOT, TEXT("Interface\\{29822AB7-F302-11D0-9953-00C04FD919C1}"));
|
|
|
|
|
|
/*
|
|
RegDeleteKey(HKEY_CLASSES_ROOT, TEXT("Interface\\{29822AB8-F302-11D0-9953-00C04FD919C1}\\ProxyStubClsid32"));
|
|
|
|
RegDeleteKey(HKEY_CLASSES_ROOT, TEXT("Interface\\{29822AB8-F302-11D0-9953-00C04FD919C1}"));
|
|
*/
|
|
|
|
return NOERROR;
|
|
}
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// DllRegisterServer - Adds entries to the system registry
|
|
|
|
STDAPI DllRegisterServer(void)
|
|
{
|
|
HKEY hKeyCLSID, hKeyInproc32;
|
|
DWORD dwDisposition;
|
|
HMODULE hModule;
|
|
DWORD dwReturn = ERROR_SUCCESS;
|
|
|
|
#ifdef _MERGE_PROXYSTUB
|
|
HRESULT hRes = PrxDllRegisterServer();
|
|
if (FAILED(hRes))
|
|
return hRes;
|
|
#endif
|
|
|
|
dwReturn = RegCreateKeyEx(HKEY_CLASSES_ROOT,
|
|
TEXT("CLSID\\{763A6C86-F30F-11D0-9953-00C04FD919C1}"),
|
|
NULL,
|
|
TEXT(""),
|
|
REG_OPTION_NON_VOLATILE,
|
|
KEY_ALL_ACCESS,
|
|
NULL,
|
|
&hKeyCLSID,
|
|
&dwDisposition);
|
|
|
|
if (dwReturn == ERROR_SUCCESS)
|
|
{
|
|
dwReturn = RegSetValueEx(hKeyCLSID,
|
|
TEXT(""),
|
|
NULL,
|
|
REG_SZ,
|
|
(BYTE*) TEXT("WAM REG COM LAYER"),
|
|
sizeof(TEXT("WAM REG COM LAYER")));
|
|
|
|
if (dwReturn == ERROR_SUCCESS)
|
|
{
|
|
dwReturn = RegCreateKeyEx(hKeyCLSID,
|
|
"InprocServer32",
|
|
NULL,
|
|
TEXT(""),
|
|
REG_OPTION_NON_VOLATILE,
|
|
KEY_ALL_ACCESS,
|
|
NULL,
|
|
&hKeyInproc32,
|
|
&dwDisposition);
|
|
|
|
if (dwReturn == ERROR_SUCCESS)
|
|
{
|
|
hModule=GetModuleHandle(TEXT("WAMREG.DLL"));
|
|
if (!hModule)
|
|
{
|
|
dwReturn = GetLastError();
|
|
}
|
|
else
|
|
{
|
|
TCHAR szName[MAX_PATH+1];
|
|
if (GetModuleFileName(hModule,
|
|
szName,
|
|
sizeof(szName)) == NULL)
|
|
{
|
|
dwReturn = GetLastError();
|
|
}
|
|
else
|
|
{
|
|
dwReturn = RegSetValueEx(hKeyInproc32,
|
|
TEXT(""),
|
|
NULL,
|
|
REG_SZ,
|
|
(BYTE*) szName,
|
|
sizeof(TCHAR)*(lstrlen(szName)+1));
|
|
|
|
if (dwReturn == ERROR_SUCCESS)
|
|
{
|
|
dwReturn = RegSetValueEx(hKeyInproc32,
|
|
TEXT("ThreadingModel"),
|
|
NULL,
|
|
REG_SZ,
|
|
(BYTE*) TEXT("Both"),
|
|
sizeof(TEXT("Both")));
|
|
}
|
|
}
|
|
}
|
|
RegCloseKey(hKeyInproc32);
|
|
}
|
|
}
|
|
RegCloseKey(hKeyCLSID);
|
|
}
|
|
|
|
//
|
|
// Register the COM object's CLSID under IISADMIN_EXTENSIONS_REG_KEY
|
|
//
|
|
if (dwReturn == ERROR_SUCCESS)
|
|
{
|
|
dwReturn = RegCreateKeyEx(HKEY_LOCAL_MACHINE,
|
|
IISADMIN_EXTENSIONS_REG_KEY
|
|
TEXT("\\{763A6C86-F30F-11D0-9953-00C04FD919C1}"),
|
|
NULL,
|
|
TEXT(""),
|
|
REG_OPTION_NON_VOLATILE,
|
|
KEY_ALL_ACCESS,
|
|
NULL,
|
|
&hKeyCLSID,
|
|
&dwDisposition);
|
|
if (dwReturn == ERROR_SUCCESS)
|
|
{
|
|
RegCloseKey(hKeyCLSID);
|
|
}
|
|
}
|
|
|
|
if (dwReturn == ERROR_SUCCESS)
|
|
{
|
|
HRESULT hr;
|
|
// registers object, typelib and all interfaces in typelib
|
|
hr = WamReg_RegisterServer();
|
|
return hr;
|
|
}
|
|
else
|
|
{
|
|
return RETURNCODETOHRESULT(dwReturn);
|
|
}
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// DllUnregisterServer - Removes entries from the system registry
|
|
|
|
STDAPI DllUnregisterServer(void)
|
|
{
|
|
DWORD dwReturn = ERROR_SUCCESS;
|
|
DWORD dwTemp;
|
|
|
|
#ifdef _MERGE_PROXYSTUB
|
|
PrxDllUnregisterServer();
|
|
#endif
|
|
|
|
dwTemp = RegDeleteKey(HKEY_CLASSES_ROOT,
|
|
TEXT("CLSID\\{763A6C86-F30F-11D0-9953-00C04FD919C1}\\InprocServer32"));
|
|
if (dwTemp != ERROR_SUCCESS)
|
|
{
|
|
dwReturn = dwTemp;
|
|
}
|
|
|
|
dwTemp = RegDeleteKey(HKEY_CLASSES_ROOT,
|
|
TEXT("CLSID\\{763A6C86-F30F-11D0-9953-00C04FD919C1}"));
|
|
if (dwTemp != ERROR_SUCCESS)
|
|
{
|
|
dwReturn = dwTemp;
|
|
}
|
|
|
|
dwTemp = RegDeleteKey(HKEY_LOCAL_MACHINE,
|
|
IISADMIN_EXTENSIONS_REG_KEY
|
|
TEXT("\\{763A6C86-F30F-11D0-9953-00C04FD919C1}"));
|
|
if (dwTemp != ERROR_SUCCESS)
|
|
{
|
|
dwReturn = dwTemp;
|
|
}
|
|
|
|
if (SUCCEEDED(HRESULT_FROM_WIN32(dwReturn)))
|
|
{
|
|
HRESULT hr;
|
|
|
|
hr = WamReg_UnRegisterServer();
|
|
return hr;
|
|
}
|
|
else
|
|
{
|
|
return HRESULT_FROM_WIN32(dwReturn);
|
|
}
|
|
}
|
|
|