Как вызвать функцию OpenTokenByLogonId?

Я ДЕЙСТВИТЕЛЬНО пытаюсь найти способ вызова функции OpenTokenByLogonId(), и я довольно застрял. Более того, я нигде не могу найти примеры этого!

Из MSDN указатель на OpenTokenByLoginID() можно найти в таблице функций LSA_SECPKG_FUNCTION_TABLE, полученной из функции SpInitialize().

указатель на функцию SpInitialize(), полученный от функции SpLsaModeInitialize(), реализованной в нескольких библиотеках DLL в соответствии с тем, что я хочу сделать.

Итак, я искал экспорт SpLsaModeInitialize() в windows\system32\ и нашел несколько DLL. Из них я решил использовать Kerberos.dll. Я должен сказать, что я выбрал эту DLL над другими просто из-за ее названия - я не очень понимаю, в чем различия (я считаю, что это разные методы аутентификации, но я не знаю).

Итак, я получил указатель на SpLsaModeInitialize():

#include <Windows.h>
#include <Sspi.h>
#include <Ntsecapi.h>
#include <Ntsecpkg.h>

HMODULE hdll_kerberos = ::LoadLibrary(L"kerberos.dll");

SpLsaModeInitializeFn SpLsaModeInitialize = (SpLsaModeInitializeFn)::GetProcAddress(hdll_kerberos, "SpLsaModeInitialize");

Вызывается функция:

ULONG pckver = 0;
PSECPKG_FUNCTION_TABLE pck_tbl = 0;
ULONG pcTables = 0;

NTSTATUS res=0;
if(SpLsaModeInitialize(SECPKG_INTERFACE_VERSION, &pckver, &pck_tbl, &pcTables) != 0){ // error }

Теперь я могу вызвать SpInitialize, используя pck_tbl->Initialize.

НО (и вот проблема) Я не могу найти путь к параметрам для функции!

NTSTATUS SpInitialize(__in  ULONG_PTR PackageId, __in  PSECPKG_PARAMETERS Parameters, __in  PLSA_SECPKG_FUNCTION_TABLE FunctionTable);

Как мне найти packageID, не говоря уже о его SECPKG_PARAMETERS? Я смотрел везде, но я думаю, что я что-то упускаю или пропускаю...

Спасибо за вашу помощь!!!

1 ответ

Решение

Как сказал Люк, эта функция не вызывается, но когда кто-то реализует SSP/AP для LSA, он может реализовать эту функцию.

Другие вопросы по тегам