2010-03-06 80 views
0

我正在使用Windows XP專業版SP3。 我想在我的代碼中使用SSPI函數。 我編譯了我的代碼,沒有錯誤。SSPI協商未找到

我設置了要使用的安全包談判,這是推薦的。

當我開始我的程序時,談判無法使用,因爲它無法找到。 因此,我嘗試了「Kerberos」,而不是同樣的錯誤:找不到安全軟件包。

我看了一下注冊表,並根據該密鑰:HKEY_LOCAL_MACHINE /系統/ CurrentControlSet /控制/ LSA /安全包,提供的安全軟件包:的KerberosMSV1_0SCHANNELwdigest談判NTLM丟失。

我不明白爲什麼我的程序找不到任何安全軟件包。 返回的錯誤代碼是0x80090305我無法找到解決方法的任何提示。

所以,如果你掌握了SSPI,請給我幫助! 我有什麼要修改註冊表嗎? 或者我可能需要註冊一些DLL?

感謝您的任何提示 再見!

+0

自從我看了SSPI以來,這已經過去很長時間了,但不相信文檔;這是不對的。我似乎記得有兩種方法可以做到這一點,*表示*是等同的,但不是(只有一個返回安全包的完整列表)。我會看看我是否可以挖掘代碼,但沒有承諾。 – Draemon 2010-03-06 01:04:23

+0

是的,文檔是錯誤的...我不得不修復很多錯誤! ...最後它編譯,但找不到安全軟件包:/ – 2010-03-06 11:03:27

回答

2

SSPI是沒有代碼:)

試試這個代碼,看看它是否工作,如果這樣做,重試,並蓋上NTLM與協商調試一頭牛。實際上,不是使用「協商」一詞,而是使用#include「security.h」並使用NEGOSSP_NAME。

此外,嘗試這一點,看是否協商是在列表中:

INT主(INT的argc,_TCHAR * argv的[]){ ULONG cPackages = 0; PSecPkgInfo pInfo = NULL; SECURITY_STATUS stat = EnumerateSecurityPackages(& cPackages,& pInfo);對於(ULONG i = 0; i < cPackages; i ++)wprintf(L「%s \ t%s \ n」,pInfo [i] .Name,pInfo [i] 。評論); } FreeContextBuffer(pInfo); } return 0; }

確保您在標頭中定義了SECURITY_WIN32,並鏈接到了secur32。

+0

另一個想法 - 你知道SSPI在Unicode中工作,對嗎?始終Unicode!從不ASCII :) 如果你傳遞一個ASCII字符串到SSPI函數,它看起來像Unicode goo!因此,請確保如果* DO *使用字符串常量,則在字符串前加一個'L': 請勿使用:char * szName =「Negotiate」; 使用:wchar_t * wszName = L「Negotiate」; lemme知道:) – 2010-03-06 03:36:00

+0

非常感謝您的幫助! 結果是:協商是在列表中,以及Keberos,NTLM,Schannel,WDigest,... 現在我必須適應我的代碼到unicode,看看它是否工作:) – 2010-03-06 11:00:04

+0

非常感謝你邁克爾,現在我的服務器就像一個魅力! :) – 2010-03-06 14:22:01

相關問題