提问人:ConnoK0lan 提问时间:11/17/2023 更新时间:11/17/2023 访问量:22
使用 LSA_STRING 时的 SegFault
SegFault when using LSA_STRING
问:
我想使用 LsaLookupAuthenticationPackage() 获取 kerberos 的身份验证包。 他的 Windows 文档告诉我,它需要一个我称之为 lsaHandle 的 PHandle、一个我称之为 packageNamePointer 的 PLSA_STRING,以及我称之为 auth package 的 PULONG。我是这样写的:
LSA_STRING packageName;
LPSTR tempPkgName = const_cast<LPSTR>("ker-beros");
packageName.Length = static_cast<USHORT>(strlen(tempPkgName));
packageName.MaximumLength = packageName.Length+1;
packageName.Buffer = tempPkgName;
PLSA_STRING packageNamePointer = &packageName;
PULONG authPackage;
errorCode = LsaLookupAuthenticationPackage(lsaHandle, packageNamePointer, authPackage);
if(errorCode != SCESTATUS_SUCCESS){
std::cout << LsaNtStatusToWinError(errorCode) << std::endl;
return 1;
}
但是,在调用 LsaLookupAuthenticationPackage 时,我总是收到 SegFault。我认为它与PLSA_STRING有关,因为我在调用 LsaRegisterLogonProcess 时遇到了类似的问题。
gdb回溯只给了我这个:
#0 0x00007fff641f28f4 在 SspiCli 中!来自 C:\Windows\SYSTEM32\sspicli 的 LsaLookupAuthenticationPackage () .dll
#1 在 C:/Users/user/Documents/folder/folder/folder/temp.cpp:38 的 main () 中0x00007ff774f514fe
我试图找到一个sspicli.lib来链接,以获得更好的回溯(如果这甚至有帮助),但遗憾的是找不到任何东西。
所以我要问的是:为什么这段代码在调用 LsaLookup 时会抛出段错误,我将如何防止它?
答:
0赞
ConnoK0lan
11/17/2023
#1
所以导致问题的是
PULONG authPackage;
这是一个指向 ULONG 的指针,所以当我把它交给方法时,它有一个导致段错误的单一化指针。将代码更改为
ULONG authPackage;
errorCode = LsaLookupAuthenticationPackage(lsaHandle, packageNamePointer, &authPackage);
一切正常
评论