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;
 }