Compartir a través de


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_reads_bytes_opt_(NotificationInformationLength) 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 autor de la llamada 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 se devuelva la llamada.

[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 opaco del sistema 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 se realiza correctamente. Entre los posibles valores devueltos de error 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.

Comentarios

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 que el controlador está interesado. 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 de IO_SESSION_NOTIFICATION_FUNCTION .

Requisitos

Requisito Value
Cliente mínimo compatible Disponible en Windows 7 y versiones posteriores del sistema operativo Windows.
Plataforma de destino Universal
Encabezado 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