SSPI头文件 - 致命错误

Coo*_*ker 8 c++ windows winapi header-files

我的项目出现了一些致命错误,错误来自sspi.h,我必须定义一些东西,但我不是什么,为什么,请有人解释.

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

IIn*_*ble 9

虽然诊断是明确其定义的一个SECURITY_WIN32,SECURITY_KERNEL或者SECURITY_MAC,它并没有多大帮助确定使用哪一个,为什么.据我所知,这些都没有在MSDN中正式记录,因此唯一的信息来源是实际的头文件.

  • SECURITY_MAC:此符号仅出现在<sspi.h>中,该文件的版权声明为1992-1999.据推测,这个符号的引入是为了支持"经典​​"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预处理器符号.


Coo*_*ker 5

只需添加

#define SECURITY_WIN32 
Run Code Online (Sandbox Code Playgroud)

在所有包括

  • 如果有人想提供更多详细信息(例如,为什么这样做是必要的,它做什么/意味着什么以及其他“ SECURITY_ *”定义的含义),那将是有帮助的,我没有找到太多到目前为止的信息。 (3认同)