IHttpModuleRegistrationInfo::SetRequestNotifications (Método)
Registra las notificaciones de nivel de solicitud para un módulo.
Sintaxis
virtual HRESULT SetRequestNotifications(
IN IHttpModuleFactory* pModuleFactory,
IN DWORD dwRequestNotifications,
IN DWORD dwPostRequestNotifications
) = 0;
Parámetros
pModuleFactory
[IN] Puntero a una interfaz IHttpModuleFactory .
dwRequestNotifications
[IN] Valor de máscara de bits que contiene las notificaciones de solicitud que se van a registrar. (Definido en Httpserv.h.)
dwPostRequestNotifications
[IN] Valor de máscara de bits que contiene las notificaciones posteriores al evento que se van a registrar. (Definido en Httpserv.h.)
Valor devuelto
Una clase HRESULT
. Entre los valores posibles se incluyen los que se indican en la tabla siguiente, entre otros.
Value | Descripción |
---|---|
S_OK | Indica que la operación se realizó correctamente. |
ERROR_ALREADY_EXISTS | Indica que el módulo ya se ha registrado. |
Comentarios
El SetRequestNotifications
método registra las notificaciones de nivel de solicitud para una clase CHttpModule . Un módulo puede registrarse para dos eventos para cada notificación: la notificación de eventos, tal como se indica en la máscara de bits del dwRequestNotifications
parámetro y la notificación posterior al evento, tal como se indica en la máscara de bits del dwPostRequestNotifications
parámetro .
Por ejemplo, un módulo HTTP podría registrarse para la notificación RQ_AUTHENTICATE_REQUEST y la notificación posterior al evento para esa misma notificación. Al hacerlo, el módulo podría proporcionar funcionalidad de procesamiento adicional para la notificación de eventos y limpiar los detalles de procesamiento en la notificación posterior al evento.
Nota
Algunos eventos no tienen notificación posterior al evento. Use 0 para el dwPostRequestNotifications
parámetro cuando no desee notificación o cuando no se admita la notificación posterior al evento.
Nota
Los valores de máscara de bits para las notificaciones de nivel de solicitud se definen en el archivo Httpserv.h.
El SetRequestNotifications
método requiere un puntero a una interfaz IHttpModuleFactory , que IIS usará para crear una instancia de una CHttpModule
clase. Este generador debe controlar la creación de la instancia de la CHttpModule
clase y devolver los mensajes de error si no se puede crear la clase.
Ejemplo
En el ejemplo siguiente se muestra cómo crear un módulo HTTP que use la función RegisterModule y los métodos siguientes para registrar un módulo para las notificaciones de nivel global y de nivel de solicitud.
El
SetRequestNotifications
método registra unaCHttpModule
clase para una notificación onBeginRequest de nivel de solicitud.El método SetPriorityForRequestNotification establece la prioridad del módulo para las notificaciones de nivel de solicitud.
El método SetGlobalNotifications registra una clase CGlobalModule para una notificación OnGlobalPreBeginRequest de nivel global.
El método SetPriorityForGlobalNotification establece la prioridad del módulo para la notificación de nivel global.
El módulo responde a las notificaciones registradas y escribe entradas en el registro de la aplicación en el Visor de eventos.
Nota
Las entradas del Visor de eventos mostrarán "IISADMIN" como origen del evento.
#define _WINSOCKAPI_
#include <windows.h>
#include <sal.h>
#include <httpserv.h>
// Create a global handle for the Event Viewer.
HANDLE g_hEventLog;
// Define the method that writes to the Event Viewer.
BOOL WriteEventViewerLog(LPCSTR szBuffer[], WORD wNumStrings);
// Create the HTTP module class.
class MyHttpModule : public CHttpModule
{
public:
REQUEST_NOTIFICATION_STATUS
OnBeginRequest(
IN IHttpContext * pHttpContext,
IN IHttpEventProvider * pProvider
)
{
UNREFERENCED_PARAMETER( pHttpContext );
UNREFERENCED_PARAMETER( pProvider );
// Create an array of strings.
LPCSTR szBuffer[2] = {"MyHttpModule","OnBeginRequest"};
// Write the strings to the Event Viewer.
WriteEventViewerLog(szBuffer,2);
// Return processing to the pipeline.
return RQ_NOTIFICATION_CONTINUE;
}
};
// Create the module's global class.
class MyGlobalModule : public CGlobalModule
{
public:
GLOBAL_NOTIFICATION_STATUS
OnGlobalPreBeginRequest(
IN IPreBeginRequestProvider * pProvider
)
{
UNREFERENCED_PARAMETER( pProvider );
// Create an array of strings.
LPCSTR szBuffer[2] = {"MyGlobalModule","OnGlobalPreBeginRequest"};
// Write the strings to the Event Viewer.
WriteEventViewerLog(szBuffer,2);
// Return processing to the pipeline.
return GL_NOTIFICATION_CONTINUE;
}
VOID Terminate()
{
// Remove the class from memory.
delete this;
}
MyGlobalModule()
{
// Open a handle to the Event Viewer.
g_hEventLog = RegisterEventSource( NULL,"IISADMIN" );
}
~MyGlobalModule()
{
// Test whether the handle for the Event Viewer is open.
if (NULL != g_hEventLog)
{
DeregisterEventSource( g_hEventLog );
g_hEventLog = NULL;
}
}
};
// 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 the factory 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;
}
};
// 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 != g_hEventLog)
{
// Write any strings to the Event Viewer and return.
return ReportEvent(
g_hEventLog,
EVENTLOG_INFORMATION_TYPE,
0, 0, NULL, wNumStrings,
0, szBuffer, 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 HRESULT to receive return values from methods.
HRESULT hr;
// Set the request notifications.
hr = pModuleInfo->SetRequestNotifications(
new MyHttpModuleFactory,
RQ_BEGIN_REQUEST, 0 );
// Test for an error and exit if necessary.
if (FAILED(hr))
{
return hr;
}
// Set the request priority.
hr = pModuleInfo->SetPriorityForRequestNotification(
RQ_BEGIN_REQUEST,PRIORITY_ALIAS_MEDIUM);
// Test for an error and exit if necessary.
if (FAILED(hr))
{
return hr;
}
// 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.
hr = pModuleInfo->SetGlobalNotifications(
pGlobalModule, GL_PRE_BEGIN_REQUEST );
// Test for an error and exit if necessary.
if (FAILED(hr))
{
return hr;
}
// Set the global priority.
hr = pModuleInfo->SetPriorityForGlobalNotification(
GL_PRE_BEGIN_REQUEST,PRIORITY_ALIAS_LOW);
// Test for an error and exit if necessary.
if (FAILED(hr))
{
return hr;
}
// Return a success status;
return S_OK;
}
El módulo debe exportar la RegisterModule
función. Puede exportar esta función mediante la creación de un archivo de definición de módulo (.def) para el proyecto, o bien puede compilar el módulo mediante el /EXPORT:RegisterModule
modificador . Para obtener más información, vea Tutorial: Creación de un módulo HTTP de Request-Level mediante código nativo.
Opcionalmente, puede compilar el código mediante la __stdcall (/Gz)
convención de llamada en lugar de declarar explícitamente la convención de llamada para cada función.
Requisitos
Tipo | Descripción |
---|---|
Remoto | - IIS 7.0 en Windows Vista - IIS 7.5 en Windows 7 - IIS 8.0 en Windows 8 - IIS 10.0 en Windows 10 |
Servidor | - IIS 7.0 en Windows Server 2008 - IIS 7.5 en Windows Server 2008 R2 - IIS 8.0 en Windows Server 2012 - IIS 8.5 en Windows Server 2012 R2 - IIS 10.0 en Windows Server 2016 |
Producto | - 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 |
Encabezado | Httpserv.h |
Consulte también
IHttpModuleRegistrationInfo (interfaz)
IHttpModuleRegistrationInfo::SetGlobalNotifications (Método)
IHttpModuleRegistrationInfo::SetPriorityForGlobalNotification (Método)
IHttpModuleRegistrationInfo::SetPriorityForRequestNotification (Método)
función PFN_REGISTERMODULE