//+-------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1994 - 1998. // // File: data.cpp // // Contents: Defines storage class that maintains data for snap-in nodes. // // Classes: CAppData // // History: 05-27-1997 stevebl Created // //--------------------------------------------------------------------------- #include "precomp.hxx" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif CAppData::CAppData() { m_pDetails = NULL; m_itemID = 0; m_fVisible = 0; m_fHide = FALSE; m_pProduct = NULL; m_pDeploy = NULL; m_pCategory = NULL; m_pXforms = NULL; m_pPkgDetails = NULL; m_pUpgradeList = NULL; m_pErrorInfo = NULL; m_pCause = NULL; m_fRSoP = FALSE; m_psd = NULL; m_dwApplyCause = 0; m_dwLanguageMatch = 0; m_szOnDemandFileExtension = L""; m_szOnDemandClsid = L""; m_szOnDemandProgid = L""; m_dwRemovalCause = 0; m_dwRemovalType = 0; m_szRemovingApplication = L""; m_szEventSource = L""; m_szEventLogName = L""; m_dwEventID = 0; m_szEventTime = L""; m_szEventLogText = L""; m_hrErrorCode = 0; m_nStatus = 0; } CAppData::~CAppData() { if (m_pProduct) { m_pProduct->SendMessage(WM_USER_CLOSE, 0, 0); } if (m_pDeploy) { m_pDeploy->SendMessage(WM_USER_CLOSE, 0, 0); } if (m_pCategory) { m_pCategory->SendMessage(WM_USER_CLOSE, 0, 0); } if (m_pUpgradeList) { m_pUpgradeList->SendMessage(WM_USER_CLOSE, 0, 0); } if (m_pXforms) { m_pXforms->SendMessage(WM_USER_CLOSE, 0, 0); } if (m_pPkgDetails) { m_pPkgDetails->SendMessage(WM_USER_CLOSE, 0, 0); } if (m_pErrorInfo) { m_pErrorInfo->SendMessage(WM_USER_CLOSE, 0, 0); } } void CAppData::NotifyChange(void) { if (m_pProduct) { m_pProduct->SendMessage(WM_USER_REFRESH, 0, 0); } if (m_pDeploy) { m_pDeploy->SendMessage(WM_USER_REFRESH, 0, 0); } if (m_pCategory) { m_pCategory->SendMessage(WM_USER_REFRESH, 0, 0); } if (m_pUpgradeList) { m_pUpgradeList->SendMessage(WM_USER_REFRESH, 0, 0); } if (m_pXforms) { m_pXforms->SendMessage(WM_USER_REFRESH, 0, 0); } if (m_pPkgDetails) { m_pPkgDetails->SendMessage(WM_USER_REFRESH, 0, 0); } if (m_pErrorInfo) { m_pErrorInfo->SendMessage(WM_USER_REFRESH, 0, 0); } } void CAppData::InitializeExtraInfo(void) { // at the moment, there is no extra info return; } void CAppData::GetSzPublisher(CString &sz) { sz = m_pDetails->pszPublisher; } void CAppData::GetSzOOSUninstall(CString &sz) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); sz.LoadString((m_pDetails->pInstallInfo->dwActFlags & ACTFLG_UninstallOnPolicyRemoval) ? IDS_YES : IDS_NO); } void CAppData::GetSzShowARP(CString &sz) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); sz.LoadString((m_pDetails->pInstallInfo->dwActFlags & ACTFLG_UserInstall) ? IDS_YES : IDS_NO); } void CAppData::GetSzUIType(CString &sz) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); sz.LoadString((m_pDetails->pInstallInfo->InstallUiLevel == INSTALLUILEVEL_FULL) ? IDS_MAXIMUM : IDS_BASIC); } void CAppData::GetSzIgnoreLoc(CString &sz) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); sz.LoadString((m_pDetails->pInstallInfo->dwActFlags & ACTFLG_IgnoreLanguage) ? IDS_YES : IDS_NO); } void CAppData::GetSzRemovePrev(CString &sz) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); sz.LoadString((m_pDetails->pInstallInfo->dwActFlags & ACTFLG_UninstallUnmanaged) ? IDS_YES : IDS_NO); } void CAppData::GetSzX86onIA64(CString &sz) { BOOL fYes = 0; AFX_MANAGE_STATE(AfxGetStaticModuleState()); // // Check this only for 32-bit apps // if ( ! Is64Bit() ) { fYes = 0 != (m_pDetails->pInstallInfo->dwActFlags & ACTFLG_ExcludeX86OnIA64); } if ( ! Is64Bit() ) { if (m_pDetails->pInstallInfo->PathType == SetupNamePath) { //reverse the sense for legacy apps // (this flag has the opposite meaning for legacy apps) fYes = !fYes; } } sz.LoadString(fYes ? IDS_YES : IDS_NO); } void CAppData::GetSzFullInstall(CString &sz) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); if (m_pDetails->pInstallInfo->dwActFlags & ACTFLG_Assigned) { sz.LoadString((m_pDetails->pInstallInfo->dwActFlags & ACTFLG_InstallUserAssign) ? IDS_YES : IDS_NO); } else { sz.LoadString(IDS_NA); } } void CAppData::GetSzProductCode(CString &sz) { // szA = dataA.m_pDetails->pInstallInfo->ProductCode OLECHAR szTemp[80]; StringFromGUID2(m_pDetails->pInstallInfo->ProductCode, szTemp, sizeof(szTemp) / sizeof(szTemp[0])); sz = szTemp; } void CAppData::GetSzOrigin(CString &sz) { sz = m_szGPOName; } void CAppData::GetSzSOM(CString &sz) { sz = m_szSOMID; } void CAppData::GetSzDeployment(CString &sz) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); int id; if (m_pDetails->pInstallInfo->dwActFlags & ACTFLG_Assigned) id = IDS_ASSIGNED; else if (m_pDetails->pInstallInfo->dwActFlags & ACTFLG_Published) id = IDS_PUBLISHED; else id = IDS_DISABLED; sz.LoadString(id); } void CAppData::GetSzAutoInstall(CString &sz) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); sz.LoadString((m_pDetails->pInstallInfo->dwActFlags & ACTFLG_OnDemandInstall) ? IDS_YES : IDS_NO); } void CAppData::GetSzLocale(CString &sz) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); TCHAR szBuffer[256]; sz = ""; UINT i = 0; while (i < m_pDetails->pPlatformInfo->cLocales) { if (i > 0) { sz += ", "; } if (m_pDetails->pPlatformInfo->prgLocale[i]) { GetLocaleInfo(m_pDetails->pPlatformInfo->prgLocale[i], LOCALE_SLANGUAGE, szBuffer, 256); sz += szBuffer; #ifdef SHOWCOUNTRY GetLocaleInfo(m_pDetails->pPlatformInfo->prgLocale[i], LOCALE_SCOUNTRY, szBuffer, 256); sz += _T(" - "); sz += szBuffer; #endif } else { // neutral locale CString szNeutral; szNeutral.LoadString(IDS_NEUTRAL_LOCALE); sz += szNeutral; } i++; } } void CAppData::GetSzPlatform(CString &sz) { TCHAR szBuffer[256]; sz = ""; UINT i = 0; while (i < m_pDetails->pPlatformInfo->cPlatforms) { if (i > 0) { sz += ", "; } #if 0 // I'm only going to display the processor to simplify the display ::LoadString(ghInstance, IDS_OS + m_pDetails->pPlatformInfo->prgPlatform[i].dwPlatformId + 1, szBuffer, 256); sz += szBuffer; wsprintf(szBuffer, _T(" %u.%u/"), m_pDetails->pPlatformInfo->prgPlatform[i].dwVersionHi, pDetails->pPlatformInfo->prgPlatform[i].dwVersionLo); sz += szBuffer; #endif ::LoadString(ghInstance, IDS_HW + m_pDetails->pPlatformInfo->prgPlatform[i].dwProcessorArch, szBuffer, 256); sz += szBuffer; i++; } } void CAppData::GetSzUpgrades(CString &sz, CScopePane * pScopePane) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); if (!m_szUpgrades.IsEmpty()) { sz = m_szUpgrades; return; } if (m_fRSoP) { switch (m_setUpgrade.size() + m_setReplace.size()) { case 0: sz.LoadString(IDS_NONE); break; case 1: if (1 == m_setUpgrade.size()) { sz = *m_setUpgrade.begin(); } else { sz = *m_setReplace.begin(); } break; default: sz.LoadString(IDS_MULTIPLE); break; } } else { sz=""; CString szName; UINT n = m_pDetails->pInstallInfo->cUpgrades; while (n--) { if (0 == (UPGFLG_UpgradedBy & m_pDetails->pInstallInfo->prgUpgradeInfoList[n].Flag)) { HRESULT hr = pScopePane->GetPackageNameFromUpgradeInfo(szName, m_pDetails->pInstallInfo->prgUpgradeInfoList[n].PackageGuid, m_pDetails->pInstallInfo->prgUpgradeInfoList[n].szClassStore); if (SUCCEEDED(hr)) { if (sz.GetLength()) { // We'd already found one sz.LoadString(IDS_MULTIPLE); m_szUpgrades = sz; return; } sz = szName; } } } if (0 == sz.GetLength()) { sz.LoadString(IDS_NONE); } } m_szUpgrades = sz; } void CAppData::GetSzUpgradedBy(CString &sz, CScopePane * pScopePane) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); if (m_fRSoP) { switch (m_setUpgradedBy.size()) { case 0: sz.LoadString(IDS_NONE); break; case 1: sz = *m_setUpgradedBy.begin(); break; default: sz.LoadString(IDS_MULTIPLE); break; } } else { UINT n = m_pDetails->pInstallInfo->cUpgrades; CString szName; sz=""; while (n--) { if (0 != (UPGFLG_UpgradedBy & m_pDetails->pInstallInfo->prgUpgradeInfoList[n].Flag)) { HRESULT hr = pScopePane->GetPackageNameFromUpgradeInfo(szName, m_pDetails->pInstallInfo->prgUpgradeInfoList[n].PackageGuid, m_pDetails->pInstallInfo->prgUpgradeInfoList[n].szClassStore); if (SUCCEEDED(hr)) { if (sz.GetLength()) { // We'd already found one sz.LoadString(IDS_MULTIPLE); return; } sz = szName; } } } if (0 == sz.GetLength()) { sz.LoadString(IDS_NONE); } } } void CAppData::GetSzStage(CString &sz) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); BOOL fUpgrades = FALSE; if (m_fRSoP) { fUpgrades = (m_setUpgrade.size() + m_setReplace.size()) != 0; } else { UINT n = m_pDetails->pInstallInfo->cUpgrades; while (n-- && !fUpgrades) { if (0 == (UPGFLG_UpgradedBy & m_pDetails->pInstallInfo->prgUpgradeInfoList[n].Flag)) { fUpgrades = TRUE; } } } if (!fUpgrades) { sz.LoadString(IDS_NONE); } else if (ACTFLG_ForceUpgrade & m_pDetails->pInstallInfo->dwActFlags) sz.LoadString(IDS_REQUIRED); else sz.LoadString(IDS_OPTIONAL); } void CAppData::GetSzVersion(CString &sz) { TCHAR szBuffer[256]; wsprintf(szBuffer, _T("%u.%u"), m_pDetails->pInstallInfo->dwVersionHi, m_pDetails->pInstallInfo->dwVersionLo); sz = szBuffer; } void CAppData::GetSzSource(CString &sz) { if (1 <= m_pDetails->cSources) { sz = m_pDetails->pszSourceList[0]; } else sz = ""; } void CAppData::GetSzMods(CString &sz) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); if (2 < m_pDetails->cSources) { sz.LoadString(IDS_MULTIPLE); } else { if (2 == m_pDetails->cSources) { sz = m_pDetails->pszSourceList[1]; } else sz = ""; } } int CAppData::GetImageIndex(CScopePane * pScopePane) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); if (m_nStatus == 3) { // RSoP setting failed status return IMG_OPEN_FAILED; } CString sz; GetSzUpgrades(sz, pScopePane); CString sz2; sz2.LoadString(IDS_NONE); // gonna use the upgrade icon but it's only gonna be used when // m_szUpgrades doesn't read "none" if (0 != sz2.Compare(sz)) { // we must be upgrading something return IMG_UPGRADE; } if (m_pDetails->pInstallInfo->dwActFlags & ACTFLG_Assigned) return IMG_ASSIGNED; else if (m_pDetails->pInstallInfo->dwActFlags & ACTFLG_Published) return IMG_PUBLISHED; else return IMG_DISABLED; } BOOL CAppData::Is64Bit( PACKAGEDETAIL* pPackageDetails ) { UINT n = pPackageDetails->pPlatformInfo->cPlatforms; while (n--) { if (pPackageDetails->pPlatformInfo->prgPlatform[n].dwProcessorArch == PROCESSOR_ARCHITECTURE_IA64) { return TRUE; } } return FALSE; } BOOL CAppData::Is64Bit(void) { return Is64Bit( m_pDetails ); }