SSPI头文件 - 致命错误

时间:2012-07-19 13:02:56

标签: 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

3 个答案:

答案 0 :(得分:8)

虽然诊断明确表示必须定义SECURITY_WIN32SECURITY_KERNELSECURITY_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预处理器符号。

答案 1 :(得分:4)

添加

#define SECURITY_WIN32 

所有包括之前

答案 2 :(得分:0)

只需添加到现有答案中,定义它的首选方法就是

#ifndef SECURITY_WIN32 
#define SECURITY_WIN32 
#endif

您可以在#include令人讨厌的头文件之前添加此文件,也可以在第一次调用windows.h或afxwin.h或任何其他文件之前将其添加到stdafx.h中(如果使用的话)将其全局添加,在定义WINVER和_WIN32_WINNT的同时,或者当然可以将其添加到项目设置中。