英語で読む

次の方法で共有


Evidence クラス

定義

セキュリティ ポリシーがアクセス許可を決定するときに使用する一連の情報を定義します。 このクラスは継承できません。

C#
public sealed class Evidence : System.Collections.ICollection
C#
[System.Serializable]
public sealed class Evidence : System.Collections.ICollection
C#
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class Evidence : System.Collections.ICollection
継承
Evidence
属性
実装

次のコード例では、ホスト証拠とアセンブリ証拠の両方を使用して新しい Evidence クラスを作成する方法を示します。

C#

using System;
using System.Collections;
using System.Security;
using System.Security.Policy;
using System.Security.Permissions;
using System.Globalization;

public class Evidence_Example
{
    public bool CreateEvidence()
    {
        bool retVal = true;

        try
        {
            // Create empty evidence using the default contructor.
            Evidence ev1 = new Evidence();
            Console.WriteLine("Created empty evidence with the default constructor.");

            // Constructor used to create null host evidence.
            Evidence ev2a = new Evidence(null);
            Console.WriteLine("Created an Evidence object with null host evidence.");

            // Constructor used to create host evidence.
            Url url = new Url("http://www.treyresearch.com");
            Console.WriteLine("Adding host evidence " + url.ToString());
            ev2a.AddHost(url);
            Evidence ev2b = new Evidence(ev2a);
            Console.WriteLine("Copy evidence into new evidence");
            IEnumerator enum1 = ev2b.GetHostEnumerator();
            enum1.MoveNext();
            Console.WriteLine(enum1.Current.ToString());
            
            // Constructor used to create both host and assembly evidence.
            Object [] oa1 = {};
            Site site = new Site("www.wideworldimporters.com");
            Object [] oa2 = { url, site };
            Evidence ev3a = new Evidence(oa1, oa2);
            enum1 = ev3a.GetHostEnumerator();
            IEnumerator enum2 = ev3a.GetAssemblyEnumerator();
            enum2.MoveNext();
            Object obj1 = enum2.Current;
            enum2.MoveNext();
            Console.WriteLine("URL = " + obj1.ToString() + "  Site = " + enum2.Current.ToString());
            
            // Constructor used to create null host and null assembly evidence.
            Evidence ev3b = new Evidence(null, null);
            Console.WriteLine("Create new evidence with null host and assembly evidence");
        }
        catch (Exception e)
        {
            Console.WriteLine("Fatal error: {0}", e.ToString());
            return false;
        }

        return retVal;
    }
    public Evidence DemonstrateEvidenceMembers()
    {
        Evidence myEvidence = new Evidence();
        string sPubKeyBlob =	"00240000048000009400000006020000" + 
            "00240000525341310004000001000100" + 
            "19390E945A40FB5730204A25FA5DC4DA" + 
            "B18688B412CB0EDB87A6EFC50E2796C9" + 
            "B41AD3040A7E46E4A02516C598678636" + 
            "44A0F74C39B7AB9C38C01F10AF4A5752" + 
            "BFBCDF7E6DD826676AD031E7BCE63393" + 
            "495BAD2CA4BE03B529A73C95E5B06BE7" + 
            "35CA0F622C63E8F54171BD73E4C8F193" + 
            "CB2664163719CA41F8159B8AC88F8CD3";
        Byte[] pubkey = HexsToArray(sPubKeyBlob);

        // Create a strong name.
        StrongName mSN = new StrongName(new StrongNamePublicKeyBlob(pubkey), "SN01", new Version("0.0.0.0"));

        // Create assembly and host evidence.
        Console.WriteLine("Adding assembly evidence.");
        myEvidence.AddAssembly("SN01");
        myEvidence.AddAssembly(new Version("0.0.0.0"));
        myEvidence.AddAssembly(mSN);
        Console.WriteLine("Count of evidence items = " + myEvidence.Count.ToString());
        Url url = new Url("http://www.treyresearch.com");
        Console.WriteLine("Adding host evidence " + url.ToString());
        myEvidence.AddHost(url);
        PrintEvidence(myEvidence).ToString();
        Console.WriteLine("Count of evidence items = " + myEvidence.Count.ToString());
        Console.WriteLine("\nCopy the evidence to an array using CopyTo, then display the array.");
        object[] evidenceArray = new object[myEvidence.Count];
        myEvidence.CopyTo(evidenceArray, 0);
        foreach (object obj in evidenceArray)
        {
            Console.WriteLine(obj.ToString());
        }
        Console.WriteLine("\nDisplay the contents of the properties.");
        Console.WriteLine("Locked is the only property normally used by code.");
        Console.WriteLine("IsReadOnly, IsSynchronized, and SyncRoot properties are not normally used.");
        Console.WriteLine("\nThe default value for the Locked property = " + myEvidence.Locked.ToString());
        
        Console.WriteLine("\nGet the hashcode for the evidence.");
        Console.WriteLine("HashCode = " + myEvidence.GetHashCode().ToString());
        Console.WriteLine("\nGet the type for the evidence.");
        Console.WriteLine("Type = " + myEvidence.GetType().ToString());
        Console.WriteLine("\nMerge new evidence with the current evidence.");
        Object [] oa1 = {};
        Site site = new Site("www.wideworldimporters.com");
        Object [] oa2 = { url, site };
        Evidence newEvidence = new Evidence(oa1, oa2);
        myEvidence.Merge(newEvidence);
        Console.WriteLine("Evidence count = " + PrintEvidence(myEvidence).ToString());
        Console.WriteLine("\nRemove URL evidence.");
        myEvidence.RemoveType(url.GetType());
        Console.WriteLine("Evidence count is now: " + myEvidence.Count.ToString());
        Console.WriteLine("\nMake a copy of the current evidence.");
        Evidence evidenceCopy = new Evidence(myEvidence);
        Console.WriteLine("Count of new evidence items = " + evidenceCopy.Count);
        Console.WriteLine("Does the copy equal the current evidence? " + myEvidence.Equals(evidenceCopy));
        Console.WriteLine("\nClear the current evidence.");
        myEvidence.Clear();
        Console.WriteLine("Count is now " + myEvidence.Count.ToString());
        return myEvidence;
    }
    public static int PrintEvidence(Evidence myEvidence)
    {
        int p = 0;
        Console.WriteLine("\nCurrent evidence = ");
        if (null == myEvidence) return 0;
        IEnumerator list = myEvidence.GetEnumerator();
        while (list.MoveNext())
        {
            Console.WriteLine(list.Current.ToString());
        }

        Console.WriteLine("\n");
        return p;
    }
    // Convert a hexidecimal string to an array.
    public static byte[] HexsToArray(string sHexString)
    {
        Byte[] array = new Byte[sHexString.Length/2];
        for (int i = 0; i < sHexString.Length; i += 2)
        {
            array[i / 2] = Byte.Parse(sHexString.Substring(i, 2), NumberStyles.HexNumber);
        }
        return array;
    }

