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) ,其中包含一組代表辨識項的物件。 這個類別會保存兩組對應至辨識項的來源:主機辨識項和元件辨識項。

原則可以在評估程式碼的許可權時,從兩個不同的來源取得辨識項。

  • Host evidence 由主機提供,而且只能由已授與許可權的 ControlEvidence 主機提供。 一般而言,這是元件上程式碼來源和數位簽章的辨識項。 關於來源的辨識項通常包括 UrlSiteZone 辨識項。 簽章是指軟體發行者 (AuthentiCode X.509v3 簽章) 和強式名稱識別。 這兩種數位簽章型身分識別都內建于元件中,但必須由主機驗證並傳遞至原則;載入時,安全性系統會驗證簽章。 系統接著會建立適當的辨識項,並且只有在對應的簽章有效時,才會將其傳遞至原則。

  • Assembly evidence 是元件本身的一部分。 開發人員或系統管理員可以將自訂辨識項附加至元件,以擴充原則的辨識項集合。 元件辨識項只能在元件產生時加入,這會在簽署元件之前發生。 安全性系統的預設原則會忽略元件提供的辨識項,但可以擴充原則以接受它。

建構函式

Evidence()

初始化 Evidence 類別的新的空執行個體。

Evidence(Evidence)

從現有物件的淺層複本 (Shallow Copy) 初始化 Evidence 類別的新執行個體。

Evidence(EvidenceBase[], EvidenceBase[])

從多重主應用程式和組件辨識項集合初始化 Evidence 類別的新執行個體。

Evidence(Object[], Object[])
已淘汰.
已淘汰.
已淘汰.

從多重主應用程式和組件辨識項集合初始化 Evidence 類別的新執行個體。

屬性

Count
已淘汰.
已淘汰.
已淘汰.

取得辨識項集合 (Evidence Set) 中的辨識項物件數。

IsReadOnly

取得值,指出辨識項集合是否為唯讀。

IsSynchronized

取得值,指出辨識項集合是否為安全執行緒 (Thread-Safe)。

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)

IEnumerable 轉換成 IQueryable

適用於

產品 版本
.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