Windows2003-3790/termsrv/newclient/mstscax/tsaxmain.cpp
2020-09-30 16:53:55 +02:00

309 lines
10 KiB
C++

/**MOD+**********************************************************************/
/* Module: tsaxmain.cpp */
/* */
/* Purpose: Implementation of DLL Exports. Header for this module will */
/* be generated in the respective build directory. */
/* */
/* Copyright(C) Microsoft Corporation 1998 */
/* */
/****************************************************************************/
#include "stdafx.h"
#include "atlwarn.h"
BEGIN_EXTERN_C
#define TRC_GROUP TRC_GROUP_UI
#define TRC_FILE "tsaxmain"
#include <atrcapi.h>
END_EXTERN_C
#include "tsaxiids.h"
#include "initguid.h"
#include "mstsax.h"
#ifndef OS_WINCE
#include "mstsax_i.c"
#endif
#include "mstscax.h"
#include "tsaxmod.h"
//
// Version number (property returns this)
//
#ifndef OS_WINCE
#include "ntverp.h"
#else
#include "ceconfig.h" //get build #
#endif
//Unicode wrapper
#include "wraputl.h"
/****************************************************************************/
/* Module object */
/****************************************************************************/
CMsTscAxModule _Module;
/****************************************************************************/
/* Object map */
/****************************************************************************/
BEGIN_OBJECT_MAP(ObjectMap)
OBJECT_ENTRY(CLSID_MsRdpClient3, CMsTscAx)
OBJECT_ENTRY(CLSID_MsRdpClient2, CMsTscAx)
OBJECT_ENTRY(CLSID_MsRdpClient, CMsTscAx)
OBJECT_ENTRY(CLSID_MsTscAx, CMsTscAx)
END_OBJECT_MAP()
#ifdef ECP_TIMEBOMB
//
// Return's true if timebomb test passed otherwise puts up warning
// UI and return's FALSE
//
BOOL CheckTimeBomb()
{
SYSTEMTIME lclTime;
FILETIME lclFileTime;
GetLocalTime(&lclTime);
DCBOOL bTimeBombOk = TRUE;
//
// Simply check that the local date is less than June 30, 2000
//
if(lclTime.wYear < ECP_TIMEBOMB_YEAR)
{
return TRUE;
}
else if (lclTime.wYear == ECP_TIMEBOMB_YEAR)
{
if(lclTime.wMonth < ECP_TIMEBOMB_MONTH)
{
return TRUE;
}
else if(lclTime.wMonth == ECP_TIMEBOMB_MONTH)
{
if(lclTime.wDay < ECP_TIMEBOMB_DAY)
{
return TRUE;
}
}
}
DCTCHAR timeBombStr[256];
if (LoadString(_Module.GetModuleInstance(),
TIMEBOMB_EXPIRED_STR,
timeBombStr,
SIZEOF_TCHARBUFFER(timeBombStr)) != 0)
{
MessageBox(NULL, timeBombStr, NULL,
MB_ICONERROR | MB_OK);
}
//
// If we reach this point the timebomb should trigger
// so put up a messagebox and return FALSE
// so the calling code can disable functionality
//
return FALSE;
}
#endif
#ifdef UNIWRAP
//It's ok to have a global unicode wrapper
//class. All it does is sets up the g_bRunningOnNT
//flag so it can be shared by multiple instances
//also it is only used from DllMain so there
//are no problems with re-entrancy
CUnicodeWrapper g_uwrp;
#endif
#ifdef OS_WINCE
DECLARE_TRACKER_VARS();
#endif
/**PROC+*********************************************************************/
/* Name: DllMain */
/* */
/* Purpose: DLL entry point */
/* */
/**PROC-*********************************************************************/
extern "C"
#ifndef OS_WINCE
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpReserved*/)
#else
BOOL WINAPI DllMain(HANDLE hInstance, DWORD dwReason, LPVOID /*lpReserved*/)
#endif
{
if (dwReason == DLL_PROCESS_ATTACH)
{
#ifdef UNIWRAP
//UNICODE Wrapper intialization has to happen first,
//before anything ELSE. Even DC_BEGIN_FN, which does tracing
g_uwrp.InitializeWrappers();
#endif
TSRNG_Initialize();
CO_StaticInit((HINSTANCE)hInstance);
_Module.Init(ObjectMap, (HINSTANCE)hInstance);
#if ((!defined (OS_WINCE)) || (_WIN32_WCE >= 300) )
DisableThreadLibraryCalls((HINSTANCE)hInstance);
#endif
#ifdef OS_WINCE
CEInitialize();
g_CEConfig = CEGetConfigType(&g_CEUseScanCodes);
#endif
}
else if (dwReason == DLL_PROCESS_DETACH) {
_Module.Term();
CO_StaticTerm();
TSRNG_Shutdown();
#ifdef UNIWRAP
g_uwrp.CleanupWrappers();
#endif
}
return TRUE; // ok
}
/**PROC+*********************************************************************/
/* Name: DllCanUnloadNow */
/* */
/* Purpose: Used to determine whether the DLL can be unloaded by OLE */
/* */
/**PROC-*********************************************************************/
STDAPI DllCanUnloadNow(void)
{
return (_Module.GetLockCount()==0) ? S_OK : S_FALSE;
}
/**PROC+*********************************************************************/
/* Name: DllGetClassObject */
/* */
/* Purpose: Returns a class factory to create an object of the requested */
/* type */
/* */
/**PROC-*********************************************************************/
STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)
{
#ifdef ECP_TIMEBOMB
if(!CheckTimeBomb())
{
//
// Timebomb failed, bail out with an error message
//
return E_OUTOFMEMORY;
}
#endif
return _Module.GetClassObject(rclsid, riid, ppv);
}
/**PROC+*********************************************************************/
/* Name: DllRegisterServer */
/* */
/* Purpose: DllRegisterServer - Adds entries to the system registry */
/* */
/**PROC-*********************************************************************/
STDAPI DllRegisterServer(void)
{
// registers object, typelib and all interfaces in typelib
return _Module.RegisterServer(TRUE);
}
/**PROC+*********************************************************************/
/* Name: DllUnregisterServer */
/* */
/* Purpose: DllUnregisterServer - Removes entries from the system registry*/
/* */
/**PROC-*********************************************************************/
STDAPI DllUnregisterServer(void)
{
return _Module.UnregisterServer();
}
/**PROC+*********************************************************************/
/* Name: DllGetTscCtlVer */
/* */
/* Purpose: Returns version of the tsc control */
/* */
/**PROC-*********************************************************************/
STDAPI_(DWORD) DllGetTscCtlVer(void)
{
#ifndef OS_WINCE
return VER_PRODUCTVERSION_DW;
#else
return CE_TSC_BUILDNO;
#endif
}
#ifndef OS_WINCE
#ifdef CRTREPORT_DEBUG_HACK
/**PROC+*********************************************************************/
/* Name: _CrtDbgReport */
/* */
/* Purpose: Redirect all debug reporting to our tracing functions */
/* */
/**PROC-*********************************************************************/
extern "C"
_CRTIMP int __cdecl _CrtDbgReport(int nRptType,
const char * szFile,
int nLine,
const char * szModule,
const char * szFormat,
...)
{
static CHAR bigBuf[2048];
va_list vargs;
HRESULT hr;
DC_BEGIN_FN("AtlTraceXXX");
va_start(vargs, szFormat);
hr = StringCchVPrintfA(bigBuf, sizeof(bigBuf), szFormat, vargs);
va_end( vargs );
#ifdef OS_WINCE
#ifndef _CRT_ASSERT
#define _CRT_ASSERT 2
#endif
#endif
if (_CRT_ASSERT == nRptType)
{
#ifdef UNICODE
TRC_ABORT((TB,_T("AtlAssert. File:%S line:%d - %S"), szFile,
nLine, bigBuf));
#else
TRC_ABORT((TB,_T("AtlAssert. File:%s line:%d - %s"), szFile,
nLine, bigBuf));
#endif
}
else
{
#ifdef UNICODE
TRC_ERR((TB,_T("AtlTrace. File:%S line:%d - %S"), szFile,
nLine, bigBuf));
#else
TRC_ERR((TB,_T("AtlTrace. File:%s line:%d - %s"), szFile,
nLine, bigBuf));
#endif
}
DC_END_FN();
return 0;
}
#endif
#endif //OS_WINCE