Compartilhar via


Função IoRegisterContainerNotification (wdm.h)

A rotina IoRegisterContainerNotification registra um driver no 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_reads_bytes_opt_(NotificationInformationLength) 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 para o seguinte valor de enumeração IO_CONTAINER_NOTIFICATION_CLASS:

  • 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 que é implementada pelo chamador (driver). O gerente de E/S chama essa função para notificar o chamador quando ocorre um evento da classe indicado 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 pelo chamador que contém a estrutura de informações de notificação para um evento da classe especificada por NotificationClass. Para NotificationClass = IoSessionStateNotification, NotificationInformation aponta para uma estrutura de 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 gerente de E/S não acessa a cópia da estrutura do driver 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 o rotina de IoUnregisterContainerNotification.

Valor de retorno

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

Código de retorno Descrição
STATUS_INVALID_PARAMETER_1 NotificationClass não é uma constante de enumeração 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 O parâmetro NotificationInformationLength não é igual ao tamanho da estrutura de informações de notificação necessária para uso com o valor de parâmetro NotificationClass especificado.
STATUS_ALREADY_COMMITTED O driver já está registrado para receber NotificationClass notificações 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.

Observações

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 no modo kernel de alterações no status das sessões de usuário nas quais o driver está interessado. Para aplicativos no 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

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

Consulte também

IO_CONTAINER_NOTIFICATION_CLASS

IO_SESSION_NOTIFICATION_FUNCTION

IO_SESSION_STATE_NOTIFICATION

IoUnregisterContainerNotification

WTSRegisterSessionNotification