次の方法で共有


CGlobalModule クラス

グローバル レベルの HTTP モジュールの基本クラスを定義します。

構文

class CGlobalModule  

メソッド

次の表に、 クラスによって公開されるメソッドの一覧を CGlobalModule 示します。

名前 説明
OnGlobalApplicationPreload deddc775-1ab0-492c-bda0-b32be5d4f4cc
OnGlobalApplicationResolveModules IIS が登録済みモジュールを GlobalApplicationResolveModules 解決するときに発生するイベントを処理するメソッドを表します。
OnGlobalApplicationStart IIS がアプリケーションを起動したときに発生するイベントを GlobalApplicationStart 処理するメソッドを表します。
OnGlobalApplicationStop IIS がアプリケーションをシャットダウンしたときに発生するイベントを処理 GlobalApplicationStop するメソッドを表します。
OnGlobalCacheCleanup GlobalCacheCleanup イベントを処理するメソッドを表します。
OnGlobalCacheOperation IIS がキャッシュ関連の操作を GlobalCacheOperation 実行するときに発生するイベントを処理するメソッドを表します。
OnGlobalConfigurationChange 構成ファイルに変更が加えられたときに発生するイベントを処理 GlobalConfigurationChange するメソッドを表します。
OnGlobalCustomNotification イベントを処理するメソッドを GlobalCustomNotification 表します。これは、モジュールがユーザー定義の通知を生成したときに発生します。
OnGlobalFileChange Web サイト内のファイルが変更されたときに発生するイベントを処理 GlobalFileChange するメソッドを表します。
OnGlobalHealthCheck 正常性関連の操作が実行されたときに発生するイベントを処理 GlobalHealthCheck するメソッドを表します。
OnGlobalPreBeginRequest 要求がパイプラインに入る前に発生するイベントを処理 GlobalPreBeginRequest するメソッドを表します。
OnGlobalRSCAQuery イベントを処理するメソッドを GlobalRSCAQuery 表します。これは、Run-Time Status クエリと Control クエリが実行されたときに発生します。
OnGlobalStopListening IIS が新しい要求の受け入れを GlobalStopListening 停止したときに発生するイベントを処理するメソッドを表します。
OnGlobalThreadCleanup IIS がスレッド プールにスレッドを GlobalThreadCleanup 返したときに発生するイベントを処理するメソッドを表します。
OnGlobalTraceEvent トレース イベントが発生したときに発生するイベントを GlobalTraceEvent 処理するメソッドを表します。
Terminate グローバル モジュールの処理が完了したときに IIS が呼び出すメソッドを表します。

派生クラス

このクラスには、派生クラスが含まれています。

解説

クラスは CGlobalModule 、グローバル レベルの HTTP モジュールの基本クラスです。 グローバル レベルの HTTP モジュールには、 から CGlobalModule継承するクラスが含まれている必要があります。 CGlobalModule は、グローバル レベルのイベントが発生したときにグローバル レベルの通知を処理するために IIS 7 が呼び出すメソッドを定義します。 HTTP モジュールは、モジュールのエクスポートされた RegisterModule 関数で通知の一覧を定義することで、特定のイベントに登録できます。 グローバル レベルのモジュールの処理が完了したら、 モジュールで CGlobalModule::Terminate メソッドを使用してメモリからインスタンスを削除 CGlobalModule する必要があります。

次のコード例では、単純な "Hello World" グローバル レベルの HTTP モジュールを作成する方法を示します。 モジュールは、 からCGlobalModule派生したクラスのインスタンスを作成するエクスポートされた RegisterModule 関数を定義します。 クラスを作成できない場合、関数はエラー コードで終了します。それ以外の場合、関数は IHttpModuleRegistrationInfo::SetRequestNotifications メソッドを呼び出して 、GL_PRE_BEGIN_REQUEST 通知に登録します。

通知が GL_PRE_BEGIN_REQUEST 発生すると、IIS はモジュールの CGlobalModule::OnGlobalPreBeginRequest メソッドを呼び出して通知を処理します。 メソッドはプライベート メソッドを呼び出して、イベント ビューアーのアプリケーション ログにイベントを書き込んだ後、GL_NOTIFICATION_CONTINUEを返して IIS に通知し、他の通知の処理を続行します。 処理が完了すると、IIS はモジュールの CGlobalModule::Terminate メソッドを呼び出して、 クラスをメモリから削除します。

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

モジュールは RegisterModule 関数をエクスポートする必要があります。 この関数をエクスポートするには、プロジェクトのモジュール定義 (.def) ファイルを作成するか、スイッチを使用してモジュールを /EXPORT:RegisterModule コンパイルします。 詳細については、「 チュートリアル: ネイティブ コードを使用したGlobal-Level HTTP モジュールの作成」を参照してください。

必要に応じて、各関数の呼び出し規約を __stdcall (/Gz) 明示的に宣言するのではなく、呼び出し規約を使用してコードをコンパイルできます。

要件

Type 説明
Client - Windows Vista 上の IIS 7.0
- Windows 7 上の IIS 7.5
- Windows 8 の IIS 8.0
- Windows 10の IIS 10.0
サーバー - Windows Server 2008 の IIS 7.0
- Windows Server 2008 R2 上の IIS 7.5
- Windows Server 2012 上の IIS 8.0
- Windows Server 2012 R2 上の IIS 8.5
- Windows Server 2016上の IIS 10.0
製品 - 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

参照

Web Server Core クラス
Native-Code HTTP モジュールの作成
CHttpModule クラス