Здравствуйте, Jolly Roger, Вы писали:
JR>Здравствуйте, xaxaTyH, Вы писали:
JR>А Вы проверьте полученный токен на членство в группах (GetTokenInformation с TokenGroups).
Вывел группы и атрибуты токена таким образом:
/*Получение информации о группах токена*/
DWORD dwTGSize = 0;
PTOKEN_GROUPS lpTokenGroups;
//Берем размер буфера
::GetTokenInformation(hToken, TOKEN_INFORMATION_CLASS::TokenGroups, NULL, 0, &dwTGSize);
//Выделяем память под буфер
lpTokenGroups = (PTOKEN_GROUPS)::LocalAlloc(LPTR, dwTGSize);
if(!::GetTokenInformation(hToken, TOKEN_INFORMATION_CLASS::TokenGroups, lpTokenGroups, ::LocalSize(lpTokenGroups), &dwTGSize))
{
_tprintf_s(L"GetTokenInformation() FAILED with error code: %d\n", ::GetLastError());
_ftprintf(fp, L"GetTokenInformation() FAILED with error code: %d\n", ::GetLastError());
fclose(fp);
::CloseHandle(hToken);
return 0;
}
else
{
_tprintf_s(L"GetTokenInformation() SUCCESS with error code: %d\n", ::GetLastError());
_ftprintf(fp, L"GetTokenInformation() SUCCESS with error code: %d\n", ::GetLastError());
}
//Запись групп Token'a
_tprintf_s(L"Token Groups for hToken:\n");
for(int i = 0; i < lpTokenGroups->GroupCount; i++)
{
LPTSTR lptStringSid = NULL;
if(!::ConvertSidToStringSid(lpTokenGroups->Groups->Sid, &lptStringSid))
{
_tprintf_s(L"ConvertSidToStringSid() FAILED with error code: %d\n", ::GetLastError());
_ftprintf(fp, L"GConvertSidToStringSid() FAILED with error code: %d\n", ::GetLastError());
}
_tprintf_s(L"Sid: %s. Attributes: %d.\n", lptStringSid, lpTokenGroups->Groups->Attributes);
_ftprintf(fp, L"Sid: %s. Attributes: %d.\n", lptStringSid, lpTokenGroups->Groups->Attributes);
::LocalFree(lptStringSid);
}
::LocalFree(lpTokenGroups);
/*Завершение получения информации о группах токена*/
Получил результат:
LogonUser() SUCCESS with error code: 0
GetTokenInformation() SUCCESS with error code: 122
End of Token Groups for hToken.
Sid: S-1-5-21-2143115735-4289703453-2575764236-513. Attributes: 7.
Sid: S-1-5-21-2143115735-4289703453-2575764236-513. Attributes: 7.
Sid: S-1-5-21-2143115735-4289703453-2575764236-513. Attributes: 7.
Sid: S-1-5-21-2143115735-4289703453-2575764236-513. Attributes: 7.
Sid: S-1-5-21-2143115735-4289703453-2575764236-513. Attributes: 7.
Sid: S-1-5-21-2143115735-4289703453-2575764236-513. Attributes: 7.
Sid: S-1-5-21-2143115735-4289703453-2575764236-513. Attributes: 7.
Sid: S-1-5-21-2143115735-4289703453-2575764236-513. Attributes: 7.
Sid: S-1-5-21-2143115735-4289703453-2575764236-513. Attributes: 7.
Sid: S-1-5-21-2143115735-4289703453-2575764236-513. Attributes: 7.
Sid: S-1-5-21-2143115735-4289703453-2575764236-513. Attributes: 7.
Sid: S-1-5-21-2143115735-4289703453-2575764236-513. Attributes: 7.
End of Token Groups for hToken.
LoadUserProfile() SUCCESS with error code: 1008
ImpersonateLoggedOnUser() SUCCESS with error code: 1008
GetUserProfileDirectory() SUCCESS with error code: 0
CreateEnvironmentBlock() SUCCESS with error code: 203
CreateProcessAsUser() FAILED with error code: 5
Не понял, почему 12 групп с одинаковым SID и что за значение SID — 7.. В Winnt.h такого значения не нашел.