#windows #authentication
#Windows #проверка подлинности
Вопрос:
Я внедряю поставщика учетных данных, и внутри метода учетных данных есть эта функция для поиска правильного пакета аутентификации для использования
HRESULT RetrieveNegotiateAuthPackage(ULONG * pulAuthPackage)
{
HRESULT hr;
HANDLE hLsa;
NTSTATUS status = LsaConnectUntrusted(amp;hLsa);
if (SUCCEEDED(HRESULT_FROM_NT(status)))
{
ULONG ulAuthPackage;
LSA_STRING lsaszKerberosName;
LsaInitString(amp;lsaszKerberosName, NEGOSSP_NAME);
status = LsaLookupAuthenticationPackage(hLsa, amp;lsaszKerberosName, amp;ulAuthPackage);
if (SUCCEEDED(HRESULT_FROM_NT(status)))
{
*pulAuthPackage = ulAuthPackage;
hr = S_OK;
}
else
{
hr = HRESULT_FROM_NT(status);
}
LsaDeregisterLogonProcess(hLsa);
}
else
{
hr= HRESULT_FROM_NT(status);
}
return hr;
}
Когда я вызываю API LsaLookupAuthenticationPackage, он возвращает 0xc00000fe (ошибка). Вот значения параметров, которые я получил от отладки:
hLsa (it can vary each time) 0x00391c60
lsaszKerberosName L"Negotiate"
Кто-нибудь знает, что может быть причиной этого? И что делать, чтобы это исправить? Спасибо 🙂
Комментарии:
1.
L"Negotiate"
это ошибка — должно бытьNEGOSSP_NAME_A
2. тогда код очень не оптимальный. вам не нужно разделять
HRESULT hr
иULONG ulAuthPackage
иметь, не нужно использовать несколько разHRESULT_FROM_NT
, но только один раз при возврате
Ответ №1:
согласно документу ms api, параметр имени пакета определяется следующими макросами:
MSV1_0_PACKAGE_NAME
MICROSOFT_KERBEROS_NAME_A
NEGOSSP_NAME_A
макрос определяет тип пакета проверки подлинности, который вы хотите использовать
, и, кроме того, вы должны использовать тип ascii вместо unicode
https://docs.microsoft.com/en-us/windows/win32/api/ntsecapi/nf-ntsecapi-lsalookupauthenticationpackage