Partilhar via


Pontos a considerar para as rotinas StartIo

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

  • Uma rotina StartIo deve sincronizar seu acesso a um dispositivo físico e a quaisquer informações ou recursos de estado 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, ela 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 estado ou recursos com rotinas diferentes do ISR, ela deverá proteger o estado ou recursos compartilhados 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 monolítico não-WDM configurar um objeto de controlador, sua rotina StartIo poderá usar o objeto de controlador para sincronizar operações por meio de um dispositivo físico compartilhado com dispositivos conectados (semelhantes).

    Consulte Controller Objects para obter mais informações.

  • A menos que um driver de nível superior, estreitamente acoplado, pré-divida grandes solicitações de transferência DMA para o seu driver de dispositivo subjacente, a rotina StartIo do driver de dispositivo subjacente deve dividir essas grandes solicitações de transferência em intervalos de transferência parcial, e o driver deve realizar uma sequência de operações de dispositivo de transferência parcial. Cada transferência parcial deve ser dimensionada de acordo com as capacidades do hardware: as capacidades do dispositivo do condutor ou, para um dispositivo DMA subordinado, as capacidades do controlador DMA do sistema, consoante o que tiver restrições mais rigorosas.

    Consulte Objetos do adaptador e DMA para obter mais informações sobre como usar o sistema ou o DMA mestre de barramento.

  • 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 ela 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 para o estado sinalizado. Por outro lado, uma rotina StartIo pode adquirir e liberar um bloqueio de spin executivo alocado por driver com KeAcquireSpinLockAtDpcLevel e KeReleaseSpinLockFromDpcLevel, que rodam mais rápido do que KeAcquireSpinLock e KeReleaseSpinLock.

    Consulte Gerir Prioridades de Hardware e Bloqueios de Giro 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 Cancelando IRPs.