Compartilhar via


Pontos a serem considerados para rotinas do StartIo

Tenha os seguintes pontos em mente ao implementar uma rotina StartIo :

  • Uma rotina StartIo deve sincronizar seu acesso a um dispositivo físico e a quaisquer informações de estado ou recursos compartilhados que o driver mantém na extensão do dispositivo com outras rotinas do driver que acessam o mesmo dispositivo, local de memória ou recursos.

    Se a rotina StartIo compartilhar o dispositivo ou o estado com o ISR, ele deverá usar KeSynchronizeExecution para chamar uma rotina SynchCritSection fornecida pelo driver para programar o dispositivo ou acessar o estado compartilhado. Para obter mais informações, consulte Usando seções críticas.

    Se a rotina StartIo compartilhar o estado ou os recursos com rotinas diferentes do ISR, ela deverá proteger o estado compartilhado ou os recursos com um bloqueio de rotação executivo inicializado pelo driver para o qual o driver fornece o armazenamento. Para obter mais informações, consulte Spin Locks.

  • Se um driver de dispositivo não WDM monolítico configurar um objeto controlador, sua rotina StartIo poderá usar o objeto controlador para sincronizar operações por meio de um dispositivo físico compartilhado com dispositivos anexados (semelhantes).

    Consulte Objetos do Controlador para obter mais informações.

  • A menos que um driver de nível superior estreitamente acoplado divida previamente grandes solicitações de transferência de DMA para o seu driver de dispositivo subjacente, a rotina StartIo do driver de dispositivo subjacente deve dividir grandes solicitações de transferência em partições de transferência parciais, e o driver deve realizar uma sequência de operações de dispositivo para transferência parcial. Cada transferência parcial deve ser dimensionada para atender às funcionalidades do hardware: os recursos do dispositivo do driver ou, para um dispositivo DMA subordinado, os recursos do controlador DMA do sistema, o que tiver restrições mais rigorosas.

    Consulte Objetos do Adaptador e DMA para obter mais informações sobre como usar o DMA do sistema ou bus-master.

  • A rotina StartIo de um driver que usa DMA deve sincronizar transferências usando um objeto de adaptador.

  • Uma rotina StartIo é executada em IRQL = DISPATCH_LEVEL, o que restringe o conjunto de rotinas de suporte que ele pode chamar.

    Por exemplo, uma rotina StartIo não pode acessar nem alocar memória paginável e não pode esperar que um objeto dispatcher seja definido como o estado sinalizado. Por outro lado, uma rotina StartIo pode adquirir e liberar um spin lock de nível executivo alocado pelo driver com KeAcquireSpinLockAtDpcLevel e KeReleaseSpinLockFromDpcLevel, que são mais rápidos que KeAcquireSpinLock e KeReleaseSpinLock.

    Consulte Gerenciamento de Prioridades de Hardware e Spin Locks para obter mais informações.

  • Se o driver mantém IRPs em um estado cancelável, sua rotina StartIo deve verificar se o IRP de entrada já foi cancelado antes de iniciar qualquer processamento para essa solicitação em seu dispositivo. Para obter mais informações, consulte Canceling IRPs.