Как вручную изменить SID токена олицетворения

Можно ли вручную изменить SID токена олицетворения потока?

if (0 == ImpersonateSelf(SecurityDelegation))
{
//FAILED
return 1;
}

HANDLE tokenHandle = NULL;
PTOKEN_USER pUserToken = NULL;
PSID sid;
DWORD dwRequiredLength = 0;

...
// some code that gets the tokenhandle, TokenUser buffer, etc.,
// and allocates all necessary memory
// original psid is "S-1-5-21-21515-10001"...

if (OpenThreadToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, TRUE, &tokenHandle))
{
// get buffer size
if (!GetTokenInformation(tTokenHandle, TokenUser, pUserToken, 0, &dwRequiredLength))
{
pUserToken = (PTOKEN_USER)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwRequiredLength);
// assume allocation works
if (ConvertStringSidToSid(TEXT("S-1-5-21-100000-1005555", &sid))
{
pUserToken->User.Sid = sid;
if (SetTokenInformation(tokenHandle, TokenUser, pUserToken, dwRequiredLength))
{
// SUCCESS
}
HeapFree(GetProcessHeap(), 0, pUserToken);
}
}
}

Весь мой код работает правильно, пока SetTokenInformation(...) достигнуто При попытке позвонить SetTokenInformation() Я получаю ошибку 87 или ERROR_INVALID_PARAMETER, Я не уверен, как или почему я получаю это, так как кажется, что все идет гладко.

Я думаю, что, возможно, просто невозможно установить собственный SID для токена доступа, даже если это временный токен олицетворения от имени потока.

Спасибо, парни!

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]