CGlobalModule クラス

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

構文

class CGlobalModule  

メソッド

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

名前 説明
OnGlobalApplicationPreload アプリケーションをサーバー メモリにプリロードするためのグローバル レベルのインターフェイスを提供します。
OnGlobalApplicationResolveModules イベントを処理するメソッドを表します。これは、IIS が登録済みのモジュールを解決するときに発生します。
OnGlobalApplicationStart IIS がアプリケーションを起動したときに発生する GlobalApplicationStart イベントを処理するメソッドを表します。
OnGlobalApplicationStop IIS がアプリケーションをシャットダウンしたときに発生する GlobalApplicationStop イベントを処理するメソッドを表します。
OnGlobalCacheCleanup GlobalCacheCleanup イベントを処理するメソッドを表します。
OnGlobalCacheOperation IIS がキャッシュ関連の操作を実行するときに発生する、 GlobalCacheOperation イベントを処理するメソッドを表します。
OnGlobalConfigurationChange 構成ファイルに変更が加えられたときに発生する GlobalConfigurationChange イベントを処理するメソッドを表します。
OnGlobalCustomNotification モジュールがユーザー定義通知を発生させると発生する、 GlobalCustomNotification イベントを処理するメソッドを表します。
OnGlobalFileChange Web サイト内のファイルが変更されたときに発生する GlobalFileChange イベントを処理するメソッドを表します。
OnGlobalHealthCheck 正常性関連の操作の実行時に発生する GlobalHealthCheck イベントを処理するメソッドを表します。
OnGlobalPreBeginRequest 要求がパイプラインに入る前に発生する GlobalPreBeginRequest イベントを処理するメソッドを表します。
OnGlobalRSCAQuery Run-Time Status および Control クエリの実行時に発生する、 GlobalRSCAQuery イベントを処理するメソッドを表します。
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) 呼び出し規則を使用してコードをコンパイルできます。

必要条件

タイプ 説明
クライアント - 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
ヘッダー Httpserv.h

こちらもご覧ください

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