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.
Dependendo da posição de um driver específico em uma cadeia de drivers em camadas, da natureza do dispositivo subjacente e do design do driver, uma rotina driverEntry também pode ser responsável pelas seguintes tarefas:
Chamando IoAllocateDriverObjectExtension para criar e inicializar uma extensão de objeto de driver, se o driver exigir armazenamento para dados em todo o driver. A extensão do objeto driver é uma estrutura de dados específica do driver. Por exemplo, um driver pode usar sua extensão de objeto de driver para armazenar informações como um caminho do Registro ou outras informações globais.
Chamando PsCreateSystemThread para criar threads de trabalho executivo, se o driver for um driver de nível mais alto (como um driver do sistema de arquivos) que usa esses threads. Nesse caso, o driver também deve ter uma rotina de retorno de chamada do tipo WORKER_THREAD_ROUTINE, que usa um único parâmetro PVOID de entrada.
Registrando uma rotina de reinicialização . (Consulte Como escrever uma rotina de reinicialização.)
Gerenciar requisitos de inicialização específicos da classe que diferem daqueles discutidos aqui, como aqueles que um miniport específico do dispositivo ou um miniclass driver trabalhando em conjunto com um driver de porta ou de classe pode ter. Consulte a documentação específica do tipo de dispositivo no WDK (Windows Driver Kit) para obter detalhes.
Fornecendo armazenamento para recursos do sistema
Aloque objetos por dispositivo na rotina AddDevice ou na rotina Dispatch que manipula a solicitação de IRP_MN_START_DEVICE PnP, não no DriverEntry.
No entanto, um driver pode precisar alocar memória de espaço do sistema adicional para outros usos gerais do driver. Nesse caso, a rotina DriverEntry pode chamar uma (ou mais) das seguintes rotinas:
IoAllocateDriverObjectExtension, para criar uma área de contexto associada ao objeto driver
ExAllocatePoolWithTag para memória de espaço no sistema paginada ou não paginada
MmAllocateNonCachedMemory ou MmAllocateContiguousMemory para memória de espaço do sistema não paginada alinhada ao cache (usada para buffers de E/S)
Cada rotina DriverEntry é executada no contexto de um thread do sistema em IRQL = PASSIVE_LEVEL. Portanto, qualquer memória alocada com ExAllocatePoolWithTag para uso exclusivamente durante a inicialização pode ser do pool paginado, desde que o driver não controla o dispositivo que contém o arquivo de página do sistema. A memória alocada deve ser liberada com ExFreePool antes que DriverEntry retorne o controle. No entanto, um driver que define uma rotina de Reinicialização pode passar um ponteiro para essa memória quando ele chama IoRegisterDriverReinitialization, tornando a rotina de reinicialização do driver responsável por liberar a alocação de memória.
Reivindicando recursos de hardware
Drivers não PnP mais antigos reivindicaram recursos do registro. Os drivers PnP, por outro lado, não reivindicam recursos do dispositivo a partir do registro nem escrevem diretamente os requisitos de recursos no registro. Em vez disso, esses drivers relatam os requisitos em resposta a determinados IRPs PnP, como parte do processo de enumeração do gerenciador PnP. Um driver PnP recebe os recursos alocados em uma solicitação PnP IRP_MN_START_DEVICE.
Os drivers que não interagem diretamente com o gerenciador PnP, como determinados miniport drivers, podem ter requisitos de relatório diferentes impostos por um driver de classe ou porta que interage com o gerenciador PnP. Esses requisitos são específicos para a classe de dispositivo. Para obter detalhes específicos do dispositivo e específicos da classe, consulte a documentação da classe de dispositivo relevante no WDK (Windows Driver Kit).
Usando o Registro
Uma rotina DriverEntry pode usar o Registro para obter algumas das informações necessárias para inicializar o driver ou pode definir informações no registro para outros drivers ou subsistemas protegidos a serem usados. A natureza das informações depende do tipo de dispositivo. Os drivers podem acessar o registro usando rotinas ZwXxx e RtlXxx . O parâmetro RegistryPath da rotina DriverEntry aponta para uma cadeia de caracteres Unicode contada que especifica um caminho para a chave do registro do driver, \Registry\Machine\System\CurrentControlSet\Services\DriverName. A rotina deve salvar uma cópia da cadeia de caracteres, não o ponteiro em si, já que o ponteiro não é mais válido após o retorno do DriverEntry .