c++ 使用LSA_STRING时的SegFault

ncgqoxb0  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(88)

我想使用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,我该如何防止它?

rxztt3cl

rxztt3cl1#

所以造成这个问题的原因是

PULONG authPackage;

字符串
这是一个指向ULONG的指针,所以当我把它交给方法时,它有一个unitialized指针,这导致了segfault。

ULONG authPackage;

errorCode = LsaLookupAuthenticationPackage(lsaHandle, packageNamePointer, &authPackage);


一切正常

相关问题