}// PutValuesinPage void onBrowse(Object o, EventArgs e) { // Pop up a file dialog so the user can find an assembly OpenFileDialog fd = new OpenFileDialog(); fd.Title = CResourceStore.GetString("CEvalAssemWiz1:FDTitle"); fd.Filter = CResourceStore.GetString("CEvalAssemWiz1:FDMask"); System.Windows.Forms.DialogResult dr = fd.ShowDialog(); if (dr == System.Windows.Forms.DialogResult.OK) { if (Fusion.isManaged(fd.FileName)) { m_txtFilename.Text = fd.FileName; onTextChange(null, null); // Get a jump on the loading of this assembly if (m_tEvidence != null) { m_tEvidence.Abort(); } m_tEvidence = new Thread(new ThreadStart(NewAssembly)); m_tEvidence.Start(); } else { MessageBox(CResourceStore.GetString("isNotManagedCode"), CResourceStore.GetString("isNotManagedCodeTitle"), MB.ICONEXCLAMATION); } } }// onBrowse
}// onTextChange void onBrowse(Object o, EventArgs e) { // Pop up a file dialog so the user can find an assembly OpenFileDialog fd = new OpenFileDialog(); fd.Title = CResourceStore.GetString("CTrustAppWiz2:ChooseAssemFDTitle"); fd.Filter = CResourceStore.GetString("AssemFDMask"); System.Windows.Forms.DialogResult dr = fd.ShowDialog(); if (dr == System.Windows.Forms.DialogResult.OK) { if (Fusion.isManaged(fd.FileName)) { m_txtFilename.Text = fd.FileName; // Inform our wizard that we have a new assembly for it to try and load CFullTrustWizard wiz = (CFullTrustWizard)CNodeManager.GetNode(m_iCookie); wiz.NewAssembly(); } else { MessageBox(CResourceStore.GetString("isNotManagedCode"), CResourceStore.GetString("isNotManagedCodeTitle"), MB.ICONEXCLAMATION); } } } // onBrowse
internal CApplicationDepends(String sAppFile) { m_sGuid = "96821C0B-CBE2-4dc9-AC52-756A3361B07F"; m_sHelpSection = ""; m_hIcon = CResourceStore.GetHIcon("sharedassemblies_ico"); DisplayName = CResourceStore.GetString("CApplicationDepends:DisplayName"); Name = "Assembly Dependencies"; m_taskPadWaiting = new CGenericTaskPad(this, "WAITINGDEPENDASSEM_HTML"); m_taskPad = new CGenericTaskPad(this, "DEPENDASSEM_HTML"); m_fIKnowMyDependencies = false; m_fAllowListView = false; m_fAllowMultiSelectResults = true; m_fReadShowHTML = false; m_oResults = m_taskPadWaiting; m_olAssems = null; m_sAppFile = sAppFile; // Get icons for the assemblies we show m_hAssemIcon = CResourceStore.GetHIcon("gac_ico"); m_iAssemIconIndex = CResourceStore.GetIconCookie(m_hAssemIcon); // If we're not managed, then don't bother trying to have our dependencies // found if (!Fusion.isManaged(m_sAppFile)) { m_taskPad = new CGenericTaskPad(this, "UNMANAGEDDEPENDASSEM_HTML"); m_oResults = m_taskPad; m_fIKnowMyDependencies = true; } else { // Get ourselves in a queue to have our dependent assemblies discovered.... if (m_alNodes == null) { m_alNodes = ArrayList.Synchronized(new ArrayList()); } m_alNodes.Add(this); if (m_thread == null) { m_thread = new Thread(new ThreadStart(DependencyFinder)); } if (!m_thread.IsAlive) { m_thread.Priority = ThreadPriority.Lowest; m_thread.Start(); } } }// CApplicationDepends
}// Paste private bool AddAssemToFusion(String sFilename) { if (Fusion.isManaged(sFilename)) { int hr = Fusion.AddAssemblytoGac(sFilename); if (hr != HRESULT.S_OK) { if (hr == HRESULT.E_ACCESSDENIED) { MessageBox(CResourceStore.GetString("CSharedAssemblies:AddAssemFailNoAccess"), CResourceStore.GetString("CSharedAssemblies:AddAssemFailNoAccessTitle"), MB.ICONEXCLAMATION); // If this happens, they won't be able to add any items to the gac return(false); } else { MessageBox(CResourceStore.GetString("CSharedAssemblies:AddAssemFail"), CResourceStore.GetString("CSharedAssemblies:AddAssemFailTitle"), MB.ICONEXCLAMATION); } } // Don't bother refreshing the screen unless we added an assembly else { m_olAssems = Fusion.ReadFusionCache(); CNodeManager.Console.SelectScopeItem(HScopeItem); } } else { MessageBox(CResourceStore.GetString("isNotManagedCode"), CResourceStore.GetString("isNotManagedCodeTitle"), MB.ICONEXCLAMATION); } return(true); }// AddAssemToFusion
}// HaveCurrentEvidence internal Evidence GetEvidence() { // If we have a thread that is doing this right now, abort // it. if (m_tEvidence != null) { m_tEvidence.Abort(); } try { AssemblyRef ar = m_al.LoadAssemblyInOtherAppDomainFrom(m_txtFilename.Text); Evidence e = ar.GetEvidence(); m_al.Finished(); m_sEvalAssem = m_txtFilename.Text; return(e); } catch (Exception) { // Let's see if can can figure out what failed... if (File.Exists(m_txtFilename.Text) && !Fusion.isManaged(m_txtFilename.Text)) { MessageBox(CResourceStore.GetString("isNotManagedCode"), CResourceStore.GetString("isNotManagedCodeTitle"), MB.ICONEXCLAMATION); } else { MessageBox(String.Format(CResourceStore.GetString("CantLoadAssembly"), m_txtFilename.Text), CResourceStore.GetString("CantLoadAssemblyTitle"), MB.ICONEXCLAMATION); } m_al.Finished(); return(null); } } // GetEvidence
}// WizBack protected override int WizNext(IntPtr hwnd) { int nIndex = GetPropPage(hwnd); int nReturnCode = 0; switch (nIndex) { // This page corresponds to the "Choose an assembly to trust" page case Page2Index: // Get our assembly to finish loading if (m_tAssemblyLoader != null) { m_tAssemblyLoader.Join(); } if (m_ev == null) { // We don't have evidence yet. Let's try and get it LoadAssembly(); // We had a problem with the load if (m_ev == null) { // Let's see if can can figure out what failed... if (File.Exists(Page2.Filename) && !Fusion.isManaged(Page2.Filename)) { MessageBox(CResourceStore.GetString("isNotManagedCode"), CResourceStore.GetString("isNotManagedCodeTitle"), MB.ICONEXCLAMATION); } else { MessageBox(String.Format(CResourceStore.GetString("CantLoadAssembly"), Page2.Filename), CResourceStore.GetString("CantLoadAssemblyTitle"), MB.ICONEXCLAMATION); } nReturnCode = -1; break; } } X509Certificate x509 = GetCertificate(); StrongName sn = GetStrongName(); Hash hash = GetHash(); // Check to see if the assembly they've selected has a certificate if (x509 != null || sn != null) { Page3.x509 = x509; Page3.sn = sn; m_fHasCertOrSName = true; break; } else { // The assembly doesn't have a certificate or a strong name. We'll go to the // page that let's them choose the permission set they want to assign m_fHasCertOrSName = false; // I'd like to just fall through to the next case statement, but that // isn't allowed in C#. We'll need to use a goto instead goto case Page3Index; } // This page corresponds to the 'how do you want to trust this assembly' when // the assembly has a publisher certificate case Page3Index: // Let's figure out how we can change the policy. // First, let's see what happens if we give this app full trust. // If we can't get any permissions, then this severely hampers what // the wizard can do. This might occur if the level of trust we can grant is // limited by an upper policy level. If this is the case, then we need // to bail int nLevelFromFullTrust = TryToCreateFullTrust(); if (nLevelFromFullTrust != PermissionSetType.UNKNOWN && nLevelFromFullTrust != PermissionSetType.NONE) { // Now, lets see if we can identify the permission set that it currently gets int nCurPerm = FindCurrentPermissionSet(); if (nCurPerm != PermissionSetType.UNKNOWN) { // Go to the Slider bar page Page5.MyTrustLevel = nCurPerm; Page5.MaxTrustLevel = nLevelFromFullTrust; Page5.PutValuesInPage(); m_nPageToGetPermissionLevel = Page5Index; } else { // Go to the 'You can only assign full trust' page m_nPageToGetPermissionLevel = Page4Index; } } else { // Else, we can't do anything. The app's permission level is limited by // an upper policy level. Puke out now. m_nPageToGetPermissionLevel = Page6Index; } // Head off to the page that will let us get a permission set to assign SendMessage(GetParent(hwnd), PSM.SETCURSEL, (IntPtr)m_nPageToGetPermissionLevel, (IntPtr)(-1)); nReturnCode = -1; break; // This page is for the "You can only give this assembly full trust" page case Page4Index: // This page gives the slider and allows the user to choose the permission level // they want case Page5Index: // Head off to the summary page SendMessage(GetParent(hwnd), PSM.SETCURSEL, (IntPtr)Page7Index, (IntPtr)(-1)); nReturnCode = -1; break; } int nBaseRet = base.WizNext(hwnd); if (nBaseRet == 0) { return(nReturnCode); } else { return(nBaseRet); } }// WizNext
}// AddMenuItems internal override void MenuCommand(int iCommandID) { if (iCommandID == COMMANDS.ADD_APPLICATION) { // Pop up a dialog so the user can find an assembly CChooseAppDialog cad = new CChooseAppDialog(); System.Windows.Forms.DialogResult dr = cad.ShowDialog(); if (dr == System.Windows.Forms.DialogResult.OK) { String sConfigFile = cad.Filename; String sAppFilename = ""; // If this is an executable or Dll, or if it is managed int iLen = sConfigFile.Length; if (iLen > 3) { String sExtension = sConfigFile.Substring(sConfigFile.Length - 3).ToUpper(CultureInfo.InvariantCulture); if (sExtension.ToUpper(CultureInfo.InvariantCulture).Equals("EXE") || sExtension.ToUpper(CultureInfo.InvariantCulture).Equals("DLL") || Fusion.isManaged(sConfigFile)) { sAppFilename = sConfigFile; // Let's add a config extension sConfigFile = sConfigFile + ".config"; } else if (iLen > 6) { // Check to see if they selected a config file sExtension = sConfigFile.Substring(sConfigFile.Length - 6).ToUpper(CultureInfo.InvariantCulture); if (sExtension.ToUpper(CultureInfo.InvariantCulture).Equals("CONFIG")) { // They've selected a config file. Let's see if there is an assembly around there as well. String sAssemName = sConfigFile.Substring(0, sConfigFile.Length - 7); if (File.Exists(sAssemName)) { sAppFilename = sAssemName; } } } } AppFiles appFile = new AppFiles(); appFile.sAppFile = sAppFilename; appFile.sAppConfigFile = sConfigFile; // Check to see if we already have this app file shown CNode node = CheckForDuplicateApp(appFile); if (node == null) { CConfigStore.SetSetting("AppConfigFiles", appFile); node = new CApplication(appFile); int iCookie = CNodeManager.AddNode(ref node); AddChild(iCookie); InsertSpecificChild(iCookie); } CNodeManager.Console.SelectScopeItem(node.HScopeItem); } } else if (iCommandID == COMMANDS.FIX_APPLICATION) { PolicyManager(CNodeManager.MMChWnd, null, null, null); } }// MenuCommand