C#教程:DnsPermission类使用实例|方法
DnsPermission类
该类控制对网络上域名系统(DNS)服务器的访问权限,默认权限允许所有的本地和网络应用程序访问DNS服务,网络应用程序没有DNS权限。DnsPermission类常用方法及说明如表1所示。

表1 DnsPermission类常用方法
下面对比较重要的方法进行详细介绍。
(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信息,获得当前权限实例是否是指定权限实例的子集,示例运行结果如图1和图2所示。

图1 DnsPermission主窗体

图2 提示窗体
单击【交集权限】按钮,用于判断当前权限实例与指定权限实例是否存在交集。【交集权限】按钮的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);
}
}
完整程序代码如下:
★ ★★★★FrmDns.cs窗体代码文件完整程序代码★★★★★
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Collections;
using System.Security.Permissions;
namespace _6_01
{
public partial class FrmDNS : Form
{
DnsPermission myPermission;
public FrmDNS()
{
InitializeComponent();
}
private void button6_Click(object sender, EventArgs e)
{
this.listBox1.Items.Clear();
this.listBox2.Items.Clear();
}
private void button7_Click(object sender, EventArgs e)
{