Função IoRegisterContainerNotification (wdm.h)
A rotina IoRegisterContainerNotification registra um driver de modo kernel para receber notificações sobre uma classe de eventos especificada.
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 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 gerenciador de E/S chama essa função para notificar o chamador quando ocorre 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 o tipo 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 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 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 gerenciador 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 .
Retornar valor
IoRegisterContainerNotification retornará STATUS_SUCCESS se a chamada for bem-sucedida. Os possíveis valores retornados por erro incluem o seguinte:
Código de retorno | Descrição |
---|---|
STATUS_INVALID_PARAMETER_1 | Parameter 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 | 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 evento. No Windows 7, essa rotina dá suporte apenas a notificações IoSessionStateNotification, que notificam um driver de modo kernel de alterações no status de sessões de usuário nas quais o driver está interessado. Para aplicativos de 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 |
---|---|
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