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.
A partir do Windows 8.1, a rotina ExDeleteTimer exclui um objeto de temporizador que foi criado pela rotina ExAllocateTimer . Este objeto de temporizador é uma estrutura de EX_TIMER alocada pelo sistema cujos membros são opacos para os drivers. Antes de um objeto de temporizador ser excluído, ExDeleteTimer desabilita outras operações de temporizador no objeto e cancela ou conclui qualquer operação pendente no objeto que possa estar em andamento.
Depois que um driver chama ExDeleteTimer, essa rotina executa várias etapas para garantir que ele possa excluir com segurança o objeto do temporizador. Primeiro, ExDeleteTimer marca o objeto de temporizador como desativado para impedir que o driver inicie uma nova operação de temporizador que usa o objeto. Depois que o objeto de temporizador é desabilitado, uma chamada para a rotina ExSetTimer ou ExCancelTimer retorna imediatamente FALSE e não executa nenhuma operação. Além disso, uma segunda chamada para ExDeleteTimer retorna FALSE e não executa nenhuma operação.
Em seguida, ExDeleteTimer verifica se um temporizador ainda está pendente de uma chamada anterior para ExDeleteTimer. A desativação de um objeto de temporizador não cancela um temporizador que foi definido antes de o objeto ser desativado. Em qualquer um dos dois casos a seguir, um temporizador que foi definido anteriormente pode expirar depois que o objeto de temporizador é desativado:
- O temporizador é periódico.
- O temporizador é pontual (ou não periódico) e ainda não expirou.
Um temporizador periódico nunca pode expirar mais de uma vez depois que o objeto de temporizador é desativado.
Se o driver implementar uma rotina de retorno de chamada ExTimerCallback , o parâmetro Timer para essa rotina terá a garantia de ser sempre um ponteiro válido para o objeto de temporizador (uma estrutura de EX_TIMER ), mesmo que o temporizador expire depois que o objeto de temporizador for desativado.
Se nenhum temporizador estiver pendente, ExDeleteTimer excluirá o objeto de temporizador e retornará sem esperar.
Se um temporizador estiver pendente quando ExDeleteTimer for chamado, os valores dos parâmetros Cancel e Wait fornecidos pelo driver para essa rotina controlarão o comportamento da rotina. O parâmetro Cancel informa ao ExDeleteTimer se deve tentar cancelar um temporizador pendente. O parâmetro Wait informa ao ExDeleteTimer se deve esperar para retornar até que o objeto do temporizador seja excluído.
Se Cancel for FALSE (nesse caso, Wait deve ser FALSE) e um temporizador estiver pendente, ExDeleteTimer permite que o temporizador expire antes que o objeto do temporizador seja eliminado. Nesse caso, ExDeleteTimer marca o objeto de timer para indicar que ele deve ser excluído depois que o temporizador pendente expirar (e qualquer último retorno de chamada para a rotina ExTimerCallback for concluído). Em seguida, ExDeleteTimer retorna sem esperar que o temporizador termine de expirar ou que o objeto seja excluído.
Se Cancel for TRUE, ExDeleteTimer tentará cancelar um temporizador pendente antes que ele expire. ExDeleteTimer retornará TRUE se cancelar com êxito o temporizador. ExDeleteTimer retorna FALSE se não puder cancelar o temporizador, que é o caso de um temporizador one-shot que já expirou ou está em processo de expiração. ExDeleteTimer também retorna FALSE se o temporizador (one-shot ou periódico) foi cancelado antes da chamada ExDeleteTimer ou se o temporizador nunca foi definido.
Se Cancel é TRUE e Wait é FALSE, o ExDeleteTimer nunca bloqueará a thread que está a chamar. Se o objeto de temporizador não puder ser excluído imediatamente, ExDeleteTimer marcará o objeto de temporizador para indicar que ele deve ser excluído depois que o temporizador pendente terminar de expirar e retornará imediatamente sem esperar que o temporizador expire ou que o objeto seja excluído.
Se Cancel e Wait forem TRUE, ExDeleteTimer bloqueará o thread de chamada se o objeto de timer não puder ser excluído imediatamente. O ExDeleteTimer espera, se necessário, que o temporizador termine de expirar e que qualquer retorno de chamada para uma rotina ExTimerCallback implementada pelo driver seja concluído. Em seguida, ExDeleteTimer exclui o objeto de timer e chama a rotina ExTimerDeleteCallback , se o driver implementar essa rotina. Finalmente, ExDeleteTimer retorna.
Um driver pode chamar ExDeleteTimer da rotina ExTimerCallback do driver, que é executado em IRQL = DISPATCH_LEVEL, mas o driver deve definir o parâmetro Wait nesta chamada como FALSE.
Como opção, um driver pode implementar uma rotina de retorno de chamada ExTimerDeleteCallback que é executada depois que um objeto de timer é excluído. Normalmente, uma rotina ExTimerDeleteCallback liberta todos os recursos do sistema que o driver alocou para usar com o objeto temporizador.
ExDeleteTimer agenda uma rotina ExTimerDeleteCallback implementada pelo driver para ser executada depois que o objeto de timer é excluído, momento em que o ponteiro para esse objeto não é mais válido. Se o parâmetro Wait for TRUE na chamada ExDeleteTimer , o retorno de chamada para a rotina ExTimerDeleteCallback será concluído antes que ExDeleteTimer retorne. Se Wait for falso, a rotina ExTimerDeleteCallback poderá ser executada antes ou depois de ExDeleteTimer retornar.
Para obter mais informações, consulte Rotinas de temporizador ExXxxe objetos EX_TIMER.