<Type Name="IPermission" FullName="System.Security.IPermission" FullNameSP="System_Security_IPermission" Maintainer="ecma">
  <TypeSignature Language="ILASM" Value=".class interface public abstract IPermission" />
  <TypeSignature Language="C#" Value="public interface IPermission : System.Security.ISecurityEncodable" />
  <MemberOfLibrary>BCL</MemberOfLibrary>
  <AssemblyInfo>
    <AssemblyName>mscorlib</AssemblyName>
    <AssemblyPublicKey>[00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00 ]</AssemblyPublicKey>
    <AssemblyVersion>1.0.5000.0</AssemblyVersion>
    <AssemblyVersion>2.0.0.0</AssemblyVersion>
    <AssemblyVersion>4.0.0.0</AssemblyVersion>
  </AssemblyInfo>
  <Docs>
    <summary>
      <para> Defines methods implemented by permission types. </para>
    </summary>
    <remarks>
      <block subset="none" type="note">
        <para>Permission types describe a level of access to secured
 operations or resources, such as files or environment variables. Permission instances do not confer the right to
 access a resource or perform an operation; the security system determines whether or not requested permissions
 are granted. Permissions are used by both application code and the security system in the
 following ways:</para>
        <list type="bullet">
          <item>
            <term>
 
 Code requests the permissions it needs in order to
 run.</term>
          </item>
          <item>
            <term>
 
 Permissions are granted by the security system.</term>
          </item>
          <item>
            <term>
 
 Code demands that calling code has a permission.</term>
          </item>
          <item>
            <term>
 
 Code
 
 alters the default behavior
 
 of the security system by asserting or denying
 permissions.</term>
          </item>
        </list>
      </block>
    </remarks>
  </Docs>
  <Members>
    <Member MemberName="Copy">
      <MemberSignature Language="ILASM" Value=".method public hidebysig virtual abstract class System.Security.IPermission Copy()" />
      <MemberSignature Language="C#" Value="public System.Security.IPermission Copy ();" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>System.Security.IPermission</ReturnType>
      </ReturnValue>
      <Parameters />
      <Docs>
        <summary>
          <para>Returns a <see cref="T:System.Security.IPermission" /> object of the same type and containing the same
 values as the current instance.</para>
        </summary>
        <returns>
          <para>A new <see cref="T:System.Security.IPermission" /> object of the same type and containing the same
 values as the current instance.</para>
        </returns>
        <remarks>
          <para>
            <block subset="none" type="behaviors">The object returned by
 this method is required to be a deep copy of the current instance; any objects
 referenced by the current instance are duplicated in the copy.</block>
          </para>
          <para>
            <block subset="none" type="overrides">Implement this
 method to provide the system with a means of duplicating permission objects.</block>
          </para>
          <para>
            <block subset="none" type="usage">Use
 this method to obtain a copy of the current instance that is identical to the current instance.</block>
          </para>
        </remarks>
      </Docs>
      <Excluded>0</Excluded>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5000.0</AssemblyVersion>
        <AssemblyVersion>2.0.0.0</AssemblyVersion>
        <AssemblyVersion>4.0.0.0</AssemblyVersion>
      </AssemblyInfo>
    </Member>
    <Member MemberName="Demand">
      <MemberSignature Language="ILASM" Value=".method public hidebysig virtual abstract void Demand()" />
      <MemberSignature Language="C#" Value="public void Demand ();" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>System.Void</ReturnType>
      </ReturnValue>
      <Parameters />
      <Docs>
        <summary>
          <para>Forces a <see cref="T:System.Security.SecurityException" /> if all callers do not have the permission 
 specified by the current instance.</para>
        </summary>
        <remarks>
          <para>The permission check for <see cref="M:System.Security.IPermission.Demand" /> begins with the immediate caller 
 of the code that calls this method and continues until all callers have been
 checked or a caller has been found that is not granted the demanded permission,
 in which case a <see cref="T:System.Security.SecurityException" /> exception is thrown. </para>
          <para>
            <block subset="none" type="behaviors">Notifies the
 system that a security check is required for all callers of the method that
 invokes <see cref="M:System.Security.IPermission.Demand" />. All callers are required to have the permissions
 described by the current instance. If one of the callers asserts the
 permissions and that caller has the permissions, the system is required to allow
 all callers that have not been checked to bypass the security check. If the
 security check fails, a <see cref="T:System.Security.SecurityException" /> is thrown by the system.</block>
          </para>
          <para>
            <block subset="none" type="usage">Use this method to
 ensure that callers that call the method containing a <see cref="M:System.Security.IPermission.Demand" />
 call have the
 permissions described by the current instance.</block>
          </para>
        </remarks>
        <exception cref="T:System.Security.SecurityException">
          <para> A caller does not have the permission specified by the current instance.</para>
        </exception>
      </Docs>
      <Excluded>0</Excluded>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5000.0</AssemblyVersion>
        <AssemblyVersion>2.0.0.0</AssemblyVersion>
        <AssemblyVersion>4.0.0.0</AssemblyVersion>
      </AssemblyInfo>
    </Member>
    <Member MemberName="Intersect">
      <MemberSignature Language="ILASM" Value=".method public hidebysig virtual abstract class System.Security.IPermission Intersect(class System.Security.IPermission target)" />
      <MemberSignature Language="C#" Value="public System.Security.IPermission Intersect (System.Security.IPermission target);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>System.Security.IPermission</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="target" Type="System.Security.IPermission" />
      </Parameters>
      <Docs>
        <param name="target">An object of the same type as the current instance to intersect with the current instance.</param>
        <summary>
          <para> Returns an
      object that is the intersection of the current instance and the
      specified <see cref="T:System.Security.IPermission" />
      object. </para>
        </summary>
        <returns>
          <para> A new <see cref="T:System.Security.IPermission" /> object that is the same type as
   the current instance and represents the intersection of the
   current instance and <paramref name="target" />. If the intersection is empty, or <paramref name="target" />
   is <see langword="null" />, returns <see langword="null" />.</para>
        </returns>
        <remarks>
          <para>The object returns by <see cref="M:System.Security.IPermission.Intersect(System.Security.IPermission)" /> is a permission that secures the resources and
   operations secured by two <see cref="T:System.Security.IPermission" />
   objects: a demand passes the
   intersection of two objects only if it passes both of the objects.</para>
          <block subset="none" type="behaviors">
            <para>If <paramref name="target" /> is not <see langword="null" /> and is not of the same type as
   the current instance, a <see cref="T:System.ArgumentException" /> exception is required to be thrown.</para>
            <para> The following statements are required to be true for all
   implementations of the <see cref="M:System.Security.IPermission.Intersect(System.Security.IPermission)" /> method. <paramref name="X" /> and
