0

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

我将要使用的安全包设置为Negotiate,这是推荐的。

当我启动我的程序时,无法使用协商,因为它找不到。所以,我改用“Kerberos”,同样的错误:找不到安全包。

我查看了注册表,根据该键:HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Lsa/Security Packages,可用的安全包有:kerberosmsv1_0schannelwdigest。缺少协商NTLM 。

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

所以,如果你掌握了 SSPI,我需要你的帮助!我在注册表中有什么要修改的吗?或者也许我需要注册一些 DLL?

感谢您的任何提示再见!

4

1 回答 1

3

SSPI 是一头无需代码即可调试的牛 :)

试试这段代码,看看它是否有效,如果有效,请重试并将 NTLM 替换为 Negotiate。实际上,与其使用“协商”这个词#include“security.h”并使用NEGOSP_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 链接。

于 2010-03-06T03:28:20.583 回答