Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Um driver pode criar um objeto de callback, através do qual outros drivers podem solicitar notificação de condições definidas pelo driver de criação. A figura a seguir mostra as etapas envolvidas na definição de um objeto de retorno de chamada.
Antes de criar o objeto, o driver chama InitializeObjectAttributes para definir seus atributos. Um objeto de retorno de chamada deve ter um nome, que não pode corresponder ao nome de um retorno de chamada definido pelo sistema; Ele pode ter quaisquer outros atributos que seu criador considere apropriados, normalmente OBJ_CASE_INSENSITIVE. Em seguida, o driver chama ExCreateCallback, passando um ponteiro para os atributos inicializados e um local no qual receber um identificador para o objeto de retorno de chamada. Ele também passa por dois booleanos, indicando se o sistema deve criar o objeto de retorno de chamada se tal objeto nomeado ainda não existir, e se o objeto deve permitir mais de uma rotina de retorno de chamada registrada.
O controlador define as condições para as quais chamará as rotinas de retorno de chamada registadas. As condições assumem a forma de dois argumentos, cada um apontando para um parâmetro definido pelo driver que cria o callback. Você deve documentar essas condições, juntamente com o nome do objeto de retorno de chamada e o IRQL no qual ele solicita notificação, para clientes do driver.
Quando a condição de retorno de chamada ocorre, o driver chama ExNotifyCallback, passando seu identificador para o objeto de retorno de chamada e os dois argumentos. Em seguida, o sistema chama todas as rotinas de chamada de retorno registadas para o objeto de chamada de retorno, na ordem em que foram registadas, passando os dois argumentos e um ponteiro para o contexto fornecido quando a rotina foi registada. O driver deve chamar ExNotifyCallback no IRQL <= DISPATCH_LEVEL; o sistema chama as rotinas de retorno de chamada no mesmo IRQL em que o driver fez essa chamada.
Depois que todas as operações tiverem sido concluídas com o objeto de callback, o driver que criou o callback deve chamar ObDereferenceObject para diminuir sua contagem de referência e garantir que o objeto seja excluído.