Partilhar via


Diretrizes para escrever rotinas AddDevice

Considere as seguintes diretrizes de design ao escrever uma AddDevice rotina:

  • Se um driver de filtro determinar que a sua rotina AddDevice foi chamada para um dispositivo que não precisa de serviço, o driver de filtro deve retornar STATUS_SUCCESS para permitir que o restante da pilha de dispositivos seja carregado para ele. O driver de filtro não cria um objeto de dispositivo nem o anexa à pilha de dispositivos; O driver de filtro apenas retorna o sucesso e permite que o resto dos drivers sejam adicionados à pilha.

  • Um driver deve fornecer armazenamento, geralmente na extensão de dispositivo de um objeto de dispositivo, para quaisquer objetos definidos pelo kernel e bloqueios de spin de nível executivo que utiliza. Um driver também deve fornecer armazenamento para ponteiros para determinados objetos obtidos do gerenciador de E/S ou outros componentes do sistema.

    Você pode decidir alocar memória adicional de espaço do sistema para as necessidades do driver, como buffers de E/S de longo prazo ou uma lista de reserva antecipada. Em caso afirmativo, uma rotina AddDevice pode chamar as seguintes rotinas:

    ExAllocatePoolWithTag para memória de espaço do sistema paginada ou não paginada

    ExInitializePagedLookasideList ou ExInitializeNPagedLookasideList para inicializar uma lista de lookaside paginada ou não paginada

  • Se o driver tiver um thread dedicado ao dispositivo ou aguardar por qualquer objeto de dispatcher definido pelo kernel, a rotina AddDevice poderá inicializar objetos de dispatcher do kernel.

  • Se o driver usar qualquer barramento de rotação executivo ou fornecer o armazenamento para um barramento de rotação de interrupção, a rotina AddDevice poderá inicializar esses barramentos de rotação. Consulte Spin Locks para obter mais informações.

  • Aumente a segurança de abertura de arquivo ao chamar IoCreateDevice.

    Especifique a característica FILE_DEVICE_SECURE_OPEN na chamada para IoCreateDevice. Esta característica é suportada no Windows NT 4.0 SP5 e posterior. Ele direciona o gerenciador de E/S para executar verificações de segurança em relação ao objeto de 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 aberturas. (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 gestor de I/O aplicará o descritor de segurança do objeto de dispositivo a qualquer abertura relativa ou aberturas por nome de ficheiro com sufixo. Por exemplo, se FILE_DEVICE_SECURE_OPEN estiver definido para \Device\foo e se \Device\foo só puder ser aberto pelo administrador, \Device\foo\abc também poderá ser aberto pelo administrador. O gerenciador de E/S, no entanto, impede que um usuário normal abra \Device\foo e \Device\foo\abc.

    Se um driver para um dispositivo definir esta característica, o gestor PnP propaga-a para todos os objetos de dispositivo desse dispositivo.

Importante

As DDIs ExAllocatePool discutidas neste tópico foram preteridas no Windows 10, versão 2004 e substituídas por ExAllocatePool2 e ExAllocatePool3. Para obter mais informações, consulte Atualizando chamadas ExAllocatePool preteridas para ExAllocatePool2 e ExAllocatePool3.