    // Main method.
    public static void Main()
    {
        try
        {
            Evidence_Example EvidenceTest = new Evidence_Example();
            bool ret = EvidenceTest.CreateEvidence();
            if (ret)
            {
                Console.WriteLine("Evidence successfully created.");
            }
            else
            {
                Console.WriteLine("Evidence creation failed.");
            }
            
            EvidenceTest.DemonstrateEvidenceMembers();
        }
        catch(Exception e)
        {
    
            Console.WriteLine(e.ToString());
            Environment.ExitCode = 101;
        }
    }
}

注釈

証拠の一般的な形式には、署名やコードの発信元の場所が含まれますが、何でもかまいません。 セキュリティ ポリシーによって認識される任意の種類のオブジェクトは、証拠を表します。

セキュリティ ポリシーはコード グループで構成されます。特定のアセンブリ (セキュリティアクセス許可を付与するための基本的なコード単位) は、コード グループのメンバーシップ条件を満たす場合、コード グループのメンバーです。 証拠は、アセンブリが属するコード グループを決定するためにメンバーシップ条件が使用するポリシーへの入力のセットです。

この Evidence クラスは、証拠を表すオブジェクトのセットを保持するコレクション (参照 ICollection) です。 このクラスは、証拠のソースに対応する 2 つのセット (ホスト証拠とアセンブリ証拠) を保持します。

ポリシーは、コードのアクセス許可を評価するときに、2 つの異なるソースから証拠を取得できます。

  • Host evidence はホストによって提供され、アクセス許可が付与 ControlEvidence されているホストからのみ提供できます。 通常、これはアセンブリのコードとデジタル署名の起源を示す証拠です。 起源に関する証拠には、通常、証拠がSiteZone含まれますUrl。 署名は、ソフトウェア発行元 (AuthentiCode X.509v3 署名) と厳密な名前 ID を参照します。 両方の種類のデジタル署名ベースの ID がアセンブリに組み込まれていますが、ホストによって検証され、ポリシーに渡される必要があります。読み込まれると、セキュリティ システムによって署名が検証されます。 その後、適切な証拠が作成され、対応する署名が有効な場合にのみポリシーに渡されます。

  • Assembly evidence はアセンブリ自体の一部です。 開発者または管理者は、カスタム証拠をアセンブリに添付して、ポリシーの証拠のセットを拡張できます。 アセンブリの証拠は、アセンブリの生成時にのみ追加できます。これは、アセンブリが署名される前に発生します。 セキュリティ システムの既定のポリシーでは、アセンブリによって提供される証拠は無視されますが、ポリシーを拡張して受け入れることもできます。

