Compartir a través de


Función IoRegisterContainerNotification (wdm.h)

El IoRegisterContainerNotification rutina 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 siguiente sección Comentarios.

[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 autor de la llamada 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 siguiente sección Comentarios.

[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. Para 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. Para 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 se realiza correctamente. Entre los valores devueltos de error posibles se incluyen los siguientes:

Código devuelto Descripción
STATUS_INVALID_PARAMETER_1 El parámetro 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 NotificationClass notificaciones 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 ioSessionStateNotification notificaciones, que notifican a un controlador en modo kernel los cambios en el estado de las sesiones de usuario que el controlador está interesado. Para 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 callbackFunction. ioRegisterContainerNotification determina el tipo real del puntero de función de devolución de llamada del parámetro notificationClass. Para NotificationClass = IoSessionStateNotification, callbackFunction apunta a una función de IO_SESSION_NOTIFICATION_FUNCTION.

Requisitos

Requisito Valor
cliente mínimo admitido Disponible en Windows 7 y versiones posteriores del sistema operativo Windows.
de la plataforma de destino de Universal
encabezado de wdm.h (include Wdm.h, Ntddk.h, Ntifs.h, Fltkernel.h)
biblioteca de NtosKrnl.lib
DLL de NtosKrnl.exe
irQL <= APC_LEVEL

Consulte también

IO_CONTAINER_NOTIFICATION_CLASS

IO_SESSION_NOTIFICATION_FUNCTION

IO_SESSION_STATE_NOTIFICATION

IoUnregisterContainerNotification

WTSRegisterSessionNotification