Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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.