Fichier d’en-tête SSPI – erreur fatale

J’ai une erreur fatale sur mon projet, l’erreur vient de sspi.h, je dois définir quelque chose mais je ne suis pas quoi et pourquoi, s’il vous plaît, expliquez quelqu’un.

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

Bien que le diagnostic soit clair sur le fait de devoir en définir un parmi SECURITY_WIN32 , SECURITY_KERNEL ou SECURITY_MAC , cela n’aide pas beaucoup à déterminer lequel utiliser et pourquoi. À ma connaissance, aucun de ces éléments n’est officiellement documenté dans MSDN. La seule source d’information est donc les fichiers d’en-tête réels.

  • SECURITY_MAC : Ce symbole apparaît uniquement dans , un fichier avec un avis de copyright de 1992-1999 . Vraisemblablement, ce symbole a été introduit pour prendre en charge la compilation pour Mac OS «classique», alors que MFC était toujours conçu pour être un framework multi-plateforme ciblant à la fois Windows et Mac. Le symbole ne semble pas être d’une utilité pratique aujourd’hui.

  • SECURITY_KERNEL : Le commentaire le plus instructif est de , en lisant // Can't use the windows.h def'ns in kernel mode. . Cela semble indiquer que le symbole SECURITY_KERNEL doit être défini lors de l’access au package de sécurité à partir d’un module exécuté en mode kernel.

  • SECURITY_WIN32 : Il n’y a aucun commentaire sur ce symbole dans tout le SDK Windows. Il semble plausible que ce symbole soit utilisé lors de l’access à l’API de sécurité à partir d’une application en mode utilisateur.

En supposant que tout ce qui précède soit correct, les directives suivantes peuvent être utilisées pour déterminer le symbole à définir:

  • Définissez SECURITY_WIN32 lors de la compilation d’une application en mode utilisateur.
  • Définissez SECURITY_KERNEL lors de la compilation d’un module en mode kernel.
  • Ne définissez jamais le symbole de préprocesseur SECURITY_MAC obsolète.

Ajoutez simplement

 #define SECURITY_WIN32 

avant tout comprend