How to call OpenTokenByLogonId function?

868 views Asked by At

I am REALLY trying to find a way to call OpenTokenByLogonId() function, and I am pretty stuck. Moreover I can't find any examples of it anywhere!

From MSDN a pointer to OpenTokenByLoginID() can be found in LSA_SECPKG_FUNCTION_TABLE function table received from the SpInitialize() function.

a pointer to SpInitialize() function received from the SpLsaModeInitialize() function implemented in several DLLs according to what I want to do.

So, I looked for SpLsaModeInitialize() export in windows\system32\ and I found a few DLLs. Out of them I chose to use Kerberos.dll. I must say that I chose this DLL over others simply because of its name - I Don't really understand what are the differences (I believe these I different methods of authentication, but I don't really know).

So, I got a pointer to 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");

Called the function:

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 }

Now I can call SpInitialize using pck_tbl->Initialize.

BUT (and here's the problem) I can't find a way to the parameters for the function!

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

How do I find a packageID let alone its SECPKG_PARAMETERS ? I've looked everywhere, but I guess I'm missing or overlooking something...

Thanks For Your Help!!!

1

There are 1 answers

0
TCS On BEST ANSWER

As Luke said, this function is not being called, but when one implements SSP/AP for the LSA, one can implement this function.