Не удалось выполнить вход в пользовательский пакет проверки подлинности Windows

Я разработал специальный пакет аутентификации, который я хотел бы использовать для интерактивного входа в систему. Создает токен доступа в LsaApUserLogon функция.

Когда я звоню LsaUserLogon из приложения я могу перечислить новые сеансы пользователя, но когда я использовал его для входа в систему (также я создал собственный поставщик учетных данных), я вижу в журнале событий Windows, что я успешно вошел в систему, а затем вышел из нее.

Когда я выбираю свои конкретные учетные данные и пытаюсь войти в систему, он входит в LsaApLogonUser API моего пакета аутентификации. Если я проверю файл журнала, 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 не может войти в систему.

1

Решение

В документации не сказано, что буфер профиля может быть установлен в NULL и кажется, что это действительно обязательно. OP сообщает, что выделение и возврат буфера профиля (достаточно было одного байта) решило проблему.

Ошибка при попытке получить LUID для SeInteractiveLogonRight не было актуально; права входа пользователя не должны быть включены в TOKEN_PRIVILEGES структура, поэтому LUID не требуется, и, как задокументировано, LookupPrivilegeValue Функция принимает только привилегии:

Функция LookupPrivilegeValue поддерживает только те привилегии, которые указаны в разделе «Определенные привилегии» Winnt.h.

(Обратите внимание, что соответствующий раздел winnt.h содержит только определения для SeXxxPrivilege; определения для SeXxxLogonRight находятся в ntsecapi.h.)

0

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

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

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