我正在使用Windows XP Pro SP3。
我想在代码中使用SSPI函数。
我编译了代码,没有错误。

我将安全软件包设置为用于协商,这是推荐的。

当我启动程序时,无法使用“协商”,因为找不到它。
因此,我改为尝试使用“ Kerberos”,并且遇到相同的错误:找不到安全包。

我查看了注册表,并根据该注册表项:HKEY_LOCAL_MACHINE / SYSTEM / CurrentControlSet / Control / Lsa / Security软件包,可用的安全软件包为:kerberos,msv1_0,schannel,wdigest。协商和NTLM丢失。

我不明白为什么我的程序找不到任何安全软件包。
返回的错误代码是0x80090305,我找不到有关修复它的任何提示。

因此,如果您掌握了SSPI,请帮助我!
注册表中是否有需要修改的内容?
或者,也许我需要注册一些DLL?

谢谢你的提示
再见!

最佳答案

SSPI是没有代码即可调试的牛:)

尝试使用此代码,查看其是否有效,如果重试,然后将NTLM替换为Negotiate。实际上,不是使用单词“ Negotiate” #include“ security.h”而是使用NEGOSSP_NAME。

另外,请尝试此操作,并查看“协商”是否在列表中:

int main(int argc,_TCHAR * argv [])
{
    ULONG cPackages = 0;
    PSecPkgInfo pInfo = NULL;
    SECURITY_STATUS stat = EnumerateSecurityPackages(&cPackages,&pInfo);
    如果(stat == SEC_E_OK){
        对于(ULONG i = 0; i             wprintf(L“%s \ t%s \ n”,pInfo [i] .Name,pInfo [i] .Comment);
        }
        FreeContextBuffer(pInfo);
    }
    返回0;
}

确保在标头中定义SECURITY_WIN32,并与secur32链接。

10-08 14:27