我開發了自定義身份驗證包,我想用於交互式登錄。它在LsaApUserLogon
函數中創建訪問令牌。自定義Windows身份驗證包登錄失敗
當我從應用程序調用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無法登錄。
雖然權利和特權通常是可以互換的,我相信這是案例之一,他們不是。權限不會添加到用戶的令牌中,因此推測在TOKEN_PRIVILEGES結構中不需要。我可以確認(如文檔所述)LookupPrivilegeValue不適用於SeInteractiveLogonRight。據推測,LsaApLogonUser預計會驗證用戶的登錄權限。 –
至於配置文件緩衝區,文檔沒有說你可以將它設置爲NULL,所以我建議創建一個緩衝區。給它一個合理的大小,比如32個字節,並填充零。一旦你有所有的工作,你可以再次嘗試。 –
@哈里約翰斯頓,謝謝,我已經解決了我的問題。 配置文件緩衝區必須以最小大小(1字節)進行分配。 –