尚未找到SSPI谈判

时间:2010-03-06 00:48:26

标签: c++ security package sspi

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

我将安全包设置为谈判,建议使用。

当我启动程序时,无法使用协商,因为无法找到它。 所以,我尝试了“Kerberos”,并且出现了同样的错误:无法找到安全包。

我查看了注册表,并根据该键: HKEY_LOCAL_MACHINE / SYSTEM / CurrentControlSet / Control / Lsa / Security Packages ,可用的安全包是: kerberos msv1_0 schannel wdigest 谈判 NTLM 缺失。

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

所以,如果你掌握了SSPI,我需要你的帮助! 我是否需要在注册表中修改某些内容? 或者我可能需要注册一些DLL?

感谢任何提示 再见!

1 个答案:

答案 0 :(得分:2)

SSPI无需代码即可调试:)

尝试使用此代码,查看是否有效,如果有效,请重新尝试并使用Negotiate替换NTLM。实际上,不是使用“Negotiate”这个词,而是#include“security.h”并使用NEGOSSP_NAME。

另外,试试这个,看看Negotiate是否在列表中:

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

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