我的项目出现了一些 fatal error ,错误来自 sspi.h,我必须定义一些东西,但我不知道是什么以及为什么,请有人解释。
sspi.h(60): fatal error C1189: #error : You must define one of SECURITY_WIN32, SECURITY_KERNEL, or SECURITY_MAC
最佳答案
虽然诊断很清楚必须定义 SECURITY_WIN32
、SECURITY_KERNEL
或 SECURITY_MAC
之一,但它在确定方面没有多大帮助使用哪一个以及为什么。据我所知,这些都没有正式记录在 MSDN 中,因此唯一的信息来源是实际的头文件。
SECURITY_MAC
:此符号只出现在中,该文件的版权声明为 1992-1999
。据推测,引入此符号是为了支持“经典”Mac OS 的编译,当时 MFC 仍计划成为一个针对 Windows 和 Mac 的跨平台框架。该符号今天似乎没有任何实际用途。SECURITY_KERNEL
:这里最有启发性的评论来自,阅读 //Can't use the windows.h def 'ns 处于内核模式。
。这似乎表明,当从以内核模式运行的模块访问安全包时,需要定义SECURITY_KERNEL
符号。SECURITY_WIN32
:整个Windows SDK都没有对这个符号进行任何注释。从用户模式应用程序访问安全 API 时应该使用此符号似乎是合理的。
假设以上所有内容都是正确的,可以使用以下准则来确定要定义的符号:
- 在编译用户模式应用程序时定义
SECURITY_WIN32
。 - 在编译内核模式模块时定义
SECURITY_KERNEL
。 - 永远不要定义过时的
SECURITY_MAC
预处理器符号。
关于c++ - SSPI 头文件 - fatal error ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11561475/