使用 LSA_STRING 时的 SegFault

SegFault when using LSA_STRING

提问人:ConnoK0lan 提问时间:11/17/2023 更新时间:11/17/2023 访问量:22

问:

我想使用 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 时会抛出段错误,我将如何防止它?

C++ Windows 分段错误

评论


答:

0赞 ConnoK0lan 11/17/2023 #1

所以导致问题的是

PULONG authPackage;

这是一个指向 ULONG 的指针,所以当我把它交给方法时,它有一个导致段错误的单一化指针。将代码更改为

ULONG authPackage;

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

一切正常