// CRegWizCtrl.cpp : Implementation of CRegWizCtrl #include "stdafx.h" #include "RegwizCtrl.h" #include "CRwCtrl.h" #include "rw_common.h" #include "regutil.h" int TstFn1 ( HANDLE hInstance ); _TCHAR szProductPath[256]; ///////////////////////////////////////////////////////////////////////////// // CRegWizCtrl STDMETHODIMP CRegWizCtrl::InterfaceSupportsErrorInfo(REFIID riid) { static const IID* arr[] = { &IID_IRegWizCtrl, }; for (int i=0;i<sizeof(arr)/sizeof(arr[0]);i++) { if (InlineIsEqualGUID(*arr[i],riid)) return S_OK; } return S_FALSE; } STDMETHODIMP CRegWizCtrl::InvokeRegWizard(BSTR ProductPath) { LPCTSTR pPath; int iRet; iRet = 0; // No Error // TODO: Add your implementation code here //TstFn1 ( _Module.GetModuleInstance(), m_ctlButton.m_hWnd); #ifndef _UNICODE pPath = BstrToSz(ProductPath); #else pPath = ProductPath; #endif if(pPath) { //MessageBox("TransferRegWizInformation",lpInfo); iRet = InvokeRegistration ( _Module.GetModuleInstance() ,pPath ); #ifndef _UNICODE CoTaskMemFree((void *) pPath); #endif } //return (HRESULT) iRet; //return iRet == NO_ERROR ? S_OK:E_FAIL; return S_OK; } STDMETHODIMP CRegWizCtrl::TransferRegWizInformation(BSTR InformationPath) { // TODO: Add your implementation code here LPCTSTR lpInfo; //::MessageBox(NULL,"TransferRegWizInformation","SSS ",MB_OK); #ifndef _UNICODE lpInfo = BstrToSz(InformationPath); #else lpInfo = InformationPath; #endif if(lpInfo) { // MessageBox("TransferRegWizInformation",lpInfo); TransmitRegWizInfo(_Module.GetModuleInstance(), lpInfo,FALSE); #ifndef _UNICODE CoTaskMemFree((void *) lpInfo); #endif } return S_OK; } STDMETHODIMP CRegWizCtrl::put_IsRegistered(BSTR InformationPath) { LPCTSTR lpInfo; #ifndef _UNICODE lpInfo = BstrToSz(InformationPath); #else lpInfo = InformationPath; #endif _tcscpy(szProductPath,lpInfo); return S_OK; } STDMETHODIMP CRegWizCtrl::get_IsRegistered(VARIANT_BOOL * pbStatus) { int iReturn ; HKEY hKey; TCHAR szValueName[256] = _T(""); TCHAR szRetVal[48]; DWORD dwSize= 48; LONG regStatus ; *pbStatus = FALSE; HINSTANCE hInstance = _Module.GetModuleInstance(); int resSize = LoadString(hInstance, IDS_INPUT_ISREGISTERED,szValueName,128); iReturn = 1; regStatus = RegOpenKeyEx( HKEY_LOCAL_MACHINE, szProductPath,0,KEY_READ |KEY_WRITE,&hKey); if (regStatus != ERROR_SUCCESS) { return E_FAIL; // error } regStatus = RegQueryValueEx(hKey, szValueName, NULL, 0, (LPBYTE) szRetVal, &dwSize); if (regStatus == ERROR_SUCCESS){ // Verifty the Value // if(szRetVal[0] == _T('1')) { *pbStatus = TRUE; // Product Registred flag is set } } RegCloseKey(hKey); return S_OK; } /* B S T R C R E A T E S Z */ /*------------------------------------------------------------------------- Owner: SteveBu Creates a BSTR from a string -------------------------------------------------------------------------*/ #ifndef _UNICODE BSTR BstrCreateSz(LPCSTR lpa) { BSTR bsz; UINT cch; cch = lstrlen(lpa); bsz = SysAllocStringLen(NULL, cch); if (bsz == NULL) return NULL; if (cch > 0) MultiByteToWideChar(CP_ACP, 0, lpa, cch, bsz, cch); bsz[cch] = NULL; return bsz; } #endif /* G E T _ M S I D */ /*------------------------------------------------------------------------- Owner: SteveBu Returns a user's MSID from the Registry. If it does not exist, this code issues a MSID using GetNewGUID. -------------------------------------------------------------------------*/ STDMETHODIMP CRegWizCtrl::get_MSID(BSTR *pbstrMSID) { HRESULT hr = S_OK; _TCHAR szValue[256]; char czNewGuid[256]; BOOL fPutMSID = FALSE; szValue[0] = '\0'; *pbstrMSID = NULL; if(!GetMSIDfromRegistry(_Module.GetModuleInstance(), szValue)) { GetNewGUID(czNewGuid); _tcscpy(szValue,ConvertToUnicode(czNewGuid)); fPutMSID = TRUE; } // TODO: Add your implementation code here #ifndef _UNICODE if ((*pbstrMSID = BstrCreateSz(szValue)) == NULL) #else if ((*pbstrMSID = SysAllocString(szValue)) == NULL) #endif // _UNICODE { hr = E_OUTOFMEMORY; } if (SUCCEEDED(hr) && fPutMSID && *pbstrMSID) return put_MSID(*pbstrMSID); return hr; } /* P U T _ M S I D */ /*------------------------------------------------------------------------- Owner: SteveBu Adds a MSID to the registry -------------------------------------------------------------------------*/ STDMETHODIMP CRegWizCtrl::put_MSID(BSTR bstrMSID) { DWORD dwRet; _TCHAR szKeyName[256]; HKEY hIDKey; TCHAR szMSID[256]; HINSTANCE hInstance = _Module.GetModuleInstance(); _tcscpy(szKeyName,_T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion")); #ifndef _UNICODE WideCharToMultiByte(CP_ACP, 0, bstrMSID, -1, szMSID, 256, NULL, NULL); #else _tcscpy(szMSID, bstrMSID); #endif // _UNICODE dwRet = RegOpenKeyEx(HKEY_CURRENT_USER,szKeyName,0,KEY_ALL_ACCESS,&hIDKey); if (dwRet == ERROR_SUCCESS) { szMSID[32]=_T('\0'); // Store MSID into dwRet = RegSetValueEx(hIDKey,_T("MSID"),NULL,REG_SZ,(CONST BYTE *)szMSID, _tcslen((LPCTSTR)szMSID)); RegCloseKey(hIDKey); } _TCHAR szPartialKey[256]; int resSize = LoadString(hInstance,IDS_KEY2,szKeyName,255); _tcscat(szKeyName,_T("\\")); resSize = LoadString(hInstance,IDS_KEY3,szPartialKey,255); _tcscat(szKeyName,szPartialKey); _tcscat(szKeyName,_T("\\")); resSize = LoadString(hInstance,IDS_KEY4,szPartialKey,255); _tcscat(szKeyName,szPartialKey); dwRet = RegOpenKeyEx(HKEY_CURRENT_USER,szKeyName,0,KEY_ALL_ACCESS,&hIDKey); if (dwRet == ERROR_SUCCESS) { // Store MSID into dwRet = RegSetValueEx(hIDKey,_T("MSID"),NULL,REG_SZ,(CONST BYTE *)szMSID, _tcslen((LPCTSTR)szMSID)); RegCloseKey(hIDKey); } return S_OK; } /* G E T _ H W I D */ /*------------------------------------------------------------------------- Owner: SteveBu Returns the machine HWID or creates it. -------------------------------------------------------------------------*/ STDMETHODIMP CRegWizCtrl::get_HWID(BSTR * pbstrHWID) { HKEY hKeyHWID; HRESULT hr = S_OK; BOOL fPutHWID = FALSE; _TCHAR szKeyName[256]; _TCHAR szValue[256]; char czNewGuid[256]; *pbstrHWID = NULL; szValue[0] = '\0'; _tcscpy(szKeyName,_T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion")); LONG regStatus = RegOpenKeyEx(HKEY_LOCAL_MACHINE, szKeyName, 0, KEY_READ, &hKeyHWID); if (regStatus == ERROR_SUCCESS) { _TCHAR szValueName[64]; unsigned long infoSize = 255; LoadString(_Module.GetModuleInstance(),IDS_HWID, szValueName,64); regStatus = RegQueryValueEx(hKeyHWID,szValueName,NULL,0,(LPBYTE) szValue,&infoSize); if (regStatus != ERROR_SUCCESS) { GetNewGUID(czNewGuid); _tcscpy(szValue,ConvertToUnicode(czNewGuid)); fPutHWID = TRUE; } RegCloseKey(hKeyHWID); } #ifndef _UNICODE if ((*pbstrHWID = BstrCreateSz(szValue)) == NULL) #else if ((*pbstrHWID = SysAllocString(szValue)) == NULL) #endif // _UNICODE { hr = E_OUTOFMEMORY; } if (SUCCEEDED(hr) && fPutHWID && *pbstrHWID) return put_HWID(*pbstrHWID); return hr; } /* P U T _ H W I D */ /*------------------------------------------------------------------------- Owner: SteveBu Adds the passed in HWID to the registry -------------------------------------------------------------------------*/ STDMETHODIMP CRegWizCtrl::put_HWID(BSTR bstrHWID) { DWORD dwRet; _TCHAR szKeyName[256]; HKEY hIDKey; _tcscpy(szKeyName,_T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion")); // Store HWID into Registry dwRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE,szKeyName,0,KEY_ALL_ACCESS,&hIDKey); if (dwRet == ERROR_SUCCESS) { _TCHAR szHWID[256]; #ifndef _UNICODE WideCharToMultiByte(CP_ACP, 0, bstrHWID, -1, szHWID, 256, NULL, NULL); #else _tcscpy(szHWID, bstrHWID); #endif // _UNICODE dwRet = RegSetValueEx(hIDKey,_T("HWID"),NULL, REG_SZ,(CONST BYTE *)szHWID, _tcslen((LPCTSTR)szHWID)); RegCloseKey(hIDKey); } return S_OK; } /* T R A N S F E R O E M R E G W I Z I N F O R M A T I O N */ /*------------------------------------------------------------------------- Owner: SteveBu Transfer product registration and OEM information. -------------------------------------------------------------------------*/ STDMETHODIMP CRegWizCtrl::TransferOEMRegWizInformation(BSTR InformationPath) { LPCTSTR lpInfo; //::MessageBox(NULL,"TransferOEMRegWizInformation","SSS ",MB_OK); #ifndef _UNICODE lpInfo = BstrToSz(InformationPath); #else lpInfo = InformationPath; #endif if(lpInfo) { // MessageBox("TransferRegWizInformation",lpInfo); TransmitRegWizInfo(_Module.GetModuleInstance(), lpInfo, TRUE); #ifndef _UNICODE CoTaskMemFree((void *) lpInfo); #endif } return S_OK; } /* G E T _ V E R S I O N */ /*------------------------------------------------------------------------- Owner: SteveBu Returns the RegWiz Version Number -------------------------------------------------------------------------*/ STDMETHODIMP CRegWizCtrl::get_Version(BSTR * pbstr) { _TCHAR szValue[256]; GetRegWizardVersionString(_Module.GetModuleInstance(),szValue); #ifndef _UNICODE if ((*pbstr = BstrCreateSz(szValue)) == NULL) #else if ((*pbstr = SysAllocString(szValue)) == NULL) #endif // _UNICODE { return E_OUTOFMEMORY; } return S_OK; }