Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O driver de um dispositivo lento ou um dispositivo que você raramente usa (como uma unidade de CD/DVD) pode resolver muitos problemas de "espera" criando um thread de sistema dedicado ao dispositivo. Além disso, a maioria dos drivers do sistema de arquivos utiliza threads de trabalho do sistema e fornece rotinas de retorno de chamada para essas threads de trabalho.
Se um driver de dispositivo tiver seu próprio contexto de thread ou for executado em um contexto de thread do sistema, ele poderá usar objetos de sincronização para coordenação. O tópico dedicado ao dispositivo ou a rotina de callback de tópico de trabalho do driver de nível mais alto pode sincronizar operações em um objeto dispatcher, como um objeto de evento ou objeto semáforo, em uma região de comunicação compartilhada da extensão do dispositivo do driver. Por exemplo, um thread dedicado ao dispositivo pode aguardar um objeto de dispatcher compartilhado, enquanto o dispositivo do thread não está em uso, chamando KeWaitForSingleObject para um semáforo. Até que o driver do dispositivo seja chamado para realizar uma operação de E/S, seu thread de espera não usará tempo de CPU. Quando o driver é chamado, ele configura o semáforo para o estado Sinalizado.
Um driver pode chamar PsCreateSystemThread para criar um thread dedicado ao driver ou dispositivo e, em seguida, chamar KeSetBasePriorityThread para definir a prioridade base do thread. O driver deve especificar um valor de prioridade que evite inversões de prioridade em tempo de execução em computadores SMP. Ou seja, definir a base de prioridade de uma thread criada pelo driver muito alta pode criar atrasos na execução de threads com prioridade mais baixa que enviam solicitações de E/S para o referido driver.
Como objetos de thread são eles mesmos um tipo de objeto dispatcher, um thread pode esperar que outro thread termine. Para obter o ponteiro do objeto thread associado a um thread, um driver pode chamar ObReferenceObjectByHandle, passando o identificador de thread recebido de PsCreateSystemThread.
Um thread pode chamar KeDelayExecutionThread para aguardar um intervalo que possa ser uma fatia de tempo completa ou mais longa. A granularidade de um intervalo KeDelayExecutionThread é de cerca de 10 milissegundos. Como KeDelayExecutionThread é uma rotina controlada por temporizador, a granularidade de seu intervalo é ligeiramente mais rápida ou lenta do que 10 milissegundos, dependendo da plataforma.