Я ДЕЙСТВИТЕЛЬНО пытаюсь найти способ вызвать функцию 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?
Я смотрел везде, но я думаю, что я что-то упускаю или пропускаю ...
Спасибо за вашу помощь !!!