2012-07-19 91 views
4

我在我的項目上得到了一些致命錯誤,錯誤是來自sspi.h,我必須定義一些東西,但我不是什麼,爲什麼,請有人解釋。SSPI頭文件 - 致命錯誤

sspi.h(60): fatal error C1189: #error : You must define one of SECURITY_WIN32, SECURITY_KERNEL, or SECURITY_MAC 

回答

4

只需添加

#define SECURITY_WIN32 

所有包括

+3

如果有人想提供更多細節(例如,爲什麼這是必要的,它做了什麼/它的意思,以及另一個'SECURITY_ *'定義的意思)是否有幫助,我沒有迄今爲止能夠找到很多信息。 – jrh 2017-05-08 19:24:30

+1

@jrh:我開始自己挖掘信息,但也是空手而歸。我確實將我的發現編譯成了一個答案,至少比推薦*「做這個(並祈禱)」*更完整。 – IInspectable 2017-10-20 08:27:08

2

之前雖然診斷是明確其定義的SECURITY_WIN32一個,SECURITY_KERNEL,或SECURITY_MAC,它並沒有多大幫助確定哪些一個使用和爲什麼。據我所知,這些都沒有正式記錄在MSDN中,所以唯一的信息來源是實際的頭文件。

  • SECURITY_MAC:此符號永遠只能出現在<sspi.h>,與1992-1999版權聲明的文件。據推測,這個符號是爲支持編譯「Classic」Mac OS而推出的,當時MFC仍然計劃成爲針對Windows和Mac的跨平臺框架。該符號今天似乎沒有任何實際用途。

  • SECURITY_KERNEL:這裏最有啓發性的評論是從<NTSecPKG.h>,閱讀// Can't use the windows.h def'ns in kernel mode.。這似乎表明需要定義SECURITY_KERNEL符號,即從內核模式下運行的模塊訪問安全軟件包的內容。

  • SECURITY_WIN32:在整個Windows SDK中根本沒有對此符號的評論。從用戶模式應用程序訪問安全API時,應該使用此符號似乎是合理的。

假設上述所有都正確,以下指南可在確定符號來定義使用:

  • 編譯一個用戶模式應用程序時,定義SECURITY_WIN32
  • 編譯內核模式模塊時定義SECURITY_KERNEL
  • 切勿定義過時的SECURITY_MAC預處理器符號。