Diretrizes para escrever rotinas addDevice
Considere as seguintes diretrizes de design ao escrever uma rotina AddDevice :
Se um driver de filtro determinar que sua rotina AddDevice foi chamada para um dispositivo que ele não precisa atender, o driver de filtro deverá retornar STATUS_SUCCESS para permitir que o restante da pilha do dispositivo seja carregado para o dispositivo. O driver de filtro não cria um objeto de dispositivo nem o anexa à pilha de dispositivos; o driver de filtro apenas retorna êxito e permite que o restante dos drivers seja adicionado à pilha.
Um driver deve fornecer armazenamento, geralmente na extensão de dispositivo de um objeto de dispositivo, para quaisquer objetos definidos por kernel e bloqueios de rotação executivo que ele usa. Um driver também deve fornecer armazenamento para ponteiros para determinados objetos obtidos do gerenciador de E/S ou de outros componentes do sistema.
Você pode decidir alocar memória adicional de espaço do sistema para as necessidades do driver, como para buffers de E/S de longo prazo ou uma lista lookaside. Nesse caso, uma rotina AddDevice pode chamar as seguintes rotinas:
ExAllocatePoolWithTag para memória de espaço do sistema paginada ou nãopagada
ExInitializePagedLookasideList ou ExInitializeNPagedLookasideList para inicializar uma lista de lookaside paginada ou nãopagada
Se o driver tiver um thread dedicado ao dispositivo ou aguardar qualquer objeto dispatcher definido pelo kernel, a rotina AddDevice poderá inicializar objetos dispatcher do kernel.
Se o driver usar bloqueios de rotação executivos ou fornecer o armazenamento para um bloqueio de rotação de interrupção, a rotina AddDevice poderá inicializar esses bloqueios de rotação. Consulte Spin Locks para obter mais informações.
Aperte a segurança de abertura de arquivo ao chamar IoCreateDevice.
Especifique a característica FILE_DEVICE_SECURE_OPEN na chamada para IoCreateDevice. Essa característica tem suporte no Windows NT 4.0 SP5 e posterior. Ele direciona o gerenciador de E/S para executar verificações de segurança no objeto do dispositivo para todas as solicitações abertas. Os fornecedores devem especificar essa característica em chamadas para IoCreateDevice se a característica FILE_DEVICE_SECURE_OPEN não estiver definida no INF do instalador de classe do dispositivo ou no INF do dispositivo e os drivers não executarem suas próprias verificações de segurança em aberto. (Para obter mais informações, consulte Controlando o acesso ao namespace do dispositivo.)
Se um driver definir a característica FILE_DEVICE_SECURE_OPEN quando chamar IoCreateDevice, o gerenciador de E/S aplicará o descritor de segurança do objeto do dispositivo a qualquer abertura relativa ou o nome do arquivo à direita será aberto. Por exemplo, se FILE_DEVICE_SECURE_OPEN estiver definido como \Device\foo e se \Device\foo só puder ser aberto pelo administrador, \Device\foo\abc também poderá ser aberto pelo administrador. No entanto, o gerenciador de E/S impede que um usuário normal abra \Device\foo e \Device\foo\abc.
Se um driver para um dispositivo definir essa característica, o gerenciador PnP o propagará para todos os objetos de dispositivo do dispositivo.
Importante
Os DDIs exAllocatePool discutidos neste tópico foram preteridos em Windows 10, versão 2004 e foram substituídos por ExAllocatePool2 e ExAllocatePool3. Para obter mais informações, consulte Atualizando chamadas de ExAllocatePool preteridas para ExAllocatePool2 e ExAllocatePool3.