コンストラクター

Evidence()

Evidence クラスの新しい空のインスタンスを初期化します。

Evidence(Evidence)

既存のインスタンスの簡易コピーから Evidence クラスの新しいインスタンスを初期化します。

Evidence(EvidenceBase[], EvidenceBase[])

ホストが提供する証拠とアセンブリが提供する証拠から成る複数の証拠セットから Evidence クラスの新しいインスタンスを初期化します。

Evidence(Object[], Object[])
互換性のために残されています。
互換性のために残されています。
互換性のために残されています。

ホストが提供する証拠とアセンブリが提供する証拠から成る複数の証拠セットから Evidence クラスの新しいインスタンスを初期化します。

プロパティ

Count
互換性のために残されています。
互換性のために残されています。
互換性のために残されています。

証拠セット内の証拠オブジェクトの数を取得します。

IsReadOnly

証拠セットが読み取り専用かどうかを示す値を取得します。

IsSynchronized

証拠セットがスレッド セーフかどうかを示す値を取得します。

Locked

証拠がロックされているかどうかを示す値を取得または設定します。

SyncRoot

同期ルートを取得します。

メソッド

AddAssembly(Object)
互換性のために残されています。
互換性のために残されています。
互換性のために残されています。

アセンブリによって提供される特定の証拠を証拠セットに追加します。

AddAssemblyEvidence<T>(T)

指定された型の証拠オブジェクトを、アセンブリによって提供される証拠リストに追加します。

AddHost(Object)
互換性のために残されています。
互換性のために残されています。
互換性のために残されています。

ホストによって提供される特定の証拠を証拠セットに追加します。

AddHostEvidence<T>(T)

指定された型のホスト証拠をホスト証拠コレクションに追加します。

Clear()

ホストおよびアセンブリ証拠を証拠セットから削除します。

Clone()

この証拠オブジェクトのコピーを返します。

CopyTo(Array, Int32)
互換性のために残されています。
互換性のために残されています。
互換性のために残されています。

Array に証拠オブジェクトをコピーします。

Equals(Object)

指定した Evidence オブジェクトが、現在の Evidence と等しいかどうかを判断します。

Equals(Object)

指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。

(継承元 Object)
GetAssemblyEnumerator()

アセンブリによって提供される証拠を列挙します。

GetAssemblyEvidence<T>()

指定した型のアセンブリ証拠をコレクションから取得します。

GetEnumerator()
互換性のために残されています。
互換性のために残されています。
互換性のために残されています。

ホストが提供する証拠とアセンブリが提供する証拠の両方を含め、証拠セット内のすべての証拠を列挙します。

GetHashCode()

ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適している、Evidence オブジェクトのハッシュ コードを取得します。

GetHashCode()

既定のハッシュ関数として機能します。

(継承元 Object)
GetHostEnumerator()

ホストによって提供される証拠を列挙します。

GetHostEvidence<T>()

指定した型のホスト証拠をコレクションから取得します。

GetType()

現在のインスタンスの Type を取得します。

(継承元 Object)
MemberwiseClone()

現在の Object の簡易コピーを作成します。

(継承元 Object)
Merge(Evidence)

指定した証拠セットを現在の証拠セットにマージします。

RemoveType(Type)

特定の型の証拠をホストおよびアセンブリ列挙から削除します。

ToString()

現在のオブジェクトを表す文字列を返します。

(継承元 Object)

拡張メソッド

Cast<TResult>(IEnumerable)

IEnumerable の要素を、指定した型にキャストします。

OfType<TResult>(IEnumerable)

指定された型に基づいて IEnumerable の要素をフィルター処理します。

AsParallel(IEnumerable)

クエリの並列化を有効にします。

AsQueryable(IEnumerable)

IEnumerableIQueryable に変換します。

適用対象

製品 バージョン
.NET 6, 7
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
Windows Desktop 3.0, 3.1, 5