Função IoRegisterContainerNotification (wdm.h)

A rotina IoRegisterContainerNotification registra um driver do modo kernel para receber notificações sobre uma classe especificada de eventos.

Sintaxe

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 a classe de eventos para os quais o chamador (driver) solicita notificações. Defina esse parâmetro como o seguinte IO_CONTAINER_NOTIFICATION_CLASS valor de enumeração:

  • IoSessionStateNotification
Para obter mais informações, consulte a seção Comentários a seguir.

[in] CallbackFunction

Um ponteiro para uma função de retorno de chamada implementada pelo chamador (driver). O gerente de E/S chama essa função para notificar o chamador quando ocorrer um evento da classe indicada por NotificationClass . Para NotificationClass = IoSessionStateNotification, esse parâmetro é um ponteiro para uma função de IO_SESSION_NOTIFICATION_FUNCTION fornecida pelo chamador. No entanto, o chamador deve converter esse ponteiro de função para digitar PIO_CONTAINER_NOTIFICATION_FUNCTION para corresponder ao tipo de parâmetro. Para obter mais informações, consulte a seção Comentários a seguir.

[in, optional] NotificationInformation

Um ponteiro para um buffer alocado por chamador que contém a estrutura de informações de notificação para um evento da classe especificado por NotificationClass. Para NotificationClass = IoSessionStateNotification, NotificationInformation aponta para uma estrutura IO_SESSION_STATE_NOTIFICATION . O chamador deve preencher essa estrutura antes de chamar IoRegisterContainerNotification. Durante essa chamada, IoRegisterContainerNotification copia os dados dessa estrutura e o gerenciador de E/S não acessa a cópia do driver da estrutura após o retorno da chamada.

[in] NotificationInformationLength

O tamanho, em bytes, da estrutura de informações de notificação contida no buffer apontado por NotificationInformation. Para NotificationClass = IoSessionStateNotification, defina esse parâmetro como sizeof(IO_SESSION_STATE_NOTIFICATION).

[out] CallbackRegistration

Um ponteiro para um local no qual essa rotina grava o endereço de um objeto de registro de notificação de contêiner. Esse objeto é um objeto opaco do sistema no qual o gerente de E/S armazena informações sobre o registro de notificação de contêiner do chamador. Quando as notificações não são mais necessárias, o chamador cancela o registro passando esse ponteiro de objeto para a rotina IoUnregisterContainerNotification .

Valor retornado

IoRegisterContainerNotification retornará STATUS_SUCCESS se a chamada for bem-sucedida. Os possíveis valores de retorno de erro incluem o seguinte:

Código de retorno Descrição
STATUS_INVALID_PARAMETER_1
Parameter NotificationClass não é uma constante de enumeração de IO_CONTAINER_NOTIFICATION_CLASS válida.
STATUS_INVALID_PARAMETER_3
As informações na estrutura apontadas por NotificationInformation estão incorretas.
STATUS_INVALID_PARAMETER_4
Parameter NotificationInformationLength não é igual ao tamanho da estrutura de informações de notificação necessária para uso com o valor do parâmetro NotificationClass especificado.
STATUS_ALREADY_COMMITTED
O driver já está registrado para receber notificações NotificationClass de eventos associados ao objeto de E/S especificado.
STATUS_INSUFFICIENT_RESOURCES
O sistema operacional não tem recursos suficientes para criar o registro solicitado.

Comentários

Essa rotina pode potencialmente dar suporte a notificações de eventos em uma variedade de classes de eventos. No Windows 7, essa rotina dá suporte apenas a notificações IoSessionStateNotification , que notificam um driver do modo kernel de alterações no status das sessões de usuário nas quais o driver está interessado. Para aplicativos do modo de usuário, a função WTSRegisterSessionNotification preenche uma função semelhante.

O tipo de ponteiro de função para o parâmetro CallbackFunction é definido da seguinte maneira:

typedef NTSTATUS
  (*PIO_CONTAINER_NOTIFICATION_FUNCTION)(
    );

O chamador deve converter o ponteiro da função de retorno de chamada para esse tipo para corresponder ao tipo de parâmetro CallbackFunction . IoRegisterContainerNotification determina o tipo real do ponteiro da função de retorno de chamada do parâmetro NotificationClass . Para NotificationClass = IoSessionStateNotification, CallbackFunction aponta para uma função IO_SESSION_NOTIFICATION_FUNCTION .

Requisitos

   
Cliente mínimo com suporte Disponível no Windows 7 e versões posteriores do sistema operacional Windows.
Plataforma de Destino Universal
Cabeçalho wdm.h (include Wdm.h, Ntddk.h, Ntifs.h, Fltkernel.h)
Biblioteca NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

Confira também

IO_CONTAINER_NOTIFICATION_CLASS

IO_SESSION_NOTIFICATION_FUNCTION

IO_SESSION_STATE_NOTIFICATION

IoUnregisterContainerNotification

WTSRegisterSessionNotification