CGlobalModule::OnGlobalApplicationStop Method
Represents the method that will handle a GlobalApplicationStop event, which occurs when IIS shuts down an application.
Note: |
|---|
The IHttpApplicationStopProvider interface is a type definition of an IHttpApplicationProvider interface. |
When a global module has registered for the GL_APPLICATION_STOP event notification, IIS will call the module's OnGlobalApplicationStop method when IIS shuts down an application.
Note: |
|---|
Global modules can register for the GlobalApplicationStop event notification by registering for GL_APPLICATION_STOP in the module's RegisterModule function. |
The following code example demonstrates how to create a global-level HTTP module that registers for the GL_APPLICATION_STOP notification. When IIS shuts down an application, it will call the example module's OnGlobalApplicationStop method. This method will write an entry in the application log of the Windows Event Viewer and then exit.
#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_STOP notification. GLOBAL_NOTIFICATION_STATUS OnGlobalApplicationStop( IN IHttpApplicationStopProvider * pProvider ) { UNREFERENCED_PARAMETER( pProvider ); WriteEventViewerLog("OnGlobalApplicationStop"); 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_APPLICATION_STOP ); }
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 Global-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.
Type | Description |
|---|---|
Client |
|
Server |
|
Product | IIS 7.0, IIS 7.5, IIS Express 7.5, IIS 8.0 |
Header | Httpserv.h |

Note: