我真的试图找到一种方法来调用OpenTokenByLogonId()函数,我很困惑。而且我在任何地方都找不到任何例子!
在MSDN中,可以在从SpInitialize()函数接收的LSA_SECPKG_FUNCTION_TABLE函数表中找到指向OpenTokenByLoginID()的指针。
根据我想要做的,从几个DLL中实现的SpLsaModeInitialize()函数接收SpInitialize()函数的指针。
所以,我在windows \ system32 \中查找了SpLsaModeInitialize()导出,我发现了一些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 }
现在我可以使用pck_tbl-&gt; Initialize来调用SpInitialize。
但是(这是问题)我找不到这个函数参数的方法!
NTSTATUS SpInitialize(__in ULONG_PTR PackageId, __in PSECPKG_PARAMETERS Parameters, __in PLSA_SECPKG_FUNCTION_TABLE FunctionTable);
如何找到一个packageID,更不用说它的SECPKG_PARAMETERS了? 我到处都看,但我想我错过了或忽略了什么......
感谢您的帮助!!!
答案 0 :(得分:0)
正如Luke所说,这个函数没有被调用,但是当一个人为LSA实现SSP / AP时,可以实现这个功能。