私は本当にOpenTokenByLogonId()関数を呼び出す方法を見つけようとしていますが、かなり行き詰まっています。さらに、私はそれの例をどこにも見つけることができません!
MSDNから、OpenTokenByLoginID()へのポインターは、SpInitialize()関数から受け取ったLSA_SECPKG_FUNCTION_TABLE関数テーブルにあります。
私がやりたいことに応じて、いくつかのDLLに実装されたSpLsaModeInitialize()関数から受け取ったSpInitialize()関数へのポインター。
そこで、windows \ system32 \でSpLsaModeInitialize()エクスポートを探したところ、いくつかのDLLが見つかりました。それらの中から、Kerberos.dllを使用することを選択しました。名前だけで他の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 }
これで、pck_tbl->Initializeを使用してSpInitializeを呼び出すことができます。
しかし(そしてここに問題があります)私は関数のパラメーターへの道を見つけることができません!
NTSTATUS SpInitialize(__in ULONG_PTR PackageId, __in PSECPKG_PARAMETERS Parameters, __in PLSA_SECPKG_FUNCTION_TABLE FunctionTable);
SECPKG_PARAMETERSはもちろんのこと、packageIDを見つけるにはどうすればよいですか?私はいたるところを見てきましたが、何かが欠けているか見落としていると思います...
ご協力いただきありがとうございます!!!