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