IO_SESSION_NOTIFICATION_FUNCTION función de devolución de llamada (wdm.h)
El tipo de función IO_SESSION_NOTIFICATION_FUNCTION define una rutina de devolución de llamada a través de la cual un controlador recibe notificaciones de cambios en el estado de las sesiones de usuario en las que el controlador está interesado.
Sintaxis
IO_SESSION_NOTIFICATION_FUNCTION IoSessionNotificationFunction;
NTSTATUS IoSessionNotificationFunction(
[in] PVOID SessionObject,
[in] PVOID IoObject,
[in] ULONG Event,
[in] PVOID Context,
[in] PVOID NotificationPayload,
[in] ULONG PayloadLength
)
{...}
Parámetros
[in] SessionObject
Puntero a un objeto de sistema opaco que contiene información sobre la sesión del usuario. El controlador puede pasar este valor de puntero a la rutina IoGetContainerInformation como valor del parámetro ContainerObject .
[in] IoObject
Puntero a un objeto de E/S propiedad del controlador. Este parámetro es el puntero de objeto de E/S que el controlador proporcionó a la rutina IoRegisterContainerNotification cuando el controlador se registró previamente para recibir notificaciones de eventos de sesión. El parámetro NotificationInformation de la rutina IoRegisterContainerNotification apunta a una estructura de IO_SESSION_STATE_NOTIFICATION cuyo miembro IoObject apunta al objeto de E/S.
[in] Event
Constante de enumeración IO_SESSION_EVENT que indica qué evento de sesión provocó la devolución de llamada de notificación.
[in] Context
Valor de contexto que el controlador proporcionó anteriormente a la rutina IoRegisterContainerNotification cuando el controlador se registró para recibir notificaciones de eventos de sesión. En la llamada IoRegisterContainerNotification , el controlador proporcionó un puntero a una estructura de IO_SESSION_STATE_NOTIFICATION cuyo miembro Context contiene el valor de contexto.
[in] NotificationPayload
Puntero a un búfer de carga que contiene una estructura de IO_SESSION_CONNECT_INFO .
[in] PayloadLength
Tamaño, en bytes, del búfer al que apunta NotificationPayload. El tamaño del búfer nunca necesita superar el valor constante IO_SESSION_MAX_PAYLOAD_SIZE, que se define en el archivo de encabezado Wdm.h.
Valor devuelto
Si la rutina se realiza correctamente, debe devolver STATUS_SUCCESS. De lo contrario, debe devolver uno de los valores de estado de error definidos en el archivo de encabezado Ntstatus.h.
Comentarios
Un controlador en modo kernel implementa esta rutina. El administrador de E/S llama a esta rutina para notificar al controlador de eventos de sesión.
Para recibir notificaciones de eventos de sesión, un controlador llama a la rutina IoRegisterContainerNotification y establece el parámetro CallbackFunction de esta rutina para que apunte a la rutina de IO_SESSION_NOTIFICATION_FUNCTION del controlador. El objeto de E/S que el controlador pasa a IoRegisterContainerNotification determina si el controlador recibirá notificaciones de eventos en una sesión de usuario determinada o de eventos en todas las sesiones. Para obtener más información, consulte IO_SESSION_STATE_NOTIFICATION.
Ejemplos
Para definir una rutina de notificación de sesión de E/S, primero debe proporcionar una declaración de función que identifique el tipo de rutina de devolución de llamada que está definiendo. Windows proporciona un conjunto de tipos de función de devolución de llamada para controladores. Declarar una función mediante los tipos de función de devolución de llamada ayuda a Code Analysis for Drivers, Static Driver Verifier (SDV) y otras herramientas de comprobación encuentran errores y es un requisito para escribir controladores para el sistema operativo Windows.
Por ejemplo, para definir una rutina de notificación de sesión de E/S denominada MyIoSessionNotification
, use el tipo de IO_SESSION_NOTIFICATION_FUNCTION como se muestra en este ejemplo de código:
IO_SESSION_NOTIFICATION_FUNCTION MyIoSessionNotification;
A continuación, implemente la rutina de devolución de llamada de la siguiente manera:
_Use_decl_annotations_
NTSTATUS
MyIoSessionNotification(
PVOID SessionObject,
PVOID IoObject,
ULONG Event,
PVOID Context,
PVOID NotificationPayload,
ULONG PayloadLength
)
{
// Function body
}
El tipo de función IO_SESSION_NOTIFICATION_FUNCTION se define en el archivo de encabezado Wdm.h. Para identificar con más precisión los errores al ejecutar las herramientas de análisis de código, asegúrese de agregar la anotación a la _Use_decl_annotations_
definición de la función. La _Use_decl_annotations_
anotación garantiza que se usen las anotaciones que se aplican al tipo de función IO_SESSION_NOTIFICATION_FUNCTION en el archivo de encabezado. Para obtener más información sobre los requisitos de las declaraciones de función, vea Declarar funciones mediante tipos de roles de función para controladores WDM. Para obtener información sobre _Use_decl_annotations_
, consulte Anotación del comportamiento de la función.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Compatible con Windows 7 y versiones posteriores del sistema operativo Windows. |
Plataforma de destino | Escritorio |
Encabezado | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h, Fltkernel.h) |
IRQL | Se llama en IRQL <= APC_LEVEL. |