Beispiel #1
0
        // Token: 0x0600034C RID: 844 RVA: 0x0001886C File Offset: 0x00016A6C
        internal static int ReadWithRetry(Stream s, byte[] buffer, int offset, int count, string FileName)
        {
            int  result = 0;
            bool flag   = false;
            int  num    = 0;

            do
            {
                try
                {
                    result = s.Read(buffer, offset, count);
                    flag   = true;
                }
                catch (IOException ex)
                {
                    SecurityPermission securityPermission = new SecurityPermission(SecurityPermissionFlag.UnmanagedCode);
                    if (!securityPermission.IsUnrestricted())
                    {
                        throw;
                    }
                    uint num2 = SharedUtilities._HRForException(ex);
                    if (num2 != 2147942433u)
                    {
                        throw new IOException(string.Format("Cannot read file {0}", FileName), ex);
                    }
                    num++;
                    if (num > 10)
                    {
                        throw new IOException(string.Format("Cannot read file {0}, at offset 0x{1:X8} after 10 retries", FileName, offset), ex);
                    }
                    Thread.Sleep(250 + num * 550);
                }
            }while (!flag);
            return(result);
        }
Beispiel #2
0
        /// <summary>
        /// Workitem 7889: handle ERROR_LOCK_VIOLATION during read
        /// </summary>
        /// <remarks>
        /// This could be gracefully handled with an extension attribute, but
        /// This assembly is built for .NET 2.0, so I cannot use them.
        /// </remarks>
        internal static int ReadWithRetry(System.IO.Stream s, byte[] buffer, int offset, int count, string FileName)
        {
            int  n    = 0;
            bool done = false;

#if !NETCF && !SILVERLIGHT
            int retries = 0;
#endif
            do
            {
                try
                {
                    n    = s.Read(buffer, offset, count);
                    done = true;
                }
#if NETCF || SILVERLIGHT
                catch (System.IO.IOException)
                {
                    throw;
                }
#else
                catch (System.IO.IOException ioexc1)
                {
                    // Check if we can call GetHRForException,
                    // which makes unmanaged code calls.
                    var p = new SecurityPermission(SecurityPermissionFlag.UnmanagedCode);
                    if (p.IsUnrestricted())
                    {
                        uint hresult = _HRForException(ioexc1);
                        if (hresult != 0x80070021)  // ERROR_LOCK_VIOLATION
                        {
                            throw new System.IO.IOException(String.Format("Cannot read file {0}", FileName), ioexc1);
                        }
                        retries++;
                        if (retries > 10)
                        {
                            throw new System.IO.IOException(String.Format("Cannot read file {0}, at offset 0x{1:X8} after 10 retries", FileName, offset), ioexc1);
                        }

                        // max time waited on last retry = 250 + 10*550 = 5.75s
                        // aggregate time waited after 10 retries: 250 + 55*550 = 30.5s
                        System.Threading.Thread.Sleep(250 + retries * 550);
                    }
                    else
                    {
                        // The permission.Demand() failed. Therefore, we cannot call
                        // GetHRForException, and cannot do the subtle handling of
                        // ERROR_LOCK_VIOLATION.  Just bail.
                        throw;
                    }
                }
#endif
            }while (!done);

            return(n);
        }
        public void PermissionState_None()
        {
            PermissionState    ps = PermissionState.None;
            SecurityPermission sp = new SecurityPermission(ps);

            Assert.AreEqual(SecurityPermissionFlag.NoFlags, sp.Flags, "Flags");
            Assert.IsFalse(sp.IsUnrestricted(), "IsUnrestricted");

            SecurityElement se = sp.ToXml();

            // only class and version are present
            Assert.AreEqual("NoFlags", se.Attribute("Flags"), "Xml-Flags");
            Assert.IsNull(se.Children, "Xml-Children");

            SecurityPermission copy = (SecurityPermission)sp.Copy();

            Assert.IsFalse(Object.ReferenceEquals(sp, copy), "ReferenceEquals");
            Assert.AreEqual(sp.Flags, copy.Flags, "Flags");
            Assert.AreEqual(sp.IsUnrestricted(), copy.IsUnrestricted(), "IsUnrestricted ()");
        }
        public override IPermission Intersect(IPermission target)
        {
            SecurityPermission sp = Cast(target);

            if (sp == null)
            {
                return(null);
            }
            if (IsEmpty() || sp.IsEmpty())
            {
                return(null);
            }

            if (this.IsUnrestricted() && sp.IsUnrestricted())
            {
                return(new SecurityPermission(PermissionState.Unrestricted));
            }
            if (this.IsUnrestricted())
            {
                return(sp.Copy());
            }
            if (sp.IsUnrestricted())
            {
                return(this.Copy());
            }

            SecurityPermissionFlag f = flags & sp.flags;

            if (f == SecurityPermissionFlag.NoFlags)
            {
                return(null);
            }
            else
            {
                return(new SecurityPermission(f));
            }
        }
