private static unsafe XmlDocument GetManifestXml(ActivationContext application, ManifestKinds manifest) { IStream applicationComponentManifest = null; if (manifest == ManifestKinds.Application) { applicationComponentManifest = InternalActivationContextHelper.GetApplicationComponentManifest(application) as IStream; } else if (manifest == ManifestKinds.Deployment) { applicationComponentManifest = InternalActivationContextHelper.GetDeploymentComponentManifest(application) as IStream; } using (MemoryStream stream2 = new MemoryStream()) { byte[] pv = new byte[0x1000]; int count = 0; do { applicationComponentManifest.Read(pv, pv.Length, new IntPtr((void *)&count)); stream2.Write(pv, 0, count); }while (count == pv.Length); stream2.Position = 0L; XmlDocument document = new XmlDocument { PreserveWhitespace = true }; document.Load(stream2); return(document); } }
private static XmlDocument GetManifestXml(ActivationContext application, ManifestKinds manifest) { Debug.Assert(application != null, "application != null"); IStream manifestStream = null; if (manifest == ManifestKinds.Application) { manifestStream = InternalActivationContextHelper.GetApplicationComponentManifest(application) as IStream; } else if (manifest == ManifestKinds.Deployment) { manifestStream = InternalActivationContextHelper.GetDeploymentComponentManifest(application) as IStream; } Debug.Assert(manifestStream != null, "Cannot get stream for manifest"); using (MemoryStream manifestContent = new MemoryStream()) { byte[] buffer = new byte[4096]; int bytesRead = 0; do { unsafe { manifestStream.Read(buffer, buffer.Length, new IntPtr(&bytesRead)); } manifestContent.Write(buffer, 0, bytesRead); }while (bytesRead == buffer.Length); manifestContent.Position = 0; XmlDocument manifestXml = new XmlDocument(); manifestXml.PreserveWhitespace = true; manifestXml.Load(manifestContent); return(manifestXml); } }
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)); }