Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
Export (0) Print
Expand All

IPreBeginRequestProvider::GetHttpContext Method

IIS 7.0

Retrieves an IHttpContext interface.

virtual IHttpContext* GetHttpContext(
) = 0;

This method takes no parameters.

A pointer to an IHttpContext.

The GetHttpContext method retrieves a pointer to an IHttpContext interface, which allows global-level notifications access to the context for a request. This is in contrast to request-level notifications, for which a pointer to an IHttpContext interface is provided.

The following code example demonstrates how to create a global-level HTTP module that uses the GetHttpContext function to retrieve a pointer to an IHttpContext interface. The module calls the context's IHttpContext::GetSite method to retrieve a pointer to an IHttpSite interface, and then calls the IHttpSite::GetSiteName method to retrieve the name of the site that is processing the request.

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

// Create the module's global class.
class MyGlobalModule : public CGlobalModule
        IN IPreBeginRequestProvider * pProvider
        UNREFERENCED_PARAMETER( pProvider );

        // Retrieve a pointer to the IHttpContext for the request.
        IHttpContext * pHttpContext = pProvider->GetHttpContext();
        // Test for an error.
        if (NULL != pHttpContext)
            // Retrieve a pointer to an IHttpSite class.
            IHttpSite * pHttpSite = pHttpContext->GetSite();
            // Test for an error.
            if (NULL != pHttpSite)
                // Retrieve the site name.
                PCWSTR pwszSiteName = pHttpSite->GetSiteName();
                // Test for an error.
                if (NULL != pwszSiteName)
                    // Allocate storage for the site name.
                    char * pszSiteName =
                        (char *) pHttpContext->AllocateRequestMemory(
                        (DWORD) wcslen(pwszSiteName)+1 );
                    // Test for an error.
                    if (NULL != pszSiteName)
                        // Convert the site name.
                        // Create an array of strings.
                        LPCSTR szBuffer[2] = {"Site Name",""};
                        // Store the site name.
                        szBuffer[1] = pszSiteName;
                        // Write the strings to the Event Viewer.
        // Return processing to the pipeline.

    VOID Terminate()
        // Remove the class from memory.
        delete this;

        // Open a handle to the Event Viewer.
        MyGlobalModule::m_hEventLog = RegisterEventSource( NULL,"IISADMIN" );

        // Test if the handle for the Event Viewer is open.
        if (NULL != MyGlobalModule::m_hEventLog)
            DeregisterEventSource( MyGlobalModule::m_hEventLog );
            MyGlobalModule::m_hEventLog = NULL;


    // Handle for the Event Viewer.
    HANDLE m_hEventLog;

    // Define a method that writes to the Event Viewer.
    BOOL WriteEventViewerLog(LPCSTR szBuffer[], WORD wNumStrings)
        // Test whether the handle for the Event Viewer is open.
        if (NULL != MyGlobalModule::m_hEventLog)
            // Write any strings to the Event Viewer and return.
            return ReportEvent(
                0, 0, NULL, wNumStrings,
                0, szBuffer, NULL );
        return FALSE;

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

    // Create an instance of the global module class.
    MyGlobalModule * pGlobalModule = new MyGlobalModule;
    // Test for an error.
    if (NULL == pGlobalModule)
    // Set the global notifications and exit.
    return pModuleInfo->SetGlobalNotifications(
        pGlobalModule, GL_PRE_BEGIN_REQUEST );

Your module must export the RegisterModule function. You can export this function by creating a module definition (.def) file for your project, or you can compile the module by using the /EXPORT:RegisterModule switch. For more information, see Walkthrough: Creating a Request-Level HTTP Module By Using Native Code.

You can optionally compile the code by using the __stdcall (/Gz) calling convention instead of explicitly declaring the calling convention for each function.




  • IIS 7.0 on Windows Vista

  • IIS 7.5 on Windows 7

  • IIS Express 7.5 on Windows XP, Windows Vista, Windows 7

  • IIS 8.0 on Windows 8 Client


  • IIS 7.0 on Windows Server 2008

  • IIS 7.5 on Windows Server 2008 R2

  • IIS Express 7.5 on Windows Server 2003, Windows Server 2008, Windows Server 2008 R2

  • IIS 8.0 on Windows Server 2012


IIS 7.0, IIS 7.5, IIS Express 7.5, IIS 8.0



Community Additions

© 2015 Microsoft