E.g.如果你想運行在相同的上下文中進程中的線程,你可以做一些類似這樣:
private void ImpersonateThread()
{
new Thread(() =>
{
Thread.CurrentPrincipal = new WindowsPrincipal(WindowsIdentity.GetCurrent());
//Do the work...
}).Start();
}
這是如果運行的網站(在MS-IIS),其中應用程序池是非常有用的作爲一個用戶運行,認證模式設置爲Windows認證。那麼你可能會希望線程作爲訪問該網站的用戶來運行。
UPDATE:
我只是想澄清這一點。行:
Thread.CurrentPrincipal = new WindowsPrincipal(WindowsIdentity.GetCurrent());
剛剛轉會的用戶(用戶仍然不能冒充該線程還)給線程,因此其它部件可能會看到用戶是誰,以及在必要時使用這些信息,例如像這樣:
System.Security.Principal.WindowsImpersonationContext impersonationContext;
impersonationContext =
((System.Security.Principal.WindowsIdentity)System.Threading.Thread.CurrentPrincipal.Identity).Impersonate();
//Do the work that you want within the impersonated users context.
impersonationContext.Undo();
在模擬和撤消之間,用戶被模擬並且所有代碼都以該用戶的身份運行。我知道用戶在這個示例中是一樣的,但想象一下,該線程使用戶完全不同於運行該進程的用戶(用戶輸入的內容或類似內容)。希望這有助於:-)