Función IoRegisterContainerNotification (wdm.h)

La rutina IoRegisterContainerNotification registra un controlador en modo kernel para recibir notificaciones sobre una clase de eventos especificada.

Sintaxis

NTSTATUS IoRegisterContainerNotification(
  [in]           IO_CONTAINER_NOTIFICATION_CLASS     NotificationClass,
  [in]           PIO_CONTAINER_NOTIFICATION_FUNCTION CallbackFunction,
  [in, optional] PVOID                               NotificationInformation,
  [in]           ULONG                               NotificationInformationLength,
  [out]          PVOID                               CallbackRegistration
);

Parámetros

[in] NotificationClass

Especifica la clase de eventos para los que el autor de la llamada (controlador) solicita notificaciones. Establezca este parámetro en el siguiente valor de enumeración IO_CONTAINER_NOTIFICATION_CLASS :

  • IoSessionStateNotification
Para obtener más información, vea la sección Comentarios que se muestra más adelante.

[in] CallbackFunction

Puntero a una función de devolución de llamada implementada por el autor de la llamada (controlador). El administrador de E/S llama a esta función para notificar al autor de la llamada cuando se produce un evento de la clase indicada por NotificationClass . Para NotificationClass = IoSessionStateNotification, este parámetro es un puntero a una función de IO_SESSION_NOTIFICATION_FUNCTION proporcionada por el autor de la llamada. Sin embargo, el llamador debe convertir este puntero de función al tipo PIO_CONTAINER_NOTIFICATION_FUNCTION para que coincida con el tipo de parámetro. Para obtener más información, vea la sección Comentarios que se muestra más adelante.

[in, optional] NotificationInformation

Puntero a un búfer asignado por el autor de la llamada que contiene la estructura de información de notificación para un evento de la clase especificada por NotificationClass. En NotificationClass = IoSessionStateNotification, NotificationInformation apunta a una estructura de IO_SESSION_STATE_NOTIFICATION . El llamador debe rellenar esta estructura antes de llamar a IoRegisterContainerNotification. Durante esta llamada, IoRegisterContainerNotification copia los datos de esta estructura y el administrador de E/S no tiene acceso a la copia del controlador de la estructura después de que la llamada devuelva.

[in] NotificationInformationLength

Tamaño, en bytes, de la estructura de información de notificación contenida en el búfer al que apunta NotificationInformation. En NotificationClass = IoSessionStateNotification, establezca este parámetro en sizeof(IO_SESSION_STATE_NOTIFICATION).

[out] CallbackRegistration

Puntero a una ubicación en la que esta rutina escribe la dirección de un objeto de registro de notificaciones de contenedor. Este objeto es un objeto de sistema opaco en el que el administrador de E/S almacena información sobre el registro de notificaciones de contenedor del autor de la llamada. Cuando las notificaciones ya no son necesarias, el autor de la llamada cancela el registro pasando este puntero de objeto a la rutina IoUnregisterContainerNotification .

Valor devuelto

IoRegisterContainerNotification devuelve STATUS_SUCCESS si la llamada es correcta. Entre los valores devueltos de error posibles se incluyen los siguientes:

Código devuelto Descripción
STATUS_INVALID_PARAMETER_1
Parameter NotificationClass no es una constante de enumeración IO_CONTAINER_NOTIFICATION_CLASS válida.
STATUS_INVALID_PARAMETER_3
La información de la estructura a la que apunta NotificationInformation es incorrecta.
STATUS_INVALID_PARAMETER_4
El parámetro NotificationInformationLength no es igual al tamaño de la estructura de información de notificación necesaria para su uso con el valor de parámetro NotificationClass especificado.
STATUS_ALREADY_COMMITTED
El controlador ya está registrado para recibir notificaciones NotificationClass de eventos asociados al objeto de E/S especificado.
STATUS_INSUFFICIENT_RESOURCES
El sistema operativo no tiene recursos suficientes para crear el registro solicitado.

Observaciones

Esta rutina puede admitir notificaciones de eventos en una variedad de clases de eventos. En Windows 7, esta rutina solo admite notificaciones ioSessionStateNotification , que notifican a un controlador en modo kernel los cambios en el estado de las sesiones de usuario en las que está interesado el controlador. En el caso de las aplicaciones en modo de usuario, la función WTSRegisterSessionNotification rellena un rol similar.

El tipo de puntero de función para el parámetro CallbackFunction se define de la siguiente manera:

typedef NTSTATUS
  (*PIO_CONTAINER_NOTIFICATION_FUNCTION)(
    );

El llamador debe convertir el puntero de función de devolución de llamada a este tipo para que coincida con el tipo de parámetro CallbackFunction . IoRegisterContainerNotification determina el tipo real del puntero de función de devolución de llamada del parámetro NotificationClass . En NotificationClass = IoSessionStateNotification, CallbackFunction apunta a una función IO_SESSION_NOTIFICATION_FUNCTION .

Requisitos

   
Cliente mínimo compatible Disponible en Windows 7 y versiones posteriores del sistema operativo Windows.
Plataforma de destino Universal
Header wdm.h (include Wdm.h, Ntddk.h, Ntifs.h, Fltkernel.h)
Library NtosKrnl.lib
Archivo DLL NtosKrnl.exe
IRQL <= APC_LEVEL

Consulte también

IO_CONTAINER_NOTIFICATION_CLASS

IO_SESSION_NOTIFICATION_FUNCTION

IO_SESSION_STATE_NOTIFICATION

IoUnregisterContainerNotification

WTSRegisterSessionNotification