Ответ 1
Я считаю, что вы можете просто установить CurrentPrincipal
в качестве первой операции кода потока после запуска потока, и только тогда начните выполнение кода, который должен работать с другим директором.
Это должно позаботиться о любых проверках на основе ролей .NET. Если вам нужна олицетворение, а также для вызовов в ОС, вы можете олицетворять WindowsIdentity
.
Код (может работать или не работать - не проверял его):
public void Run(object principalObj) {
if (principalObj == null) {
throw new ArgumentNullException("principalObj");
}
IPrincipal principal = (IPrincipal)principalObj;
Thread.CurrentPrincipal = principal;
WindowsIdentity identity = principal.Identity as WindowsIdentity;
WindowsImpersonationContext impersonationContext = null;
if (identity != null) {
impersonationContext = identity.Impersonate();
}
try {
// your code here
} finally {
if (impersonationContext != null) {
impersonationContext.Undo();
}
}
}
...
Thread thread = new Thread(Run);
thread.Start(yourPrincipal);