У меня был разработан специальный пакет проверки подлинности, который я хотел бы использовать для интерактивного входа в систему. Он создает токен доступа в функции LsaApUserLogon
.Не удалось выполнить вход в систему Windows Authentication
Когда я вызываю LsaUserLogon
из приложения, я могу перечислять новые пользовательские сеансы, но когда я использовал его для входа в систему (также я создал пользовательский поставщик учетных данных), я могу видеть в журнале событий Windows, что я был успешно зарегистрирован, а затем вышли из.
Когда я выбираю свои конкретные учетные данные и пытаюсь войти в систему, он входит в API LsaApLogonUser
моего пакета аутентификации. Если я проверю файл журнала, LsaApLogonUser
вернусь STATUS_SUCCESS
. Но Windows не входит в систему. После ухода LsaAPLogonUser
, LSA называет LsaApLogonTerminated
API и обратно LogonUI
.
Когда я подготовил TokenInformation
, я получил LookupPrivilegeValueW
не для SeInteractiveLogonRight
. Я не знаю, важно ли это для входа в систему.
LsaApLogonUser(...){
......
// NetUserGetInfo
// AllocateLocallyUniqueId (LogonId)
err = GetTokenInformationv2(pdi?pdi->DomainControllerName:NULL,wszDomain,wszUser,&LocalTokenInformation,LogonId);
err = g_pSec->CreateLogonSession(LogonId);
if(ProfileBuffer)
{
*ProfileBuffer=NULL;
*ProfileBufferLength=0;
}
(*TokenInformationType)=LsaTokenInformationV2;
(*TokenInformation)=LocalTokenInformation;
return STATUS_SUCCESS;
}
GetTokenInformationv2(...){
....
....
// Call LsaEnumerateAccountRights
// check LookupPrivilegeValueW // It failed for "SeInteractiveLogonRight"
//
return STATUS_SUCCESS;
}
ProfileBuffer
Важный для входа? Я не знаю, почему LSA не может войти в систему.
Хотя права и привилегии, как правило, взаимозаменяемы, я считаю, что это один из тех случаев, когда они нет. Права не добавляются к токенам пользователя, поэтому, по-видимому, они не нужны в структуре TOKEN_PRIVILEGES. Я могу подтвердить, что (как задокументировано) LookupPrivilegeValue не работает для SeInteractiveLogonRight. Предположительно, ожидается, что LsaApLogonUser будет проверять право пользователя на вход в систему. –
Что касается буфера профиля, в документации не говорится, что вы можете установить его в «NULL», поэтому я бы рекомендовал создать буфер, как задокументировано. Дайте ему разумный размер, скажем 32 байта, и заполните его нулями. Когда у вас все получится, вы можете поэкспериментировать с этим снова. –
@HarryJohnston, спасибо, я решил свою проблему. буфер профиля должен быть выделен с минимальным размером (1 байт). –