Verificação de SCSI

O recurso de Verificação SCSI do Verificador de Driver monitora a interação entre um driver de miniporto SCSI e o driver de porta. Se o driver de miniporto usar indevidamente uma rotina, responder incorretamente a uma solicitação do driver de porta ou levar um tempo excessivo para responder a uma solicitação, uma verificação de bug será emitida.

Essa opção Verificador de Driver só está disponível no Windows XP e posterior.

Violações detectadas pela verificação SCSI

A opção verificação SCSI pode detectar vários usos indevidos de rotinas SCSI. Também é possível desabilitar individualmente certas dessas verificações.

Quando um driver de miniporto SCSI comete uma das seguintes violações, o Verificador de Driver emitirá bug check 0xF1.

  • O driver de miniporto passa um argumento incorreto para ScsiPortInitialize.

  • O driver miniport chama ScsiPortStallExecution e especifica um atraso maior que 0,1 segundo, interrompendo o processador por um tempo excessivo.

  • O driver de porta chama uma rotina de driver de miniporto e o driver de miniporto leva mais de 0,5 segundo para executá-lo. (A rotina FindAdapter é isenta e a rotina HwInitialize tem permissão de 5 segundos.)

  • O driver miniport completa uma solicitação mais de uma vez.

  • O driver de miniporto conclui uma rotina com um status SRB inválido.

  • O driver de miniporto chama ScsiPortNotification para solicitar NextLuRequest, mas uma solicitação não registrada ainda está ativa.

  • O driver de miniporto passa um endereço virtual inválido para ScsiPortGetPhysicalAddress. (Isso geralmente significa que o endereço fornecido não é mapeado para a área de buffer comum.)

  • O período de retenção de redefinição de ônibus termina, mas o motorista do miniporto ainda tem solicitações pendentes.

Consulte Bug Check 0xF1 (SCSI_VERIFIER_DETECTED_VIOLATION) para obter uma lista completa dos parâmetros do Bug Check.

Além dessas violações, a Verificação SCSI também monitora o acesso à memória do driver de miniporto para uso inadequado. Duas violações comuns de memória feitas por drivers de miniporto são acessar uma extensão SRB após a conclusão de uma solicitação e acessar o DataBuffer de um SRB quando o driver de miniporto não especificou MapBuffers.

As violações de memória desse tipo geralmente resultarão na emissão de Verificação de Erro 0xD1 (DRIVER_IRQL_NOT_LESS_OR_EQUAL).

Ativando essa opção

O procedimento para ativar a opção de Verificação SCSI é diferente dos procedimentos para ativar outras opções do Verificador de Driver.

Para ativar a verificação do SCSI

  1. Usando o Driver Verifier Manager ou a linha de comando Verifier.exe, inicie uma verificação do driver de miniporto. Como a Verificação SCSI não estará disponível como uma opção, você deve selecionar pelo menos uma outra opção verificador de driver. Confira a seleção de opções do Verificador de Driver e a seleção de drivers a serem verificados para obter detalhes.

  2. Abra o registro usando regedit.exe. Na chave HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ScsiPort , adicione uma subchave chamada Verificador. Dentro dessa chave, adicione uma entrada de REG_DWORD chamada VerifyLevel. O valor atribuído a essa entrada determinará quais testes de Verificação SCSI estarão ativos. O valor 0x1 fornecerá verificação máxima.

  3. Reinicialize o computador.

Se o valor VerifyLevel não existir ou for igual a 0xFFFFFFFF, a Verificação SCSI será desabilitada.

Os bits individuais no valor VerifyLevel podem ser usados para controlar exatamente quais testes serão executados. O bit zero (0x1) habilita determinados testes; bits 28, 29, 30 e 31 desabilitam determinados testes. Portanto, a verificação máxima pode ser obtida usando o valor 0x00000001.

Os efeitos de cada bit são os seguintes:

bit Valor Efeito

0

0x1

O Verificador de Driver monitorará o acesso à memória do driver de miniporto e verificará se há uso inadequado de buffers de memória.

28

0x10000000

O Verificador de Driver não emitirá uma verificação de bug quando a rotina HwAdapterControl levar mais de 0,5 segundo para ser concluída.

29

0x20000000

O Verificador de Driver não emitirá uma verificação de falha quando um período de espera de redefinição terminar e ainda houver solicitações pendentes em uma unidade lógica.

30

0x40000000

O Verificador de Driver não emitirá uma verificação de bug quando o driver de miniporto chamar ScsiPortNotification com NextLuRequest enquanto uma solicitação não registrada ainda estiver ativa.

31

0x80000000

O Verificador de Driver não emitirá uma verificação de bug quando a rotina HwInitialize levar mais de 5 segundos para ser concluída.

Na maioria dos casos, a configuração recomendada é 0xD0000001. Isso habilita todos os testes do Verificador SCSI , exceto o limite de tempo em HwAdapterControl, o limite de tempo em HwInitialize e a proibição de várias solicitações para uma unidade lógica. Esses três testes são muitas vezes muito rigorosos.

Se um depurador do kernel estiver anexado, será possível alterar o nível de verificação SCSI após o ciclo de inicialização. Para fazer isso, use o comando de depurador:

kd> ed scsiport!SpVrfyLevel Level 

Esse comando permite que você defina um novo valor para Level. Usando esse método, você pode alterar os bits altos (0x10000000 por 0x8000000) a qualquer momento. No entanto, se você quiser alterar o bit baixo (0x1), deverá fazê-lo durante o processo de inicialização (no ponto de interrupção inicial do depurador do kernel).

Da mesma forma, se você quiser desativar completamente a Verificação SCSI, precisará definir Level como 0xFFFFFFFF no ponto de interrupção inicial.

Nota O valor 0xF0000000 desabilitará todos os testes, mas os módulos de Verificação SCSI ainda serão carregados. Use esse valor se quiser desabilitar a verificação, mas pretende habilitar os testes de bit alto posteriormente. Por outro lado, o valor 0xFFFFFFFF impede que os módulos sejam carregados inteiramente; se esse valor for usado durante a inicialização, não será possível habilitar a Verificação SCSI sem reinicialização.

Ativando sem reinicialização

Em geral, você não pode ativar ou desativar a Verificação SCSI sem reiniciar ("reinicializar") o computador em qualquer sistema operacional Windows. O driver ScsiPort.sys lê a entrada do Registro VerifyLevel somente quando é carregado, o que ocorre normalmente no momento da inicialização. No entanto, se o driver ScsiPort.sys não for carregado quando você adicionar a entrada do Registro ou se ela for descarregada e recarregada, você poderá habilitar a Verificação SCSI no Windows XP e versões posteriores do Windows sem reiniciar o computador.