<paramref name="Y" />
represent non-null <see cref="T:System.Security.IPermission" /> object
references.</para>
            <list type="bullet">
              <item>
                <term>
                  <paramref name="X" />.Intersect(<paramref name="X" />) returns a value
      equal to <paramref name="X" />.</term>
              </item>
              <item>
                <term>
                  <paramref name="X" />.Intersect(<paramref name="Y" />) returns the same
      value as <paramref name="Y" />.Intersect(<paramref name="X" />).</term>
              </item>
              <item>
                <term>
                  <paramref name="X" />.Intersect(<see langword="null" />) returns
   <see langword="null" />
   .</term>
              </item>
            </list>
          </block>
          <para>
            <block subset="none" type="usage">Use this method to obtain the set of permissions that are
   described both by the current instance and the specified
   object.</block>
          </para>
        </remarks>
        <exception cref="T:System.ArgumentException">
          <paramref name="target" /> is not <see langword="null" /> and is not of the same type as the current instance.</exception>
      </Docs>
      <Excluded>0</Excluded>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5000.0</AssemblyVersion>
        <AssemblyVersion>2.0.0.0</AssemblyVersion>
        <AssemblyVersion>4.0.0.0</AssemblyVersion>
      </AssemblyInfo>
    </Member>
    <Member MemberName="IsSubsetOf">
      <MemberSignature Language="ILASM" Value=".method public hidebysig virtual abstract bool IsSubsetOf(class System.Security.IPermission target)" />
      <MemberSignature Language="C#" Value="public bool IsSubsetOf (System.Security.IPermission target);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>System.Boolean</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="target" Type="System.Security.IPermission" />
      </Parameters>
      <Docs>
        <param name="target">A <see cref="T:System.Security.IPermission" /> object of the same type as the current instance that is to be tested for the subset relationship.</param>
        <summary>
          <para>Determines whether the current instance is a subset of
      the specified object.</para>
        </summary>
        <returns>
          <para>
            <see langword="true" /> if the current instance is a subset of <paramref name="target" /> ;
   otherwise,<see langword=" false" />. If the current instance is unrestricted, and
<paramref name="target" /> is not, returns <see langword="false" />. If <paramref name="target" /> is 
   unrestricted, returns <see langword="true" />. If target is
<see langword="null" /> and the current instance does not secure any resources or 
   operations, returns <see langword="true" />. If target is <see langword="null" />
   and the current instance secures one or more resources or operations, returns
<see langword="false" /> 
.</para>
        </returns>
        <remarks>
          <para>The current instance is a subset of <paramref name="target" /> if the current instance
   specifies a set of accesses to resources or operations that is wholly contained
   by <paramref name="target" />. For example, a permission that represents read access to a
   file is a subset of a permission that represents read and write access to the
   file. </para>
          <block subset="none" type="behaviors">
            <para> If <paramref name="target" /> is not
<see langword="null" /> and is not of the same type
   as the current instance, a <see cref="T:System.ArgumentException" /> exception is
   required to be thrown.</para>
            <para> The following statements are required to be true for all
   implementations of the <see cref="M:System.Security.IPermission.IsSubsetOf(System.Security.IPermission)" /> method. <paramref name="X" />, <paramref name="Y" />, and
