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.
306 lines
8.6 KiB
306 lines
8.6 KiB
//=--------------------------------------------------------------------------=
|
|
// astextmn.cpp
|
|
//=--------------------------------------------------------------------------=
|
|
// Copyright 1995-1996 Microsoft Corporation. All Rights Reserved.
|
|
//
|
|
// various globals which the framewrk requires
|
|
//
|
|
//
|
|
|
|
#include "asctlpch.h"
|
|
|
|
#define INITOBJECTS // define the descriptions for our objects
|
|
|
|
#include "ipserver.h"
|
|
#include "localsrv.h"
|
|
|
|
#include "ctrlobj.h"
|
|
#include "globals.h"
|
|
#include "util.h"
|
|
#include "asinsctl.h"
|
|
|
|
|
|
/// for safe scripting
|
|
#include "cathelp.h"
|
|
|
|
|
|
const IID IID_ICatRegister = {0x0002E012,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}};
|
|
const CATID CATID_SafeForScripting = {0x7dd95801,0x9882,0x11cf,{0x9f,0xa9,0x00,0xaa,0x00,0x6c,0x42,0xc4}};
|
|
const CATID CATID_SafeForInitializing = {0x7dd95802,0x9882,0x11cf,{0x9f,0xa9,0x00,0xaa,0x00,0x6c,0x42,0xc4}};
|
|
|
|
// needed for ASSERTs and FAIL
|
|
//
|
|
SZTHISFILE
|
|
|
|
//=--------------------------------------------------------------------------=
|
|
// our Libid. This should be the LIBID from the Type library, or NULL if you
|
|
// don't have one.
|
|
//
|
|
const CLSID *g_pLibid = &LIBID_ASControls;
|
|
|
|
|
|
//=--------------------------------------------------------------------------=
|
|
// Localization Information
|
|
//
|
|
// We need the following two pieces of information:
|
|
// a. whether or not this DLL uses satellite DLLs for localization. if
|
|
// not, then the lcidLocale is ignored, and we just always get resources
|
|
// from the server module file.
|
|
// b. the ambient LocaleID for this in-proc server. Controls calling
|
|
// GetResourceHandle() will set this up automatically, but anybody
|
|
// else will need to be sure that it's set up properly.
|
|
//
|
|
const VARIANT_BOOL g_fSatelliteLocalization = FALSE;
|
|
|
|
LCID g_lcidLocale = MAKELCID(LANG_USER_DEFAULT, SORT_DEFAULT);
|
|
|
|
|
|
//=--------------------------------------------------------------------------=
|
|
// your license key and where under HKEY_CLASSES_ROOT_LICENSES it's sitting
|
|
//
|
|
const WCHAR g_wszLicenseKey [] = L"";
|
|
const WCHAR g_wszLicenseLocation [] = L"";
|
|
|
|
|
|
WNDPROC g_ParkingWindowProc = NULL;
|
|
|
|
//=--------------------------------------------------------------------------=
|
|
// This Table describes all the automatible objects in your automation server.
|
|
// See AutomationObject.H for a description of what goes in this structure
|
|
// and what it's used for.
|
|
//
|
|
OBJECTINFO g_ObjectInfo[] = {
|
|
CONTROLOBJECT(InstallEngineCtl),
|
|
EMPTYOBJECT
|
|
};
|
|
|
|
const char g_szLibName[] = "ASControls";
|
|
|
|
//=--------------------------------------------------------------------------=
|
|
// IntializeLibrary
|
|
//=--------------------------------------------------------------------------=
|
|
// called from DllMain:DLL_PROCESS_ATTACH. allows the user to do any sort of
|
|
// initialization they want to.
|
|
//
|
|
// Notes:
|
|
//
|
|
void InitializeLibrary(void)
|
|
{
|
|
// TODO: initialization here. control window class should be set up in
|
|
// RegisterClassData.
|
|
}
|
|
|
|
//=--------------------------------------------------------------------------=
|
|
// UninitializeLibrary
|
|
//=--------------------------------------------------------------------------=
|
|
// called from DllMain:DLL_PROCESS_DETACH. allows the user to clean up anything
|
|
// they want.
|
|
//
|
|
// Notes:
|
|
//
|
|
void UninitializeLibrary(void)
|
|
{
|
|
// TODO: uninitialization here. control window class will be unregistered
|
|
// for you, but anything else needs to be cleaned up manually.
|
|
// Please Note that the Window 95 DLL_PROCESS_DETACH isn't quite as stable
|
|
// as NT's, and you might crash doing certain things here ...
|
|
}
|
|
|
|
|
|
//=--------------------------------------------------------------------------=
|
|
// CheckForLicense
|
|
//=--------------------------------------------------------------------------=
|
|
// users can implement this if they wish to support Licensing. otherwise,
|
|
// they can just return TRUE all the time.
|
|
//
|
|
// Parameters:
|
|
// none
|
|
//
|
|
// Output:
|
|
// BOOL - TRUE means the license exists, and we can proceed
|
|
// FALSE means we're not licensed and cannot proceed
|
|
//
|
|
// Notes:
|
|
// - implementers should use g_wszLicenseKey and g_wszLicenseLocation
|
|
// from the top of this file to define their licensing [the former
|
|
// is necessary, the latter is recommended]
|
|
//
|
|
BOOL CheckForLicense(void)
|
|
{
|
|
// TODO: decide whether or not your server is licensed in this function.
|
|
// people who don't want to bother with licensing should just return
|
|
// true here always. g_wszLicenseKey and g_wszLicenseLocation are
|
|
// used by IClassFactory2 to do some of the licensing work.
|
|
//
|
|
return TRUE;
|
|
}
|
|
|
|
//=--------------------------------------------------------------------------=
|
|
// RegisterData
|
|
//=--------------------------------------------------------------------------=
|
|
// lets the inproc server writer register any data in addition to that in
|
|
// any other objects.
|
|
//
|
|
// Output:
|
|
// BOOL - false means failure.
|
|
//
|
|
// Notes:
|
|
//
|
|
BOOL RegisterData(void)
|
|
{
|
|
//=--------------------------------------------------------------------------=
|
|
// RegisterData
|
|
//=--------------------------------------------------------------------------=
|
|
// lets the inproc server writer register any data in addition to that in
|
|
// any other objects.
|
|
//
|
|
// Output:
|
|
// BOOL - false means failure.
|
|
//
|
|
// Notes:
|
|
//
|
|
/// For safe scripting
|
|
HRESULT hr;
|
|
hr = CreateComponentCategory(CATID_SafeForScripting, L"Controls that are safely scriptable");
|
|
if(SUCCEEDED(hr))
|
|
hr = CreateComponentCategory(CATID_SafeForInitializing, L"Controls safely initializable from persistent data");
|
|
|
|
if(SUCCEEDED(hr))
|
|
hr = RegisterCLSIDInCategory(CLSID_InstallEngineCtl, CATID_SafeForScripting);
|
|
if(SUCCEEDED(hr))
|
|
hr = RegisterCLSIDInCategory(CLSID_InstallEngineCtl, CATID_SafeForInitializing);
|
|
|
|
|
|
if(FAILED(hr))
|
|
{
|
|
DllUnregisterServer();
|
|
}
|
|
|
|
return (SUCCEEDED(hr) ? TRUE : FALSE);
|
|
}
|
|
|
|
//=--------------------------------------------------------------------------=
|
|
// UnregisterData
|
|
//=--------------------------------------------------------------------------=
|
|
// inproc server writers should unregister anything they registered in
|
|
// RegisterData() here.
|
|
//
|
|
// Output:
|
|
// BOOL - false means failure.
|
|
//
|
|
// Notes:
|
|
//
|
|
BOOL UnregisterData(void)
|
|
{
|
|
/// For safe scripting
|
|
HRESULT hr;
|
|
hr = UnRegisterCLSIDInCategory(CLSID_InstallEngineCtl, CATID_SafeForScripting);
|
|
hr = UnRegisterCLSIDInCategory(CLSID_InstallEngineCtl, CATID_SafeForInitializing);
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL CheckLicenseKey(LPWSTR wszCheckme)
|
|
{
|
|
return TRUE;
|
|
}
|
|
|
|
BSTR GetLicenseKey(void)
|
|
{
|
|
return SysAllocString(L"");
|
|
}
|
|
|
|
|
|
|
|
LPSTR MakeAnsiStrFromAnsi(LPSTR psz)
|
|
{
|
|
LPSTR pszTmp;
|
|
|
|
if(psz == NULL)
|
|
return NULL;
|
|
|
|
pszTmp = (LPSTR) CoTaskMemAlloc(lstrlenA(psz) + 1);
|
|
if(pszTmp)
|
|
lstrcpyA(pszTmp, psz);
|
|
|
|
return pszTmp;
|
|
}
|
|
|
|
|
|
LPSTR CopyAnsiStr(LPSTR psz)
|
|
{
|
|
LPSTR pszTmp;
|
|
|
|
if(psz == NULL)
|
|
return NULL;
|
|
|
|
pszTmp = (LPSTR) new char[lstrlenA(psz) + 1];
|
|
if(pszTmp)
|
|
lstrcpyA(pszTmp, psz);
|
|
|
|
return pszTmp;
|
|
}
|
|
|
|
//=--------------------------------------------------------------------------=
|
|
// CRT stubs
|
|
//=--------------------------------------------------------------------------=
|
|
// these two things are here so the CRTs aren't needed. this is good.
|
|
//
|
|
// basically, the CRTs define this to pull in a bunch of stuff. we'll just
|
|
// define them here so we don't get an unresolved external.
|
|
//
|
|
// TODO: if you are going to use the CRTs, then remove this line.
|
|
//
|
|
extern "C" int _fltused = 1;
|
|
|
|
extern "C" int _cdecl _purecall(void)
|
|
{
|
|
FAIL("Pure virtual function called.");
|
|
return 0;
|
|
}
|
|
|
|
#ifndef _X86_
|
|
extern "C" void _fpmath() {}
|
|
#endif
|
|
|
|
|
|
|
|
void * _cdecl malloc(size_t n)
|
|
{
|
|
#ifdef _MALLOC_ZEROINIT
|
|
void* p = HeapAlloc(g_hHeap, 0, n);
|
|
if (p != NULL)
|
|
memset(p, 0, n);
|
|
return p;
|
|
#else
|
|
return HeapAlloc(g_hHeap, 0, n);
|
|
#endif
|
|
}
|
|
|
|
void * _cdecl calloc(size_t n, size_t s)
|
|
{
|
|
#ifdef _MALLOC_ZEROINIT
|
|
return malloc(n * s);
|
|
#else
|
|
void* p = malloc(n * s);
|
|
if (p != NULL)
|
|
memset(p, 0, n * s);
|
|
return p;
|
|
#endif
|
|
}
|
|
|
|
void* _cdecl realloc(void* p, size_t n)
|
|
{
|
|
if (p == NULL)
|
|
return malloc(n);
|
|
|
|
return HeapReAlloc(g_hHeap, 0, p, n);
|
|
}
|
|
|
|
void _cdecl free(void* p)
|
|
{
|
|
if (p == NULL)
|
|
return;
|
|
|
|
HeapFree(g_hHeap, 0, p);
|
|
}
|
|
|