我想使用LsaLookupAuthenticationPackage()来获取Keratron的身份验证包。他Windows docs告诉我,它需要一个PHandle(我称之为lsaHandle),一个PLSA_STRING(我称之为packageNamePointer)和PULONG(我称之为auth package)。我这样写的:
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 0x 00007 fff 641 f28 f4在SspiCli!LsaLookupAuthenticationPackage()中,来自C:\Windows\EM32\sspicli.dll
1 0x 00007 ff 774 f514 fe在main()中,位于C:/Users/user/Documents/folder/folder/folder/temp.cpp:38
我试图找到一个sspicli.lib链接,以获得更好的回溯(如果这会有帮助的话),但遗憾的是找不到任何东西。
所以我想问的是:为什么这段代码在调用Lsaint时抛出一个segfault,我该如何防止它?
1条答案
按热度按时间rxztt3cl1#
所以造成这个问题的原因是
字符串
这是一个指向ULONG的指针,所以当我把它交给方法时,它有一个unitialized指针,这导致了segfault。
型
一切正常