Beispiel #5
0
        public static void SecurityPermissionCallMethods()
        {
            SecurityPermission sp  = new SecurityPermission(new Permissions.PermissionState());
            SecurityPermission sp2 = new SecurityPermission(new Permissions.SecurityPermissionFlag());
            IPermission        ip  = sp.Copy();
            IPermission        ip2 = sp.Intersect(ip);
            bool testbool          = sp.IsSubsetOf(ip);

            testbool = sp.IsUnrestricted();
            ip2      = sp.Union(ip);
            SecurityElement se = new SecurityElement("");

            sp.FromXml(se);
            se = sp.ToXml();
        }
        public override IPermission Union(IPermission target)
        {
            SecurityPermission sp = Cast(target);

            if (sp == null)
            {
                return(this.Copy());
            }

            if (this.IsUnrestricted() || sp.IsUnrestricted())
            {
                return(new SecurityPermission(PermissionState.Unrestricted));
            }

            return(new SecurityPermission(flags | sp.flags));
        }
        public override bool IsSubsetOf(IPermission target)
        {
            SecurityPermission sp = Cast(target);

            if (sp == null)
            {
                return(IsEmpty());
            }

            if (sp.IsUnrestricted())
            {
                return(true);
            }
            if (this.IsUnrestricted())
            {
                return(false);
            }

            return((flags & ~sp.flags) == 0);
        }
        public void Union_Unrestricted()
        {
            // Union with unrestricted is unrestricted
            SecurityPermission sp1 = new SecurityPermission(PermissionState.Unrestricted);
            SecurityPermission sp2 = new SecurityPermission(PermissionState.None);

            // a. source (this) is unrestricted
            foreach (SecurityPermissionFlag spf in AllFlags)
            {
                sp2.Flags = spf;
                SecurityPermission union = (SecurityPermission)sp1.Union(sp2);
                Assert.IsTrue(union.IsUnrestricted(), "target " + spf.ToString());
            }
            // b. destination (target) is unrestricted
            foreach (SecurityPermissionFlag spf in AllFlags)
            {
                sp2.Flags = spf;
                SecurityPermission union = (SecurityPermission)sp2.Union(sp1);
                Assert.IsTrue(union.IsUnrestricted(), "source " + spf.ToString());
            }
        }
Beispiel #9
0
 public static void SecurityPermissionCallMethods()
 {
     SecurityPermission sp = new SecurityPermission(new Permissions.PermissionState());
     SecurityPermission sp2 = new SecurityPermission(new Permissions.SecurityPermissionFlag());
     IPermission ip = sp.Copy();
     IPermission ip2 = sp.Intersect(ip);
     bool testbool = sp.IsSubsetOf(ip);
     testbool = sp.IsUnrestricted();
     ip2 = sp.Union(ip);
     SecurityElement se = new SecurityElement("");
     sp.FromXml(se);
     se = sp.ToXml();
 }
Beispiel #10
0
        }// InsertPropSheetPageControls

        protected override void PutValuesinPage()
        {
            SecurityPermission perm = (SecurityPermission)m_perm;

            if (perm.IsUnrestricted())
            {
                m_radUnrestricted.Checked = true;
                m_ucOptions.Enabled       = false;
            }
            else
            {
                m_radGrantFollowingPermission.Checked = true;

                SecurityPermissionFlag spf = perm.Flags;

                if ((spf & SecurityPermissionFlag.Assertion) > 0)
                {
                    m_chkAssertPermissions.Checked = true;
                }
                if ((spf & SecurityPermissionFlag.ControlDomainPolicy) > 0)
                {
                    m_chkDomainPolicyControl.Checked = true;
                }
                if ((spf & SecurityPermissionFlag.ControlEvidence) > 0)
                {
                    m_chkEvidenceControl.Checked = true;
                }
                if ((spf & SecurityPermissionFlag.ControlPolicy) > 0)
                {
                    m_chkPolicyControl.Checked = true;
                }
                if ((spf & SecurityPermissionFlag.ControlPrincipal) > 0)
                {
                    m_chkPrincipalControl.Checked = true;
                }
                if ((spf & SecurityPermissionFlag.ControlThread) > 0)
                {
                    m_chkThreadControl.Checked = true;
                }
                if ((spf & SecurityPermissionFlag.Execution) > 0)
                {
                    m_chkCodeExecution.Checked = true;
                }
                if ((spf & SecurityPermissionFlag.SerializationFormatter) > 0)
                {
                    m_chkSerializationFormatter.Checked = true;
                }
                if ((spf & SecurityPermissionFlag.SkipVerification) > 0)
                {
                    m_chkSkipVerification.Checked = true;
                }
                if ((spf & SecurityPermissionFlag.UnmanagedCode) > 0)
                {
                    m_chkUnmanagedCode.Checked = true;
                }
                if ((spf & SecurityPermissionFlag.Infrastructure) > 0)
                {
                    m_chkExtendInfra.Checked = true;
                }
                if ((spf & SecurityPermissionFlag.RemotingConfiguration) > 0)
                {
                    m_chkRemotingConfig.Checked = true;
                }
                if ((spf & SecurityPermissionFlag.ControlAppDomain) > 0)
                {
                    m_chkAppDomainControl.Checked = true;
                }
            }
        }// PutValuesinPage