我正在使用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链接。