private static unsafe bool ExtractManifestContent(System.Deployment.Internal.Isolation.Manifest.ICMS cms, out MemoryStream ms) { ms = new MemoryStream(); try { System.Runtime.InteropServices.ComTypes.IStream stream = cms as System.Runtime.InteropServices.ComTypes.IStream; if (stream == null) { return(false); } byte[] pv = new byte[0x1000]; int cb = 0x1000; do { stream.Read(pv, cb, new IntPtr((void *)&cb)); ms.Write(pv, 0, cb); }while (cb == 0x1000); ms.Position = 0L; return(true); } catch (Exception) { return(false); } }
public AssemblyManifest(System.Deployment.Internal.Isolation.Manifest.ICMS cms) { this._manifestSourceFormat = System.Deployment.Application.Manifest.ManifestSourceFormat.Unknown; if (cms == null) { throw new ArgumentNullException("cms"); } this._cms = cms; }
private static bool ParseManifest(System.Deployment.Internal.Isolation.Manifest.ICMS cms, ParsedData parsedData) { try { if ((cms != null) && (cms.MetadataSectionEntry != null)) { System.Deployment.Internal.Isolation.Manifest.IMetadataSectionEntry metadataSectionEntry = cms.MetadataSectionEntry as System.Deployment.Internal.Isolation.Manifest.IMetadataSectionEntry; if (metadataSectionEntry != null) { System.Deployment.Internal.Isolation.Manifest.IDescriptionMetadataEntry descriptionData = metadataSectionEntry.DescriptionData; if (descriptionData != null) { parsedData.SupportUrl = descriptionData.SupportUrl; parsedData.AppName = descriptionData.Product; parsedData.AppPublisher = descriptionData.Publisher; } System.Deployment.Internal.Isolation.Manifest.IDeploymentMetadataEntry deploymentData = metadataSectionEntry.DeploymentData; if (deploymentData != null) { parsedData.RequestsShellIntegration = (deploymentData.DeploymentFlags & 0x20) != 0; } if ((metadataSectionEntry.ManifestFlags & 8) != 0) { parsedData.UseManifestForTrust = true; } else { parsedData.UseManifestForTrust = false; } } } } catch (Exception) { return(false); } return(true); }
public ApplicationTrust DetermineApplicationTrust(ActivationContext activationContext, TrustManagerContext trustManagerContext) { MemoryStream stream; bool flag; bool flag2; bool flag3; MemoryStream stream2; ArrayList list; if (activationContext == null) { throw new ArgumentNullException("activationContext"); } ApplicationSecurityInfo info = new ApplicationSecurityInfo(activationContext); ApplicationTrustExtraInfo appTrustExtraInfo = new ApplicationTrustExtraInfo(); HostContextInternal hostContextInternal = new HostContextInternal(trustManagerContext); System.Deployment.Internal.Isolation.Manifest.ICMS deploymentComponentManifest = (System.Deployment.Internal.Isolation.Manifest.ICMS)InternalActivationContextHelper.GetDeploymentComponentManifest(activationContext); ParsedData parsedData = new ParsedData(); if (ParseManifest(deploymentComponentManifest, parsedData)) { appTrustExtraInfo.RequestsShellIntegration = parsedData.RequestsShellIntegration; } string deploymentUrl = GetDeploymentUrl(info); string zoneNameFromDeploymentUrl = GetZoneNameFromDeploymentUrl(deploymentUrl); if (!ExtractManifestContent(deploymentComponentManifest, out stream)) { return(BlockingPrompt(activationContext, parsedData, deploymentUrl, info, appTrustExtraInfo, zoneNameFromDeploymentUrl, AppRequestsBeyondDefaultTrust(info))); } AnalyzeCertificate(parsedData, stream, out flag, out flag2, out flag3); System.Deployment.Internal.Isolation.Manifest.ICMS applicationComponentManifest = (System.Deployment.Internal.Isolation.Manifest.ICMS)InternalActivationContextHelper.GetApplicationComponentManifest(activationContext); ParsedData data2 = new ParsedData(); if ((ParseManifest(applicationComponentManifest, data2) && data2.UseManifestForTrust) && ExtractManifestContent(applicationComponentManifest, out stream2)) { bool flag4; bool flag5; bool flag6; AnalyzeCertificate(parsedData, stream2, out flag4, out flag5, out flag6); flag = flag4; flag2 = flag5; flag3 = flag6; parsedData.AppName = data2.AppName; parsedData.AppPublisher = data2.AppPublisher; parsedData.SupportUrl = data2.SupportUrl; } if (flag) { if (GetPromptsAllowed(hostContextInternal, zoneNameFromDeploymentUrl, parsedData) == PromptsAllowed.None) { return(CreateApplicationTrust(activationContext, info, appTrustExtraInfo, false, false)); } return(BlockingPrompt(activationContext, parsedData, deploymentUrl, info, appTrustExtraInfo, zoneNameFromDeploymentUrl, AppRequestsBeyondDefaultTrust(info))); } if (flag3) { parsedData.AuthenticodedPublisher = null; parsedData.Certificate = null; } if ((!hostContextInternal.IgnorePersistedDecision && SearchPreviousTrustedVersion(activationContext, hostContextInternal.PreviousAppId, out list)) && ExistingTrustApplicable(info, list)) { if ((appTrustExtraInfo.RequestsShellIntegration && !SomePreviousTrustedVersionRequiresShellIntegration(list)) && !flag2) { switch (GetPromptsAllowed(hostContextInternal, zoneNameFromDeploymentUrl, parsedData)) { case PromptsAllowed.All: return(BasicInstallPrompt(activationContext, parsedData, deploymentUrl, hostContextInternal, info, appTrustExtraInfo, zoneNameFromDeploymentUrl, AppRequestsBeyondDefaultTrust(info))); case PromptsAllowed.BlockingOnly: return(BlockingPrompt(activationContext, parsedData, deploymentUrl, info, appTrustExtraInfo, zoneNameFromDeploymentUrl, AppRequestsBeyondDefaultTrust(info))); case PromptsAllowed.None: return(CreateApplicationTrust(activationContext, info, appTrustExtraInfo, false, false)); } } return(CreateApplicationTrust(activationContext, info, appTrustExtraInfo, true, hostContextInternal.Persist)); } bool permissionElevationRequired = AppRequestsBeyondDefaultTrust(info); if (!permissionElevationRequired || flag2) { if (flag2) { return(CreateApplicationTrust(activationContext, info, appTrustExtraInfo, true, hostContextInternal.Persist)); } switch (GetPromptsAllowed(hostContextInternal, zoneNameFromDeploymentUrl, parsedData)) { case PromptsAllowed.All: case PromptsAllowed.None: return(BasicInstallPrompt(activationContext, parsedData, deploymentUrl, hostContextInternal, info, appTrustExtraInfo, zoneNameFromDeploymentUrl, false)); case PromptsAllowed.BlockingOnly: return(BlockingPrompt(activationContext, parsedData, deploymentUrl, info, appTrustExtraInfo, zoneNameFromDeploymentUrl, permissionElevationRequired)); } } switch (GetPromptsAllowed(hostContextInternal, zoneNameFromDeploymentUrl, parsedData)) { case PromptsAllowed.BlockingOnly: return(BlockingPrompt(activationContext, parsedData, deploymentUrl, info, appTrustExtraInfo, zoneNameFromDeploymentUrl, true)); case PromptsAllowed.None: return(CreateApplicationTrust(activationContext, info, appTrustExtraInfo, false, false)); } return(HighRiskPrompt(activationContext, parsedData, deploymentUrl, hostContextInternal, info, appTrustExtraInfo, zoneNameFromDeploymentUrl)); }
private void LoadCMSFromStream(Stream stream) { System.Deployment.Internal.Isolation.Manifest.ICMS icms = null; int length; ManifestParseErrors callback = new ManifestParseErrors(); try { length = (int) stream.Length; this._rawXmlBytes = new byte[length]; if (stream.CanSeek) { stream.Seek(0L, SeekOrigin.Begin); } stream.Read(this._rawXmlBytes, 0, length); } catch (IOException exception) { throw new InvalidDeploymentException(ExceptionTypes.ManifestParse, Resources.GetString("Ex_ManifestReadException"), exception); } try { icms = (System.Deployment.Internal.Isolation.Manifest.ICMS) System.Deployment.Internal.Isolation.IsolationInterop.CreateCMSFromXml(this._rawXmlBytes, (uint) length, callback, ref System.Deployment.Internal.Isolation.IsolationInterop.IID_ICMS); } catch (COMException exception2) { StringBuilder builder = new StringBuilder(); foreach (ManifestParseErrors.ManifestParseError error in callback) { builder.AppendFormat(CultureInfo.CurrentUICulture, Resources.GetString("Ex_ManifestParseCMSErrorMessage"), new object[] { error.hr, error.StartLine, error.nStartColumn, error.ErrorStatusHostFile }); } throw new InvalidDeploymentException(ExceptionTypes.ManifestParse, string.Format(CultureInfo.CurrentUICulture, Resources.GetString("Ex_ManifestCMSParsingException"), new object[] { builder.ToString() }), exception2); } catch (SEHException exception3) { StringBuilder builder2 = new StringBuilder(); foreach (ManifestParseErrors.ManifestParseError error2 in callback) { builder2.AppendFormat(CultureInfo.CurrentUICulture, Resources.GetString("Ex_ManifestParseCMSErrorMessage"), new object[] { error2.hr, error2.StartLine, error2.nStartColumn, error2.ErrorStatusHostFile }); } throw new InvalidDeploymentException(ExceptionTypes.ManifestParse, string.Format(CultureInfo.CurrentUICulture, Resources.GetString("Ex_ManifestCMSParsingException"), new object[] { builder2.ToString() }), exception3); } catch (ArgumentException exception4) { StringBuilder builder3 = new StringBuilder(); foreach (ManifestParseErrors.ManifestParseError error3 in callback) { builder3.AppendFormat(CultureInfo.CurrentUICulture, Resources.GetString("Ex_ManifestParseCMSErrorMessage"), new object[] { error3.hr, error3.StartLine, error3.nStartColumn, error3.ErrorStatusHostFile }); } throw new InvalidDeploymentException(ExceptionTypes.ManifestParse, string.Format(CultureInfo.CurrentUICulture, Resources.GetString("Ex_ManifestCMSParsingException"), new object[] { builder3.ToString() }), exception4); } if (icms == null) { throw new InvalidDeploymentException(ExceptionTypes.ManifestParse, Resources.GetString("Ex_IsoNullCmsCreated")); } this._cms = icms; }