Freigeben über


GLOBAL_NOTIFICATION_STATUS-Enumeration

Definiert die Rückgabewerte für Benachrichtigungen auf globaler Ebene.

Syntax

typedef enum GLOBAL_NOTIFICATION_STATUS{  
   GL_NOTIFICATION_CONTINUE,  
   GL_NOTIFICATION_HANDLED  
};  

Members

Membername Beschreibung
GL_NOTIFICATION_CONTINUE Gibt an, dass IIS weitere Benachrichtigungen auf globaler Ebene verarbeiten soll.
GL_NOTIFICATION_HANDLED Gibt an, dass IIS die Verarbeitung von Benachrichtigungen auf globaler Ebene abgeschlossen hat und keine zusätzlichen Benachrichtigungen auf globaler Ebene verarbeiten sollte.

Bemerkungen

Die Member der GLOBAL_NOTIFICATION_STATUS Enumeration werden als Rückgabewerte von Benachrichtigungen auf globaler Ebene verwendet, und die Member helfen, den Prozessfluss innerhalb der Benachrichtigungsverarbeitungspipeline auf globaler Ebene zu steuern. Wenn Sie beispielsweise von einem Benachrichtigungshandler auf globaler Ebene zurückgeben GL_NOTIFICATION_CONTINUE , wird IIS angewiesen, weitere Benachrichtigungen auf globaler Ebene weiter zu verarbeiten, während die Rückgabe GL_NOTIFICATION_HANDLED von einem Benachrichtigungshandler auf globaler Ebene IIS darüber informiert, dass die Verarbeitung auf globaler Ebene abgeschlossen ist und IIS keine zusätzlichen Benachrichtigungen auf globaler Ebene verarbeiten sollte.

Beispiel

Im folgenden Codebeispiel wird veranschaulicht, wie Ein einfaches HTTP-Modul auf globaler Ebene "Hallo Welt" erstellt wird. Das Modul definiert eine exportierte RegisterModule-Funktion, die eine instance einer Klasse erstellt, die von CGlobalModule abgeleitet ist. Wenn die -Klasse nicht erstellt werden kann, wird die Funktion mit einem Fehlercode beendet. Andernfalls ruft die Funktion die IHttpModuleRegistrationInfo::SetRequestNotifications-Methode auf, um sich für die GL_PRE_BEGIN_REQUEST-Benachrichtigung zu registrieren.

Wenn eine GL_PRE_BEGIN_REQUEST Benachrichtigung auftritt, ruft IIS die CGlobalModule::OnGlobalPreBeginRequest-Methode des Moduls auf, um die Benachrichtigung zu verarbeiten. Die Methode ruft eine private Methode auf, um ein Ereignis in das Anwendungsprotokoll des Ereignisanzeige zu schreiben, und gibt dann zurückGL_NOTIFICATION_CONTINUE, um IIS zu benachrichtigen, um die Verarbeitung anderer Benachrichtigungen fortzusetzen. Wenn die Verarbeitung abgeschlossen ist, ruft IIS die CGlobalModule::Terminate-Methode des Moduls auf, um die Klasse aus dem Arbeitsspeicher zu entfernen.

#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 );
}

Ihr Modul muss die RegisterModule Funktion exportieren. Sie können diese Funktion exportieren, indem Sie eine Moduldefinitionsdatei (.def) für Ihr Projekt erstellen, oder Sie können das Modul mithilfe des /EXPORT:RegisterModule Switches kompilieren. Weitere Informationen finden Sie unter Exemplarische Vorgehensweise: Erstellen eines Global-Level HTTP-Moduls mithilfe von nativem Code.

Sie können den Code optional kompilieren, indem Sie die __stdcall (/Gz) aufrufende Konvention verwenden, anstatt die aufrufende Konvention für jede Funktion explizit zu deklarieren.

Anforderungen

type BESCHREIBUNG
Client – IIS 7.0 unter Windows Vista
– IIS 7.5 unter Windows 7
– IIS 8.0 unter Windows 8
– IIS 10.0 auf Windows 10
Server – IIS 7.0 unter Windows Server 2008
– IIS 7.5 unter Windows Server 2008 R2
– IIS 8.0 unter Windows Server 2012
– IIS 8.5 unter Windows Server 2012 R2
– IIS 10.0 auf Windows Server 2016
Produkt – 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
Header Httpserv.h

Weitere Informationen

Webserver-Core-Enumerationen
REQUEST_NOTIFICATION_STATUS-Enumeration