繁体   English   中英

如何调用OpenTokenByLogonId函数?

[英]How to call OpenTokenByLogonId function?

我真的在试图找到一种方法来调用OpenTokenByLogonId()函数,我很困。 而且,我在任何地方都找不到它的任何示例!

从MSDN,可以在从SpInitialize()函数收到的LSA_SECPKG_FUNCTION_TABLE函数表中找到指向OpenTokenByLoginID()的指针。

从SpLsaModeInitialize()函数接收到的SpInitialize()函数的指针,该函数根据我想要执行的操作在多个DLL中实现。

因此,我在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-> Initialize调用SpInitialize。

但是(这是问题所在)我找不到该函数参数的方法!

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

如何找到packageID,更不用说其SECPKG_PARAMETERS了? 我到处都看过,但是我想我正在丢失或忽略某些东西...

谢谢你的帮助!!!

正如Luke所说的那样,这个函数没有被调用,但是当一个人为LSA实现SSP / AP时,就可以实现这一功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM