1

CHttpModuleすべてのリクエストにカスタム ヘッダーを追加する単純なものを作成しました。

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

class AppendHeaderModule : public CHttpModule {
public:
    REQUEST_NOTIFICATION_STATUS
        OnBeginRequest(
        IN IHttpContext * pHttpContext,
        IN IHttpEventProvider * pProvider
        )
    {
        UNREFERENCED_PARAMETER(pProvider);

        PCSTR testHeaderName = "Foo";
        PCSTR testHeader = "bar";
        pHttpContext->GetResponse()->SetHeader(testHeaderName, testHeader, (USHORT)strlen(testHeader), true);

        return RQ_NOTIFICATION_CONTINUE;
    }

    VOID Terminate() {
        delete this;
    }

    AppendHeaderModule() { }
    ~AppendHeaderModule() { }
};

class AppendHeaderModuleFactory : public IHttpModuleFactory {
public:
    HRESULT
        GetHttpModule(
        OUT CHttpModule ** ppModule,
        IN IModuleAllocator * pAllocator
        )
    {
        UNREFERENCED_PARAMETER(pAllocator);

        AppendHeaderModule* pModule = new AppendHeaderModule;

        if (!pModule) {
            return HRESULT_FROM_WIN32(ERROR_NOT_ENOUGH_MEMORY);
        }
        else {
            *ppModule = pModule;
            pModule = NULL;
            return S_OK;
        }
    }

    void Terminate() {
        delete this;
    }
};


HRESULT __stdcall
RegisterModule(
DWORD dwServerVersion,
IHttpModuleRegistrationInfo * pModuleInfo,
IHttpServer * pGlobalInfo
)
{
    UNREFERENCED_PARAMETER(dwServerVersion);
    UNREFERENCED_PARAMETER(pGlobalInfo);

    AppendHeaderModuleFactory* pModule = new AppendHeaderModuleFactory;
    if (pModule == NULL) 
        return HRESULT_FROM_WIN32(ERROR_NOT_ENOUGH_MEMORY);

    return pModuleInfo->SetRequestNotifications(pModule, RQ_BEGIN_REQUEST, 0);
}

にコピーしC:\Windows\System32\inetsrv、モジュールを登録して、リストに追加しました。ただし、どのリクエストにも追加のヘッダーが表示されません。同様のマネージ モジュールを作成し、GAC にインストールして登録したところ、正常に動作しました。しかし、このネイティブ モジュールは何もしないようです。要求を処理するネイティブ モジュールを取得するために必要な別の手順はありますか?

また、問題があるかどうかはわかりませんが、要求は ASP.NET サイトに対して行われています。ネイティブ ハンドラーは ASP.NET で実行されませんか?

4

1 に答える 1