<paramref name="Z" /> 
represent non-null <see cref="T:System.Security.IPermission" /> objects.</para>
            <list type="bullet">
              <item>
                <term>
                  <paramref name="X" />.IsSubsetOf(<paramref name="X" />
   ) returns <see langword="true" />.</term>
              </item>
              <item>
                <term>
                  <paramref name="X" />.IsSubsetOf(<paramref name="Y" />) returns the same
      value as <paramref name="Y" />.IsSubsetOf(<paramref name="X" />) if and only if <paramref name="X" /> and
   <paramref name="Y" /> 
   represent the same set of permissions.</term>
              </item>
              <item>
                <term>
      
      if <paramref name="X" />.IsSubsetOf(<paramref name="Y" />) and
   <paramref name="Y" />.IsSubsetOf(<paramref name="Z" />
   ) both return
<see langword="true" />, <paramref name="X" />.IsSubsetOf(<paramref name="Z" /> ) returns
<see langword="true" />.</term>
              </item>
            </list>
          </block>
          <para>
            <block subset="none" type="usage">Use this method to determine if the
   permissions described by the current instance are also described by the
   specified object.</block>
          </para>
        </remarks>
        <exception cref="T:System.ArgumentException">
          <paramref name="target" /> is not <see langword="null" /> and is not of the same type as the current instance. </exception>
      </Docs>
      <Excluded>0</Excluded>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5000.0</AssemblyVersion>
        <AssemblyVersion>2.0.0.0</AssemblyVersion>
        <AssemblyVersion>4.0.0.0</AssemblyVersion>
      </AssemblyInfo>
    </Member>
    <Member MemberName="Union">
      <MemberSignature Language="ILASM" Value=".method public hidebysig virtual abstract class System.Security.IPermission Union(class System.Security.IPermission target)" />
      <MemberSignature Language="C#" Value="public System.Security.IPermission Union (System.Security.IPermission target);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>System.Security.IPermission</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="target" Type="System.Security.IPermission" />
      </Parameters>
      <Docs>
        <param name="target">A <see cref="T:System.Security.IPermission" /> object of the same type as the current instance to combine with the current instance. </param>
        <summary>
          <para> Returns an object that is the union of the
 current instance and the specified
 object.</para>
        </summary>
        <returns>
          <para> A new <see cref="T:System.Security.IPermission" /> object of the same type as the current
 instance that represents the
 union of the current instance and <paramref name="target" />.</para>
        </returns>
        <remarks>
          <para>The object returned by <see cref="M:System.Security.IPermission.Union(System.Security.IPermission)" /> is a permission that represents the 
 permissions described by the current instance and those described by
<paramref name="target" /> . Any demand that passes either the current instance or 
<paramref name="target" /> is required to pass the union of the two.</para>
          <block subset="none" type="behaviors">
            <para>If <paramref name="target" /> is not <see langword="null" /> and is not of the same type as 
 the current instance, a <see cref="T:System.ArgumentException" /> exception is required to be thrown.</para>
            <para> The following statements are required to be true for all
 implementations of the <see cref="M:System.Security.IPermission.Union(System.Security.IPermission)" /> method. <paramref name="X" /> and <paramref name="Y" />
 represent non-null <see cref="T:System.Security.IPermission" /> objects.</para>
            <list type="bullet">
              <item>
                <term>
                  <paramref name="X" />.Union(<paramref name="X" />) returns an object that
 is value-equal to <paramref name="X" />.</term>
              </item>
              <item>
                <term>
                  <paramref name="X" />.Union(<paramref name="Y" />) returns an object that
 is value-equal to the object returned by <paramref name="Y" />.Union(<paramref name="X" />).</term>
              </item>
              <item>
                <term>
                  <paramref name="X" />.Union(<see langword="null" />) returns an
 object that is value-equal to <paramref name="X" />
 
 .</term>
              </item>
            </list>
          </block>
          <para>
            <block subset="none" type="usage">Use this
 method to obtain a <see cref="T:System.Security.IPermission" /> object of the same type as the current instance
 and <paramref name="target" /> that describes the permissions described by the current
 instance and those described by <paramref name="target" />.</block>
          </para>
        </remarks>
        <exception cref="T:System.ArgumentException">
          <paramref name="target" /> is not <see langword="null" /> and is not of the same type as the current instance. </exception>
      </Docs>
      <Excluded>0</Excluded>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5000.0</AssemblyVersion>
        <AssemblyVersion>2.0.0.0</AssemblyVersion>
        <AssemblyVersion>4.0.0.0</AssemblyVersion>
      </AssemblyInfo>
    </Member>
  </Members>
  <TypeExcluded>0</TypeExcluded>
  <Interfaces>
    <Interface>
      <InterfaceName>System.Security.ISecurityEncodable</InterfaceName>
    </Interface>
  </Interfaces>
  <Attributes>
    <Attribute>
      <AttributeName>System.Runtime.InteropServices.ComVisible(true)</AttributeName>
    </Attribute>
  </Attributes>
</Type>
