System.Net.DnsPermission 控制程式碼存取 DNS 服務的權限。預設本地應用程式擁有完整 DNS 存取權,網路應用程式則受限。
| 方法 | 說明 |
|---|---|
| Copy() | 建立目前權限實體的複本 |
| FromXml() | 從 XML 編碼重建權限實體 |
| Intersect() | 回傳目前權限與指定權限的交集 |
| IsSubsetOf() | 判斷目前權限是否為指定權限的子集 |
| IsUnrestricted() | 檢查是否為無限制權限 |
| ToXml() | 產生權限實體的 XML 編碼 |
| Union() | 回傳目前權限與指定權限的聯集 |
public override IPermission Copy()
回傳新的 DnsPermission 實體,為目前實體的完全複本。
public override SecurityElement ToXml()
回傳包含權限狀態資訊的 SecurityElement(XML 表示)。
public override IPermission Intersect(IPermission target)
參數 target 為另一 DnsPermission 實體。回傳交集權限;若交集為空則回傳 null。若兩者皆為無限制,回傳新的無限制實體。
介面包含按鈕:【原 DNS 設定】顯示目前 DNS 權限 XML 屬性;【交集權限】測試與無權限實體的交集。
private DnsPermission myPermission = new DnsPermission(PermissionState.Unrestricted);
private void btnShowOriginal_Click(object sender, EventArgs e) {
myPermission.Demand(); // 強制要求權限
PrintKeysAndValues(myPermission.ToXml().Attributes);
}
private void btnIntersect_Click(object sender, EventArgs e) {
try {
btnShowOriginal.PerformClick();
DnsPermission copy = (DnsPermission)myPermission.Copy();
DnsPermission none = new DnsPermission(PermissionState.None);
none.Demand();
DnsPermission intersect = (DnsPermission)copy.Intersect(none);
if (intersect != null)
PrintKeysAndValues(intersect.ToXml().Attributes);
else
MessageBox.Show("交集不存在");
} catch (Exception ex) { MessageBox.Show(ex.Message); }
}
private void PrintKeysAndValues(Hashtable attrs) {
IDictionaryEnumerator en = attrs.GetEnumerator();
while (en.MoveNext()) {
listBox1.Items.Add(en.Key);
listBox2.Items.Add(en.Value);
}
}
Demand() 會檢查呼叫堆疊上所有呼叫者是否具備該權限,不足則拋出 SecurityException。