Partilhar via


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.