次の方法で共有


IHttpContext::GetExecuteFlags メソッド

現在のコンテキストの実行フラグを取得します。

構文

virtual DWORD GetExecuteFlags(  
   VOID  
) const = 0;  

パラメーター

このメソッドは、パラメーターを受け取りません。

戻り値

DWORD実行フラグを含む 。

解説

メソッドは GetExecuteFlags 、現在のコンテキストの実行フラグを取得します。 次の表に、これらのフラグに使用できる値を示します。

説明
EXECUTE_FLAG_NO_HEADERS 子要求の HTTP ヘッダーを抑制します。
EXECUTE_FLAG_IGNORE_CURRENT_INTERCEPTOR この要求チェーンの現在のスクリプト マップ ハンドラーを無視します。
EXECUTE_FLAG_IGNORE_APPPOOL 子要求が同じアプリケーション プールにない場合でも、要求を実行します。
EXECUTE_FLAG_DISABLE_CUSTOM_ERROR 子要求のカスタム エラーを無効にします。
EXECUTE_FLAG_SAME_URL 子要求の URL は、親要求と同じです。
EXECUTE_FLAG_BUFFER_RESPONSE 子応答をフラッシュしないでください。は、親要求への応答を返します。
EXECUTE_FLAG_HTTP_CACHE_ELIGIBLE 子応答は引き続き、Http.sysによるキャッシュの対象となります。

次のコード例は、次のタスクを実行する HTTP モジュールを作成する方法を示しています。

  1. モジュールは 、RQ_SEND_RESPONSE 通知に登録します。

  2. モジュールは、OnSendResponse メソッドを含む CHttpModule クラスを作成します。

  3. Web クライアントが URL を要求すると、IIS はモジュールの OnSendResponse メソッドを呼び出します。 このメソッドは、次のタスクを実行します。

    1. 既存の応答バッファーをクリアし、応答の MIME の種類を設定します。

    2. メソッドを使用して、現在のコンテキストの実行フラグを GetExecuteFlags 取得します。

    3. 個々の実行フラグをテストし、状態を Web クライアントに返します。

  4. モジュールは、 クラスを CHttpModule メモリから削除してから終了します。

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

// Create the module class.
class MyHttpModule : public CHttpModule
{
public:
    REQUEST_NOTIFICATION_STATUS
    OnSendResponse(
        IN IHttpContext * pHttpContext,
        IN ISendResponseProvider * pProvider
    )
    {
        UNREFERENCED_PARAMETER( pProvider );
        
        // Clear the existing response.
        pHttpContext->GetResponse()->Clear();
        // Set the MIME type to plain text.
        pHttpContext->GetResponse()->SetHeader(
            HttpHeaderContentType,"text/plain",
            (USHORT)strlen("text/plain"),TRUE);

        WriteResponseMessage(pHttpContext,"Execute Flags:\n");

        // Retrieve the execution flags.
        DWORD dwExecuteFlags = pHttpContext->GetExecuteFlags();

        // Test for any flags.
        if (dwExecuteFlags == 0)
        {
            // Return a generic status if no flags are set.
            WriteResponseMessage(pHttpContext,"N/A\n");
        }
        // Test for individual flags and return them to a Web client.
        else
        {
            if (dwExecuteFlags & EXECUTE_FLAG_NO_HEADERS)
                WriteResponseMessage(pHttpContext,
                "EXECUTE_FLAG_NO_HEADERS\n");
            if (dwExecuteFlags & EXECUTE_FLAG_IGNORE_CURRENT_INTERCEPTOR)
                WriteResponseMessage(pHttpContext,
                "EXECUTE_FLAG_IGNORE_CURRENT_INTERCEPTOR\n");
            if (dwExecuteFlags & EXECUTE_FLAG_IGNORE_APPPOOL)
                WriteResponseMessage(pHttpContext,
                "EXECUTE_FLAG_IGNORE_APPPOOL\n");
            if (dwExecuteFlags & EXECUTE_FLAG_DISABLE_CUSTOM_ERROR)
                WriteResponseMessage(pHttpContext,
                "EXECUTE_FLAG_DISABLE_CUSTOM_ERROR\n");
            if (dwExecuteFlags & EXECUTE_FLAG_SAME_URL)
                WriteResponseMessage(pHttpContext,
                "EXECUTE_FLAG_SAME_URL\n");
            if (dwExecuteFlags & EXECUTE_FLAG_BUFFER_RESPONSE)
                WriteResponseMessage(pHttpContext,
                "EXECUTE_FLAG_BUFFER_RESPONSE\n");
            if (dwExecuteFlags & EXECUTE_FLAG_HTTP_CACHE_ELIGIBLE)
                WriteResponseMessage(pHttpContext,
                "EXECUTE_FLAG_HTTP_CACHE_ELIGIBLE\n");
        }

        // Return processing to the pipeline.
        return RQ_NOTIFICATION_FINISH_REQUEST;
    }

private:

    // Create a utility method that inserts a string value into the response.
    HRESULT WriteResponseMessage(
        IHttpContext * pHttpContext,
        PCSTR pszBuffer
    )
    {
        // Create an HRESULT to receive return values from methods.
        HRESULT hr;
        
        // Create a data chunk.
        HTTP_DATA_CHUNK dataChunk;
        // Set the chunk to a chunk in memory.
        dataChunk.DataChunkType = HttpDataChunkFromMemory;
        // Buffer for bytes written of data chunk.
        DWORD cbSent;

        // Set the chunk to the buffer.
        dataChunk.FromMemory.pBuffer =
            (PVOID) pszBuffer;
        // Set the chunk size to the buffer size.
        dataChunk.FromMemory.BufferLength =
            (USHORT) strlen(pszBuffer);
        // Insert the data chunk into the response.
        hr = pHttpContext->GetResponse()->WriteEntityChunks(
            &dataChunk,1,FALSE,TRUE,&cbSent);
        // Test for an error.
        if (FAILED(hr))
        {
            // Return the error status.
            return hr;
        }

        // Return a success status.
        return S_OK;
    }
};

// Create the module's class factory.
class MyHttpModuleFactory : public IHttpModuleFactory
{
public:
    HRESULT
    GetHttpModule(
        OUT CHttpModule ** ppModule, 
        IN IModuleAllocator * pAllocator
    )
    {
        UNREFERENCED_PARAMETER( pAllocator );

        // Create a new instance.
        MyHttpModule * pModule = new MyHttpModule;

        // Test for an error.
        if (!pModule)
        {
            // Return an error if we cannot create the instance.
            return HRESULT_FROM_WIN32( ERROR_NOT_ENOUGH_MEMORY );
        }
        else
        {
            // Return a pointer to the module.
            *ppModule = pModule;
            pModule = NULL;
            // Return a success status.
            return S_OK;
        }            
    }

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

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

    return pModuleInfo->SetRequestNotifications(
        new MyHttpModuleFactory,
        RQ_SEND_RESPONSE,
        0
    );
}

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

参照

IHttpContext インターフェイス
IHttpContext::ExecuteRequest メソッド