Пример #1
0
        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);
            }
        }
Пример #2
0
        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);
            }
        }
        private bool IsFirstRunOfClickOnceApp()
        {
            ActivationContext activationContext = AppDomain.CurrentDomain.ActivationContext;

            return(IsClickOnceDeployed(AppDomain.CurrentDomain) && InternalActivationContextHelper.IsFirstRun(activationContext));
        }
        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));
        }