0

私は本当に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を見つけるにはどうすればよいですか?私はいたるところを見てきましたが、何かが欠けているか見落としていると思います...

ご協力いただきありがとうございます!!!

4

1 に答える 1

0

Luke が言ったように、この関数は呼び出されていませんが、LSA に SSP/AP を実装すると、この関数を実装できます。

于 2014-03-06T12:49:56.210 に答える