Можно ли вручную изменить 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 для токена доступа, даже если это временный токен олицетворения от имени потока.
Спасибо, парни!
Задача ещё не решена.
Других решений пока нет …