Ребята, подскажите как можно передать security token из одного процесса в другой ? По идее же это объект ядра и работать должно.
У меня два приложения UI и Windows Service, пишу на C#, но в принципе я думаю код будет понятен всем. В UI приложении получаю token так:
private static bool GetImpersonationToken(out IntPtr token)
{
token = IntPtr.Zero;
IntPtr tempToken;
if (OpenProcessToken(GetCurrentProcess(), TokenImpersonate | TokenQuery | TokenDuplicate, out tempToken))
{
var sa = new SecurityAttributes { bInheritHandle = false };
sa.Length = Marshal.SizeOf(sa);
sa.lpSecurityDescriptor = (IntPtr)0;
// duplicate the token (this is necessary to convert the impersonated token to a primary token)
return DuplicateTokenEx(
tempToken,
0x000f01ff /* all access */,
ref sa,
/* ImpersonationLevel = SecurityImpersonation */2,
/* TokenType = TokenImpersonation */ 2,
ref token);
}
return false;
}
полученный token перекидываю по named pipe в мой Windows сервис который крутится под пользователем Local System и пытаюсь вызвать на него ImpersonateLoggedOnUser. Получаю ошибку 6, что мой HANDLE корявый. Я пробовал вызвать ImpersonateLoggedOnUser на полученный токен сразу же в том же UI приложении, оно работает.
Заранее спасибо!