我正在使用Windows XP Pro SP3。 我想在我的代码中使用SSPI函数。 我编译了我的代码,没有错误。
我将安全包设置为谈判,建议使用。
当我启动程序时,无法使用协商,因为无法找到它。 所以,我尝试了“Kerberos”,并且出现了同样的错误:无法找到安全包。
我查看了注册表,并根据该键: HKEY_LOCAL_MACHINE / SYSTEM / CurrentControlSet / Control / Lsa / Security Packages ,可用的安全包是: kerberos , msv1_0 , schannel , wdigest 。 谈判和 NTLM 缺失。
我不明白为什么我的程序找不到任何安全包。 返回的错误代码是 0x80090305 ,我找不到任何有关修复方法的提示。
所以,如果你掌握了SSPI,我需要你的帮助! 我是否需要在注册表中修改某些内容? 或者我可能需要注册一些DLL?
感谢任何提示 再见!
答案 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进行链接。