Share via


Verificação scsi

O recurso 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 miniporta usar incorretamente uma rotina, responder incorretamente a uma solicitação do driver de porta ou levar um tempo excessivo para responder a uma solicitação, um bug marcar será emitido.

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

Violações detectadas pela verificação do SCSI

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

Quando um driver de miniporta SCSI confirmar uma das seguintes violações, o Verificador de Driver emitirá marcar 0xF1 de bugs.

  • O driver de miniporta passa um argumento inválido para ScsiPortInitialize.

  • O driver de miniporto chama ScsiPortStallExecution e especifica um atraso de mais de 0,1 segundo, parando o processador por um período excessivo de tempo.

  • O driver de porta chama uma rotina de driver de miniporta e o driver de miniporta 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 de miniporta conclui uma solicitação mais de uma vez.

  • O driver de miniporta conclui uma rotina com uma status SRB inválida.

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

  • O driver de miniporta 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 barramento termina, mas o driver de miniporta ainda tem solicitações pendentes.

Consulte 0xF1 de Verificação de Bugs (SCSI_VERIFIER_DETECTED_VIOLATION) para obter uma lista completa dos parâmetros de marcar de bugs.

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 tiver especificado MapBuffers.

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

Ativando essa opção

O procedimento para ativar a opção 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 Gerenciador de Verificador de Driver ou a linha de comando Verifier.exe, inicie uma verificação do driver de miniporta. 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. Consulte Selecionando opções de verificador de driver e Selecionando drivers a serem verificados para obter detalhes.

  2. Abra o registro usando regedit.exe. Na chaveHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ScsiPort , adicione uma subchave chamada Verifier. Dentro dessa chave, adicione uma entrada de REG_DWORD chamada VerifyLevel. O valor atribuído a essa entrada determinará quais testes de Verificação do 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 marcar para uso inadequado de buffers de memória.

28

0x10000000

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

29

0x20000000

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

30

0x40000000

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

31

0x80000000

O Verificador de Driver não emitirá um bug marcar 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 geralmente são muito rigorosos.

Se um depurador de kernel estiver anexado, será possível alterar o nível de Verificação do SCSI após o ciclo de inicialização. Para fazer isso, use o comando do 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 meio de 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 do 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 totalmente carregados; 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 do SCSI sem reiniciar ("reinicializar") o computador em qualquer sistema operacional Windows. O driver ScsiPort.sys lê a entrada do Registro VerifyLevel somente quando ela é carregada, que normalmente é no momento da inicialização. No entanto, se o driver de 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 em versões posteriores do Windows sem reiniciar o computador.