該類控制對網絡上域名系統(DNS)服務器的訪問權限,默認權限允許所有的本地和網絡應用程序訪問DNS服務,網絡應用程序沒有DNS權限。DnsPermission類常用方法及說明如表所示。
表 DnsPermission類常用方法
名稱 說明 Copy 創建當前權限實例的相同副本 FromXml 以XML編碼重新構造DnsPermission實例 Intersect 創建一個是當前權限實例與指定權限實例的交集的權限實例 IsSubsetOf 確定當前權限實例是否是指定權限實例的子集 IsUnrestricted 檢查對象的整體權限狀態 ToXml 創建DnsPermission實例及其當前狀態的XML編碼 Union 創建一個是當前權限實例與指定權限實例的並集的權限實例下面對比較重要的方法進行詳細介紹。
(1)Copy方法
創建當前權限實例的相同副本。
語法:
public override IPermission Copy ()
返回值:DnsPermission類的新實例,是當前實例的相同副本。
(2)ToXml方法
創建DnsPermission實例及其當前狀態的XML編碼。
語法:
public override SecurityElement ToXml ()
返回值:SecurityElement實例,包含安全對象的XML編碼表示形式,包括狀態信息。
(3)Intersect方法
創建一個是當前權限實例與指定權限實例的交集的權限實例。
public override IPermission Intersect
(
IPermission target
)
參數:
target:要與當前實例求交的DnsPermission實例。
返回值:一個DnsPermission實例,表示當前DnsPermission實例與指定DnsPermission實例的交集;如果交集為空,則為空引用(在Visual Basic中為Nothing)。如果當前實例和target都是不受限制的,則該方法將返回一個不受限制的、新的DnsPermission實例;否則返回空引用。
示例 DnsPermission類的方法應用舉例
本示例實現的是設置與獲取本機的DNS信息,獲得當前權限實例是否是指定權限實例的子集。
單擊【交集權限】按鈕,用於判斷當前權限實例與指定權限實例是否存在交集。【交集權限】按鈕的Click事件代碼如下:
private void button8_Click(object sender, EventArgs e)
{
try
{
this.button6.PerformClick();
DnsPermission myPermissionCopy = (DnsPermission)myPermission.Copy();
DnsPermission dsNew = new DnsPermission(PermissionState.None);
dsNew.Demand();
DnsPermission permission =
(DnsPermission)myPermissionCopy.Intersect(dsNew);
if (permission != null)
PrintKeysAndValues(permission.ToXml().Attributes);
else
MessageBox.Show("當前權限實例與指定權限實例的交集的權限不存在");
}
catch (Exception ey) { MessageBox.Show(ey.Message); }
}
單擊【原DNS設置】按鈕,調用UseDns與PrintKeysAndValues顯示DNS信息列表。【原DNS設置】按鈕的Click事件代碼如下:
private void button7_Click(object sender, EventArgs e)
{
UseDns();
}
UseDns方法用於創建DnsPermission實例及其當前狀態的XML編碼,其實現代碼如下:
public void UseDns()
{
this.button6.PerformClick();
myPermission.Demand();
PrintKeysAndValues(myPermission.ToXml().Attributes);
}
PrintKeysAndValues方法以“名稱/值”對形式顯示XML元素屬性,其實現代碼如下:
private void PrintKeysAndValues(Hashtable myHashtable)
{
IDictionaryEnumerator myEnumerator = myHashtable.GetEnumerator();
while (myEnumerator.MoveNext())
{
this.listBox1.Items.Add(myEnumerator.Key);
this.listBox2.Items.Add( myEnumerator.Value);
}
}