CLR寄宿 下 託管宿主

2022-02-04 21:29:23 字數 1655 閱讀 2180

通過託管**來管理

clr的

方式,稱為託管宿主。想實現託管宿主很簡單,只要實現

類就可以了。

類的定義如**清單

1-1所示。

**清單

類定義[comvisibleattribute(true)]

[securitypermissionattribute(securityaction.linkdemand, flags = securitypermissionflag.infrastructure)]

[securitypermissionattribute(securityaction.inheritancedemand, flags = securitypermissionflag.infrastructure)]

public

要實現自己的託管宿主需要實現乙個

類的子類,重寫其中的虛方法。**清單1-

2自定義

類來實現簡單的託管宿主。

**清單1-

2自定義

類namespace

託管宿主

public override hostsecuritymanager

hostsecuritymanager

}public override assemblyentryassembly}}

}現在通過**清單

3-14

建立的宿主應用程式能夠參與新應用程式域的建立。

在**中宣告了兩個許可權,重寫了兩個屬性,在實際的編碼中可以按照這樣的簡單模式進行擴充套件,真正的參與

clr的

管理。編寫託管宿主之後,如何讓它發揮作用呢?一般情況有三種選擇:

關於非託管

api在

clr寄宿一節進行了詳細的介紹,但是在討論

clr寄宿的時候只討論了完全採用非託管

api實現的非託管宿主實施的寄宿。那麼想要通過非託管

api來使託管宿主發揮作用的話,必須在非託管

api啟動

clr之後把控制權轉交給我們的託管宿主。

宿主在呼叫

corbindtoruntimeex

之後,將請求指向

icorruntimehost

的介面指標,利用該指標轉向到託管宿主。在和

環境變數中標識替代的

的程式集和型別。該程式集必須完全受信任,並且包含在起始應用程式的全域性程式集快取或目錄中。環境變數中的型別和程式集名稱必須是完全限定的。例如:

注意只有被授予

fulltrust 的

程式集(如全域性程式集快取中的程式集或者在

strongname>

()) 方法中標識為

fulltrustassemblies

的程式集)才可以在

建構函式和

initializenewdomain

方法中載入。

在啟動clr

之前,hkey_local_machine(or hkey_current_user)\software\microsoft\.netframework\

鍵值必須設定兩個值,乙個是

,另乙個是

。必須是安裝到全域性程式集快取的程式集,

是自定義的託管宿主的類。

--------------------------------注:本文部分內容改編自《.net 安全揭秘》

CLR寄宿 中 託管exe檔案的載入和執行

託管exe 檔案的載入和執行過程在之前的文章 做過簡要的介紹,現在結合本章的內容進行詳細的分析。託管exe檔案被啟動的時候,首先被 pe loader 載入。pe loader 載入exe 檔案之後,會分析 pe檔案頭的 data directory table 如果clr header 內的值不為...

CLR寄宿 中 託管exe檔案的載入和執行

託管exe 檔案的載入和執行過程在之前的文章 做過簡要的介紹,現在結合本章的內容進行詳細的分析。託管exe 檔案被啟動的時候,首先被 pe loader 載入。pe loader 載入exe 檔案之後,會分析 pe檔案頭的 data directory table 如果clr header 內的值不...

框架設計 CLR寄宿和應用程式域

概述 認識什麼是clr寄宿和應用程式域?clr寄宿 允許任何應用程式域使用clr的特徵。允許已有的應用程式至少區域性使用託管 程式設計,並為應用程式提供通過程式設計支援自定義和可擴充套件性的能力。應用程式域 允許第三方信任的 在已存在的程序中執行,並保證應用程式的資料結構,以及安全上下文不被利用或不...