Partager via


GLOBAL_NOTIFICATION_STATUS, énumération

Définit les valeurs de retour pour les notifications de niveau global.

Syntaxe

typedef enum GLOBAL_NOTIFICATION_STATUS{  
   GL_NOTIFICATION_CONTINUE,  
   GL_NOTIFICATION_HANDLED  
};  

Membres

Nom du membre Description
GL_NOTIFICATION_CONTINUE Indique qu’IIS doit continuer à traiter des notifications de niveau global supplémentaires.
GL_NOTIFICATION_HANDLED Indique qu’IIS a terminé de traiter les notifications de niveau global et ne doit pas traiter de notifications de niveau global supplémentaires.

Remarques

Les membres de l’énumération GLOBAL_NOTIFICATION_STATUS sont utilisés comme valeurs de retour à partir de notifications de niveau global, et les membres aident à contrôler le flux de processus dans le pipeline de traitement des notifications de niveau global. Par exemple, le retour GL_NOTIFICATION_CONTINUE à partir d’un gestionnaire de notifications de niveau global indique à IIS de continuer à traiter des notifications de niveau global supplémentaires, tandis que le retour GL_NOTIFICATION_HANDLED à partir d’un gestionnaire de notifications de niveau global informe IIS que le traitement au niveau global est terminé et qu’IIS ne doit pas traiter de notifications de niveau global supplémentaires.

Exemple

L’exemple de code suivant montre comment créer un module HTTP de niveau global simple « Hello World ». Le module définit une fonction RegisterModule exportée qui crée un instance d’une classe dérivée de CGlobalModule. Si la classe ne peut pas être créée, la fonction se ferme avec un code d’erreur ; Sinon, la fonction appelle la méthode IHttpModuleRegistrationInfo::SetRequestNotifications pour s’inscrire à la notification GL_PRE_BEGIN_REQUEST .

Lorsqu’une GL_PRE_BEGIN_REQUEST notification se produit, IIS appelle la méthode CGlobalModule::OnGlobalPreBeginRequest du module pour traiter la notification. La méthode appelle une méthode privée pour écrire un événement dans le journal d’application du observateur d'événements, puis elle retourne GL_NOTIFICATION_CONTINUE pour avertir IIS de continuer à traiter d’autres notifications. Une fois le traitement terminé, IIS appelle la méthode CGlobalModule::Terminate du module pour supprimer la classe de la mémoire.

#define _WINSOCKAPI_
#include <windows.h>
#include <sal.h>
#include <httpserv.h>

// Create the module's global class.
class MyGlobalModule : public CGlobalModule
{
public:

    // Process a GL_APPLICATION_START notification.
    GLOBAL_NOTIFICATION_STATUS
    OnGlobalPreBeginRequest(
        IN IPreBeginRequestProvider * pProvider
    )
    {
        UNREFERENCED_PARAMETER( pProvider );
        WriteEventViewerLog( "Hello World!" );
        return GL_NOTIFICATION_CONTINUE;
    }

    VOID Terminate()
    {
        // Remove the class from memory.
        delete this;
    }

    MyGlobalModule()
    {
        // Open a handle to the Event Viewer.
        m_hEventLog = RegisterEventSource( NULL,"IISADMIN" );
    }

    ~MyGlobalModule()
    {
        // Test whether the handle for the Event Viewer is open.
        if (NULL != m_hEventLog)
        {
            // Close the handle to the Event Viewer.
            DeregisterEventSource( m_hEventLog );
            m_hEventLog = NULL;
        }
    }

private:

    // Create a handle for the event viewer.
    HANDLE m_hEventLog;

    // Define a method that writes to the Event Viewer.
    BOOL WriteEventViewerLog(LPCSTR szNotification)
    {
        // Test whether the handle for the Event Viewer is open.
        if (NULL != m_hEventLog)
        {
            // Write any strings to the Event Viewer and return.
            return ReportEvent(
                m_hEventLog,
                EVENTLOG_INFORMATION_TYPE, 0, 0,
                NULL, 1, 0, &szNotification, NULL );
        }
        return FALSE;
    }
};

// Create the module's exported registration function.
HRESULT
__stdcall
RegisterModule(
    DWORD dwServerVersion,
    IHttpModuleRegistrationInfo * pModuleInfo,
    IHttpServer * pGlobalInfo
)
{
    UNREFERENCED_PARAMETER( dwServerVersion );
    UNREFERENCED_PARAMETER( pGlobalInfo );

    // Create an instance of the global module class.
    MyGlobalModule * pGlobalModule = new MyGlobalModule;
    // Test for an error.
    if (NULL == pGlobalModule)
    {
        return HRESULT_FROM_WIN32(ERROR_NOT_ENOUGH_MEMORY);
    }
    // Set the global notifications and exit.
    return pModuleInfo->SetGlobalNotifications(
        pGlobalModule, GL_PRE_BEGIN_REQUEST );
}

Votre module doit exporter la RegisterModule fonction. Vous pouvez exporter cette fonction en créant un fichier de définition de module (.def) pour votre projet, ou vous pouvez compiler le module à l’aide du /EXPORT:RegisterModule commutateur . Pour plus d’informations, consultez Procédure pas à pas : création d’un module HTTP Global-Level à l’aide de code natif.

Vous pouvez éventuellement compiler le code à l’aide de la __stdcall (/Gz) convention d’appel au lieu de déclarer explicitement la convention d’appel pour chaque fonction.

Spécifications

Type Description
Client - IIS 7.0 sur Windows Vista
- IIS 7.5 sur Windows 7
- IIS 8.0 sur Windows 8
- IIS 10.0 sur Windows 10
Serveur - IIS 7.0 sur Windows Server 2008
- IIS 7.5 sur Windows Server 2008 R2
- IIS 8.0 sur Windows Server 2012
- IIS 8.5 sur Windows Server 2012 R2
- IIS 10.0 sur Windows Server 2016
Produit - IIS 7.0, IIS 7.5, IIS 8.0, IIS 8.5, IIS 10.0
- IIS Express 7.5, IIS Express 8.0, IIS Express 10.0
En-tête Httpserv.h

Voir aussi

Énumérations Web Server Core
REQUEST_NOTIFICATION_STATUS, énumération