|
|
//Copyright (c) 1998 - 1999 Microsoft Corporation
#ifndef _GLOBAL_H_
#define _GLOBAL_H_
#include "precomp.h"
#if !defined(_WIN32_WINNT)
#define _WIN32_WINNT 0x0400
#endif
#include <wininet.h>
#include "wincrypt.h"
#include "license.h"
#include "tlsapip.h"
#include "lrwizapi.h"
#include "chstruct.h"
#define szOID_GIVEN_NAME_W L"2.5.4.42"
#define szOID_COMMON_NAME_W L"2.5.4.3"
#define szOID_COUNTRY_NAME_W L"2.5.4.6"
#define szOID_LOCALITY_NAME_W L"2.5.4.7"
#define szOID_STATE_OR_PROVINCE_NAME_W L"2.5.4.8"
#define szOID_STREET_ADDRESS_W L"2.5.4.9"
#define szOID_POSTAL_CODE_W L"2.5.4.17"
#define szOID_TELEPHONE_NUMBER_W L"2.5.4.20"
#define szOID_FACSIMILE_TELEPHONE_NUMBER_W L"2.5.4.23"
#define szOID_RSA_emailAddr_W L"1.2.840.113549.1.9.1"
#define szCertEXTENSION_OID "1.3.6.1.4.1.311.18"
#define szCertEXTENSION_VALUE_FMT _TEXT("TLS~%s")
#define CH_ERROR_SUCCESS ERROR_SUCCESS
#define CH_ERROR_BASE 0x3000
#define CH_ERROR_BAD_DATA (CH_ERROR_BASE + 1)
#define CH_ERROR_BAD_PARAM (CH_ERROR_BASE + 2)
#define CH_ERROR_BAD_REQUEST (CH_ERROR_BASE + 3)
#define CH_ERROR_NO_DATA (CH_ERROR_BASE + 4)
#define CH_ERROR_OUT_OF_MEMORY (CH_ERROR_BASE + 5)
#define CH_ERROR_EXCEPTION (CH_ERROR_BASE + 6)
#define CH_ERROR_HTTPQRY_FAILED (CH_ERROR_BASE + 7)
#define CH_ERROR_SERVER_ERROR (CH_ERROR_BASE + 8)
#define CH_ERROR_SEND_FAILED (CH_ERROR_BASE + 9)
#define CH_ERROR_BAD_MFBLOB (CH_ERROR_BASE + 10)
#define NUMBER_OF_BATCHES 7
#define CHARS_IN_BATCH 5
#define REG_ICW_STATUS_PATH L"Software\\Microsoft\\Internet Connection Wizard"
#define REG_ICW_COMPLETED L"Completed"
#define RNC_NETWORKS 0x00000001
#define MAX_URL_LENGTH 255
#define RECTWIDTH( rc ) ((rc).right - (rc).left)
#define RECTHEIGHT( rc ) ((rc).bottom - (rc).top)
#define SIZE_OF_BUFFER( x ) sizeof( x ) / sizeof( TCHAR )
#define PRODUCT_WINDOW_STRING_LENGTH 50
#define PRODUCT_WINDOW_NUM_OFFSET_SPACES 5
enum ProductType { UNKNOWN_PRODUCT_TYPE = 0, WIN2K_PERSEAT = 1, WIN2K_INTERNET = 2, WHISTLER_PERUSER = 3, WHISTLER_PERSEAT = 4, NUM_PRODUCT_TYPES = 5 };
enum ProductVersionType { PRODUCT_VERSION_UNDEFINED = 0, PRODUCT_VERSION_W2K = 1, PRODUCT_VERSION_WHISTLER = 2 };
typedef struct { TCHAR lpszSPK[ LR_RETAILSPK_LEN+1]; TCHAR tcStatus; } RETAILSPK, *PRETAILSPK;
typedef struct { LPWSTR lpszAttribute; LPWSTR lpszValue; DWORD dwValueLen; }REG_ATTR, * PREG_ATTR;
typedef struct { LPCSTR lpszOID; LPSTR lpszValue; } REQ_ATTR, * PREQ_ATTR;
typedef struct _Enveloped_Data { DWORD cbEncryptedKey; PBYTE pbEncryptedKey; DWORD cbEncryptedData; PBYTE pbEncryptedData;
} EnvData, * PEnvData;
typedef struct _CONTACT_INFO_TAG { //program related information
CString sProgramName; //Can be Select, MOLP, Retail ...
CString sCertType;
//Contact information
CString sCompanyName; CString sOrgUnit; CString sContactLName; CString sContactFName; CString sContactAddress; CString sContactPhone; CString sContactFax; CString sContactEmail; CString sEmailAddressConf; CString sCity; CString sCountryCode; CString sCountryDesc; CString sState; CString sZip; CString sReasonCode; CString sCSRFaxRegion; CString sCSRPhoneRegion;
void Initialize() { sProgramName = sContactLName = sContactFName = sContactAddress = sContactPhone = sCity = sCountryCode = sCountryDesc = sState = sZip = sContactEmail = sCompanyName = sOrgUnit = sReasonCode = sContactFax = sEmailAddressConf = sCertType = sCSRFaxRegion = sCSRPhoneRegion = sCountryCode = sCountryDesc = ""; }; } CONTACTINFO, *PCONTACTINFO;
// Formerly named "LICINFO", but that conflicts with ocidl.h
typedef struct _LIC_INFO_TAG { //Select Information
CString sSelMastAgrNumber; CString sSelEnrollmentNumber; CString sSelProductType; CString sSelProductDesc; CString sSelQty;
//MOLP information
CString sMOLPAuthNumber; //authorization number
CString sMOLPAgreementNumber; //agreement number
CString sMOLPProductType; //product type
CString sMOLPProductDesc; CString sMOLPQty; //quantity
void Initialize() { sSelMastAgrNumber = sSelEnrollmentNumber = sSelProductType = sSelProductDesc = sSelQty = sMOLPAuthNumber = sMOLPAgreementNumber = sMOLPProductType = sMOLPProductDesc = sMOLPQty = ""; }; } TSLICINFO, *PTSLICINFO;
typedef struct FAX_DATA_TAG { CString sRequestType; CString sAgreementType; CString sProductId; CString sLSId; CString sFName; CString sLName; CString sCompanyName; CString sOrgUnit; CString sAddress; CString sCity; CString sState; CString sZip; CString sCountryCode; CString sCountryDesc; CString sPhoneNumber; CString sFaxNumber; CString sEmailAddress; CString sLicenseType; CString sQuantity; CString sSelEnrollNumber; CString sMolpAuthNumber; CString sMolpLicNumber; void Initialize() { sRequestType = ""; sAgreementType = ""; sProductId = ""; sLSId = ""; sCompanyName = ""; sOrgUnit = ""; sAddress = ""; sCity = ""; sState = ""; sCountryCode = ""; sCountryDesc = ""; sZip = ""; sLName = ""; sFName = ""; sPhoneNumber = ""; sFaxNumber = ""; sEmailAddress = ""; sLicenseType = ""; sQuantity = ""; sSelEnrollNumber= ""; sMolpAuthNumber = ""; sMolpLicNumber = "";
}; }FAX_DATA, * PFAX_DATA;
class CGlobal { public:
CGlobal(); ~CGlobal();
void FreeGlobal(void);
//Public Data Members
public:
//Public Member Functions
public:
DWORD PingCH(void);
void SetInstanceHandle(HINSTANCE hInst); HINSTANCE GetInstanceHandle(); void SetLSName(LPCTSTR lpwszLSName); DWORD InitGlobal(); DWORD CheckRequieredFields(); DWORD LRGetLastError(); int LRMessageBox(HWND hWndParent,DWORD dwMsgId,DWORD dwCaptionID = 0, DWORD dwErrorCode = 0); DWORD AuthenticateLS();
DWORD SetCHCert(LPTSTR lpstrRegKey, PBYTE pCert, DWORD dwLen); DWORD GetCHCert(LPTSTR lpstrRegKey, PBYTE * ppCert, DWORD * pdwLen ); BOOL IsLSRunning(); DWORD GetLSCertificates(PDWORD pdwLSStatus); DWORD IsLicenseServerRegistered(PDWORD pdwServerStatus);
PCONTACTINFO GetContactDataObject(); PTSLICINFO GetLicDataObject();
DWORD GetRequestType(); void SetRequestType(DWORD dwMode);
DWORD ResetLSSPK(BOOL bGenKey = TRUE); TCHAR * GetRegistrationID(void); TCHAR * GetLicenseServerID(void);
BOOL IsOnlineCertRequestCreated();
DWORD SetLRState(DWORD dwState);
DWORD ProcessRequest();
DWORD SetCertificatePIN(LPTSTR lpszPIN); DWORD PopulateCountryComboBox(HWND hWndCmb); DWORD GetCountryCode(CString sDesc,LPTSTR szCode); DWORD GetCountryDesc(CString sCode,LPTSTR szDesc);
DWORD PopulateProductComboBox(HWND hWndCmb, ProductVersionType VerType); DWORD GetProductCode(CString sDesc,LPTSTR szCode); DWORD PopulateReasonComboBox(HWND hWndCmb, DWORD dwType); DWORD GetReasonCode(CString sDesc,LPTSTR szCode, DWORD dwType); DWORD GetReasonDesc(CString sCode,LPTSTR szDesc, DWORD dwType);
DWORD PopulateCountryRegionComboBox(HWND hWndCmb); DWORD PopulateCountryRegionListBox(HWND hWndCmb); void ReadPhoneNumberFromRegistry(LPCTSTR lpCountry, LPTSTR lpPhoneNumber, DWORD nBufferSize);
DWORD CheckRegistryForPhoneNumbers(); void LRSetLastRetCode(DWORD dwCode); DWORD LRGetLastRetCode();
void SetCSRNumber(TCHAR *); TCHAR * GetCSRNumber(void);
void SetWWWSite(TCHAR *); TCHAR * GetWWWSite(void);
void LRPush(DWORD dwPageId); DWORD LRPop(); void ClearWizStack();
DWORD DepositLSSPK(); DWORD SetLSLKP(TCHAR * tcLKP); DWORD SetLSSPK(TCHAR * tcLKP);
BOOL ValidateEmailId(CString sEmailId); BOOL CheckProgramValidity(CString sProgramName); BOOL ValidateLRString(CString sStr);
LPSTR UnicodeToAnsi( LPWSTR lpwszBuf); LPSTR UnicodeToAnsi( LPWSTR lpwszBuf, DWORD dwLength ); LPWSTR AnsiToUnicode ( LPSTR lpszBuf );
void SetReFresh(DWORD dw) { m_dwRefresh = dw; } DWORD GetReFresh(void) { return m_dwRefresh; }
void DeleteRetailSPKFromList(TCHAR * lpszRetailSPK); DWORD AddRetailSPKToList(HWND hListView, TCHAR * lpszRetailSPK); void LoadUnfinishedFromList(HWND hListView); void LoadFinishedFromList(HWND hListView); void LoadFromList(HWND hListView); void UpdateSPKStatus(TCHAR * lpszRetailSPK, TCHAR tcStatus); DWORD SetConfirmationNumber(TCHAR * tcConf);
void SetModifiedRetailSPK(CString sRetailSPK); void GetModifiedRetailSPK(CString &sRetailSPK);
void ModifyRetailSPKFromList(TCHAR * lpszOldSPK,TCHAR * lpszNewSPK); DWORD ValidateRetailSPK(TCHAR * lpszRetailSPK);
DWORD GetLSLangId(); void SetLSLangId(DWORD dwLangId);
void SetLSStatus(DWORD dwStatus); DWORD GetLSStatus(void);
DWORD GetEntryPoint(void);
WIZCONNECTION GetActivationMethod(void); void SetActivationMethod(WIZCONNECTION conn);
WIZCONNECTION GetLSProp_ActivationMethod(void); void SetLSProp_ActivationMethod(WIZCONNECTION conn);
WIZACTION GetWizAction(void); void SetWizAction(WIZACTION act);
WIZTYPE GetWizType() {return m_WizType;} void SetWizType(WIZTYPE t) {m_WizType = t;} DWORD SetInRegistry(LPCSTR lpszOID, LPCTSTR lpszValue); DWORD GetFromRegistry(LPCSTR lpszOID, LPTSTR lpszBuffer, BOOL bConnect = TRUE);
DWORD SetEncodedInRegistry(LPCSTR lpszOID, LPCTSTR lpszValue); DWORD TransmitLKPData(NewLKP_Request &lkpRequest, NewLKP_Response* lkpResponse);
//Private Member functions
protected: void LRSetLastError(DWORD dwErrorCode);
DWORD GetTempCryptContext(HCRYPTPROV * phCryptProv); void DoneWithTempCryptContext(HCRYPTPROV hCryptProv);
DWORD GetCryptContextWithLSKeys(HCRYPTPROV * lphCryptProv ); void DoneWithCryptContextWithLSKeys(HCRYPTPROV hProv);
DWORD LoadCountries(); DWORD LoadReasons(); DWORD LoadProducts();
DWORD ConnectToLSRegistry(); void DisconnectLSRegistry(); DWORD ConnectToLS(); void DisconnectLS();
DWORD ProcessDownloadLKP(); DWORD ProcessIRegRequest(); DWORD ProcessCertDownload(); DWORD ProcessCASignOnlyRequest(); DWORD ProcessCHReissueLKPRequest(); DWORD DepositLSLKP(void); DWORD ProcessCHRevokeCert(void); DWORD ProcessCHReissueCert(void);
DWORD CreateLKPRequest(PBYTE * ppbLKPRequest, NewLKP_Request * newlkpp, DWORD &dwBufLen, ProductType productTypeFilter); DWORD DepositLKPResponse(PBYTE pbResponseData, DWORD dwResponseLen);
DWORD CreateLSPKCS10(HCRYPTPROV hCryptProv,int nType, CHAR **lppszPKCS10);
DWORD AskLSToCreatePKCS10(int nType, CHAR **lppszPKCS10);
DWORD DepositLSCertificates(PBYTE pbExchangePKCS7, DWORD dwExchangePKCS7Len, PBYTE pbSignaturePKCS7, DWORD dwSignaturePKCS7Len, PBYTE pbRootCert, DWORD dwRootCertLen);
DWORD SetCARequestAttributes(); DWORD SetCHRequestAttributes(); void ClearCHRequestAttributes(); void ClearCARequestAttributes();
DWORD SetRegistrationAttribute ( LPWSTR lpszAttribute, LPCWSTR lpszValue, DWORD dwLen ); DWORD SetDNAttribute(LPCSTR lpszOID, LPSTR lpszValue);
void PrepareLRString(CString &sStr);
CERT_RDN_ATTR * CreateRDNAttr();
//Crypto Related functions
DWORD EnvelopeData( PCCERT_CONTEXT pCertContext, DWORD cbMessage, PBYTE pbMessage, PEnvData pEnvelopedData, HCRYPTPROV hCryptProv, HCERTSTORE hCertStore );
DWORD PackEnvData( PEnvData pEnvelopedData, PDWORD pcbPacked, PBYTE *ppbPacked ); DWORD GetCertforExtension ( HCRYPTPROV hCryptProv, HCERTSTORE hCertStore, LPSTR szOID_EXT, PCCERT_CONTEXT * ppCertContext);
DWORD VerifyCertChain ( HCRYPTPROV hCryptProvider, //handle to crypt prov
HCERTSTORE hCertStore, //HAndle to store for verification
PBYTE pbRootCert, //Root cert
DWORD dwcbRootCert );
DWORD InitCHRequest(void); DWORD CloseCHRequest(void); DWORD Dispatch(BYTE * bpData, DWORD dwLen);
DWORD FetchResponse(BYTE * bpResponse, DWORD dwMaxLength, PDWORD dwpDataLength);
DWORD InitSPKList(void); DWORD InsertIntoSPKDisplayList(HWND hListView, TCHAR * lpszRetailSPK, TCHAR tcStatus);
BOOL CheckIfICWCompleted();
ProductType GetProductCodeFromKey(LPCTSTR lpLicenseKey);
DWORD FilteredRetailSPKEntered(ProductType productTypeFilter); DWORD DownloadLKPBatch(ProductType productTypeFilter);
int FindStringTruncationPoint(TCHAR* sOriginal, unsigned int nTruncationLength); void AddStringToProductWindow(HWND hListView, TCHAR* sProductInfo, int nCurrentPoint, int nTruncationPoint); int GetProductWindowMaxStringLength(HWND hListView);
//Private Data members
private: DWORD m_dwLSStatus; HWND m_hWndParent; HINSTANCE m_hInstance; LPTSTR m_lpstrLSName; LPWSTR m_lpwstrLSName; LPTSTR m_lpstrCHServer; LPTSTR m_lpstrCHExtension; DWORD m_dwErrorCode; HKEY m_hLSRegKey;
DWORD m_dwExchangeCertificateLen; PBYTE m_pbExchangeCertificate;
DWORD m_dwSignCertificateLen; PBYTE m_pbSignCertificate;
DWORD m_dwExtenstionValueLen; PBYTE m_pbExtensionValue; PREQ_ATTR m_pReqAttr; //For the Cert Request
DWORD m_dwReqAttrCount;
PREG_ATTR m_pRegAttr; //For the LKP Request
DWORD m_dwRegAttrCount;
PCONTEXT_HANDLE m_phLSContext;
BOOL m_fSupportConcurrent;
BOOL m_fSupportWhistlerCAL;
CONTACTINFO m_ContactData; TSLICINFO m_LicData;
DWORD m_dwRequestType; DWORD m_dwLRState; DWORD m_dwLRCount; //LKP Request Count
LPTSTR m_lpstrPIN;
TCHAR m_lpCSRNumber[MAX_COUNTRY_NUMBER_LENGTH + 1]; TCHAR m_lpWWWSite[MAX_URL_LENGTH];
CStringArray m_csaCountryCode; CStringArray m_csaCountryDesc;
CStringArray m_csaProductCode; CStringArray m_csaProductDesc;
CStringArray m_csaDeactReasonCode; CStringArray m_csaDeactReasonDesc;
CStringArray m_csaReactReasonCode; CStringArray m_csaReactReasonDesc;
DWORD m_dwLastRetCode;
DWORD m_dwRefresh;
HINTERNET m_hOpenDirect; HINTERNET m_hConnect; HINTERNET m_hRequest;
TCHAR m_pRegistrationID[ LR_REGISTRATIONID_LEN+1]; TCHAR m_pLicenseServerID[ LR_LICENSESERVERID_LEN+1]; TCHAR m_pLSLKP[ LR_REGISTRATIONID_LEN+1]; TCHAR m_pLSSPK[ LR_REGISTRATIONID_LEN+1];
//Stores page traversal order. Implemented as a stack
DWORD m_dwWizStack[NO_OF_PAGES]; DWORD m_dwTop;
DWORD m_dwRetailSPKEntered; RETAILSPK m_listRetailSPK[ MAX_RETAILSPKS_IN_BATCH]; DWORD m_ProductQuantity[NUM_PRODUCT_TYPES];
CString m_sModifiedRetailsSPK;
DWORD m_dwLangId;
WIZCONNECTION m_ActivationMethod; WIZCONNECTION m_LSProp_ActivationMethod; WIZACTION m_WizAction;
WIZTYPE m_WizType; }; #endif
|