Как вызвать функцию 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, он может реализовать эту функцию.