//+-------------------------------------------------------------------------- // // Copyright (c) 1997-1999 Microsoft Corporation // // File: tls236.h // // Contents: // // History: // //--------------------------------------------------------------------------- #ifndef __TLSA02_H__ #define __TLSA02_H__ #include "tlsstl.h" // STL #include #include #include #include "tlsapi.h" #include "tlspol.h" #include "ntverp.h" #include "locks.h" #define US_IDS_COMPANYNAME _TEXT("Microsoft Corporation") #define US_IDS_EX_PRODUCTNAME _TEXT("Existing Windows License Token") #define US_IDS_EX_PRODUCTDESC _TEXT("Existing Windows 2000 License Token") #define US_IDS_EX_PRODUCTDESC51 _TEXT("Existing Windows Whistler License Token") #define US_IDS_S_PRODUCTNAME _TEXT("Full Windows Terminal Services Client Access License Token") #define US_IDS_S_PRODUCTDESC _TEXT("Windows 2000 Terminal Services Client Access License Token") #define US_IDS_S_PRODUCTDESC51 _TEXT("Windows Whistler Terminal Services Client Access License Token") #define US_IDS_I_PRODUCTNAME _TEXT("Windows Terminal Services Internet Connector License Token") #define US_IDS_I_PRODUCTDESC _TEXT("Windows 2000 Terminal Services Internet Connector License Token") #define US_IDS_C_PRODUCTNAME _TEXT("Windows Terminal Services Per Session License Token") #define US_IDS_C_PRODUCTDESC51 _TEXT("Windows Whistler Terminal Services Per Session License Token") // // A02 Product ID // #define PLATFORMID_UPGRADE 1 #define PLATFORMID_FREE 2 #define PLATFORMID_OTHERS 0xFF // also used for Concurrent and Internet #define LSKEYPACK_LOCAL_TYPE 0x40 // // 236 is for NT4 TS client. // #define TERMSERV_PRODUCTID_CH _TEXT("001") #define TERMSERV_PRODUCTID_SKU _TEXT("A02") #define TERMSERV_FULLVERSION_TYPE _TEXT("S") #define TERMSERV_FREE_TYPE _TEXT("EX") // // Internet Package // #define TERMSERV_INTERNET_CH _TEXT("002") #define TERMSERV_INTERNET_SKU _TEXT("B96") #define TERMSERV_INTERNET_TYPE _TEXT("I") // // Concurrent Package // #define TERMSERV_CONCURRENT_CH _TEXT("003") #define TERMSERV_CONCURRENT_SKU _TEXT("C50") #define TERMSERV_CONCURRENT_TYPE _TEXT("C") // // Whistler Package // #define TERMSERV_WHISTLER_PRODUCTID_CH _TEXT("004") #define TERMSERV_PRODUCTID_FORMAT _TEXT("%3s-%ld.%02ld-%s") #define MAX_TERMSRV_PRODUCTID LSERVER_MAX_STRING_SIZE // // keypack ID is ProductID+MajorVersion+MinorVersion+SerialNumber // #define TERMSERV_KEYPACKID_FORMAT _TEXT("%s%02d%02d%02d%d") #define TLSA02_VERSION (MAKELONG(MAKEWORD(0, HIBYTE(VER_PRODUCTVERSION_W)), 0)) #define CURRENT_TLSA02_VERSION HIBYTE(LOWORD(TLSA02_VERSION)) #define WINDOWS_VERSION_NT5 5 #define WINDOWS_VERSION_BASE 2000 #define MAX_SKU_PREFIX 10 #define MAX_SKU_POSTFIX 10 #define MALLOC(size) LocalAlloc(LPTR, size) #define FREE(ptr) \ if(ptr) \ { \ LocalFree(ptr); \ ptr=NULL; \ } #define SAFESTRCPY(dest, source) \ { \ _tcsncpy(dest, source, min(_tcslen(source), sizeof(dest)/sizeof(TCHAR))); \ dest[min(_tcslen(source), (sizeof(dest)/sizeof(TCHAR) - 1))] = _TEXT('\0'); \ } #define STRBUFSIZE(x) (sizeof(x) / sizeof(x[0])) //--------------------------------------------------- typedef enum { MEMORY_UNKNOWN, MEMORY_GENERAL, MEMORY_STRING, MEMORY_KEYPACKDESC, MEMORY_LICENSE_REQUEST, MEMORY_CERTEXTENSION, MEMORY_LICENSEREGISTRATION } MEMORYPOINTERTYPE; //---------------------------------------------------- typedef struct __PointerType { MEMORYPOINTERTYPE m_MemoryType; HLOCAL m_Ptr; //----------------------------------------- __PointerType() : m_MemoryType(MEMORY_UNKNOWN), m_Ptr(NULL) { } //-------------------------------------- __PointerType( MEMORYPOINTERTYPE ptrType, HLOCAL ptr ) : m_MemoryType(ptrType), m_Ptr(ptr) /*++ ++*/ { } //--------------------------------------- PVOID GetPointer() { return m_Ptr; } } PointerType; //---------------------------------------------- class CRefCounter { private: long m_RefCounter; public: CRefCounter() : m_RefCounter(0) {} ~CRefCounter() { if(DecRef() == 0) { delete this; } } long AddRef() { return InterlockedIncrement(&m_RefCounter); } long DecRef() { return InterlockedDecrement(&m_RefCounter); } }; //--------------------------------------------- class CClient { private: PMHANDLE m_hClient; // client handle // // list of memory allocated list m_AllocatedMemory; public: CClient(PMHANDLE hClient); ~CClient(); //----------------------------------------- HLOCAL AllocateMemory( MEMORYPOINTERTYPE ptrType, DWORD dwSize ); //----------------------------------------- PMHANDLE GetPMHANDLE() { return m_hClient; } }; //------------------------------------------------------ class CClientMgr { private: CCriticalSection m_HandleMapLock; typedef map > MapHandleToClient; MapHandleToClient m_HandleMap; public: CClientMgr() {} ~CClientMgr(); void Cleanup(); CClient* FindClient(PMHANDLE hClient); BOOL DestroyClient(PMHANDLE hClient); }; #ifdef __cplusplus extern "C" { #endif void InitPolicyModule( IN HMODULE ); BOOL LoadResourceString( IN DWORD dwId, IN OUT LPTSTR szBuf, IN DWORD dwBufSize ); DWORD AddA02KeyPack( DWORD dwVersion ); DWORD InsertLicensePack( IN TLS_HANDLE tlsHandle, IN DWORD dwProdVersion, IN DWORD dwDescVersion, IN DWORD dwPlatformType, IN UCHAR ucAgreementType, IN LPTSTR pszProductId, IN LPTSTR pszKeyPackId, IN LPTSTR pszUsDesc[], IN LPTSTR pszLocalizedDesc[] ); POLICYSTATUS ProcessUpgradeRequest( PMHANDLE hClient, PPMUPGRADEREQUEST pUpgrade, PPMLICENSEREQUEST* pbAdjustedRequest, PDWORD pdwErrCode ); BOOL LicenseTypeFromLookupTable( IN DWORD dwClientVer, IN DWORD dwTermSrvVer, OUT PDWORD pdwCALType ); #ifdef __cplusplus } #endif #endif