[commit] r1744 - trunk/GME/MgaUtil

GMESRC Repository Notifications gme-commit at list.isis.vanderbilt.edu
Mon Dec 19 18:42:57 CST 2011


Author: ksmyth
Date: Mon Dec 19 18:42:56 2011
New Revision: 1744

Log:
Cache elevated IMgaRegistrar to reduce number of UAC dialogs

Modified:
   trunk/GME/MgaUtil/CompDlg.cpp
   trunk/GME/MgaUtil/CompDlg.h

Modified: trunk/GME/MgaUtil/CompDlg.cpp
==============================================================================
--- trunk/GME/MgaUtil/CompDlg.cpp	Fri Dec  9 09:25:52 2011	(r1743)
+++ trunk/GME/MgaUtil/CompDlg.cpp	Mon Dec 19 18:42:56 2011	(r1744)
@@ -348,7 +348,7 @@
 			CComPtr<IMgaRegistrar> registrar;
 			HRESULT registrarHr;
 			if (CUACUtils::isVistaOrLater()) {
-				registrarHr = CUACUtils::CreateElevatedInstance(__uuidof(MgaRegistrar), &registrar, GetSafeHwnd());
+				registrarHr = GetElevatedRegistrar(&registrar);
 			}
 			else {
 				registrarHr = registrar.CoCreateInstance(OLESTR("Mga.MgaRegistrar"));
@@ -397,7 +397,7 @@
 			CComPtr<IMgaRegistrar> registrar;
 			HRESULT registrarHr;
 			if (CUACUtils::isVistaOrLater() && (regacc_translate(m_accessmode) != REGACCESS_USER) ) {
-				registrarHr = CUACUtils::CreateElevatedInstance(__uuidof(MgaRegistrar), &registrar);
+				registrarHr = GetElevatedRegistrar(&registrar);
 			}
 			else {
 				registrarHr = registrar.CoCreateInstance(OLESTR("Mga.MgaRegistrar"));
@@ -470,7 +470,7 @@
 	CComPtr<IMgaRegistrar> registrar;
 	HRESULT hr;
 	if (CUACUtils::isVistaOrLater()) {
-		hr = CUACUtils::CreateElevatedInstance(__uuidof(MgaRegistrar), &registrar, GetSafeHwnd());
+		hr = GetElevatedRegistrar(&registrar);
 	} else {
 		hr = registrar.CoCreateInstance(OLESTR("Mga.MgaRegistrar"));
 	}
@@ -485,6 +485,16 @@
 	}
 }
 
+HRESULT CCompDlg::GetElevatedRegistrar(IMgaRegistrar** registrar)
+{
+	HRESULT hr = S_OK;
+	if (m_elevatedRegistrar == NULL)
+		hr = CUACUtils::CreateElevatedInstance(__uuidof(MgaRegistrar), &m_elevatedRegistrar);
+	if (m_elevatedRegistrar != NULL)
+		m_elevatedRegistrar.CopyTo(registrar);
+	return hr;
+}
+
 
 void CCompDlg::RegisterPattern(const CString &path)
 {
@@ -505,7 +515,7 @@
 	CComPtr<IMgaRegistrar> registrar;
 	HRESULT registrarHr;
 	if (CUACUtils::isVistaOrLater() && (acmode != REGACCESS_USER) ) {
-		registrarHr = CUACUtils::CreateElevatedInstance(__uuidof(MgaRegistrar), &registrar);
+		registrarHr = GetElevatedRegistrar(&registrar);
 	}
 	else {
 		registrarHr = registrar.CoCreateInstance(OLESTR("Mga.MgaRegistrar"));

Modified: trunk/GME/MgaUtil/CompDlg.h
==============================================================================
--- trunk/GME/MgaUtil/CompDlg.h	Fri Dec  9 09:25:52 2011	(r1743)
+++ trunk/GME/MgaUtil/CompDlg.h	Mon Dec 19 18:42:56 2011	(r1744)
@@ -63,6 +63,9 @@
 	void RegisterUnknownFile(const CString &path);
 	void UpdateEnableDisable();
 
+	CComPtr<IMgaRegistrar> m_elevatedRegistrar;
+	HRESULT GetElevatedRegistrar(IMgaRegistrar** registrar);
+
 public:
 	CString paradigm;
 	componenttype_enum type;


More information about the gme-commit mailing list