Condividi tramite


Verifica SCSI

La funzionalità di verifica SCSI di Driver Verifier monitora l'interazione tra un driver miniport SCSI e il driver della porta. Se il driver miniport usa un uso improprio di una routine, risponde erroneamente a una richiesta del driver della porta o richiede un tempo eccessivo per rispondere a una richiesta, viene eseguito un controllo dei bug.

Questa opzione Driver Verifier è disponibile solo in Windows XP e versioni successive.

Violazioni rilevate dalla verifica SCSI

L'opzione Verifica SCSI può rilevare diversi usi impropri delle routine SCSI. È anche possibile disabilitare singolarmente determinati controlli.

Quando un driver miniport SCSI esegue il commit di una delle violazioni seguenti, Driver Verifier emetterà un controllo bug 0xF1.

  • Il driver di miniport passa un argomento non valido a ScsiPortInitialize.

  • Il driver miniport chiama ScsiPortStallExecution e specifica un ritardo superiore a 0,1 secondi, bloccando il processore per un periodo di tempo eccessivo.

  • Il driver di porta chiama una routine del driver miniport e il driver miniport richiede più di 0,5 secondi per eseguirlo. La routine FindAdapter è esente e la routine HwInitialize ha un limite di 5 secondi.

  • Il driver miniport completa una richiesta più volte.

  • Il driver miniport completa una routine con uno stato SRB non valido.

  • Il driver miniport chiama ScsiPortNotification per richiedere NextLuRequest, ma una richiesta senza tag è ancora attiva.

  • Il driver miniport passa un indirizzo virtuale non valido a ScsiPortGetPhysicalAddress. Ciò significa in genere che l'indirizzo fornito non è mappato all'area del buffer comune.

  • Il periodo di blocco per il reset del bus termina, ma il driver miniport ha ancora richieste pendenti.

Vedere Controllo bug 0xF1 (SCSI_VERIFIER_DETECTED_VIOLATION) per un elenco completo dei parametri di controllo dei bug.

Oltre a queste violazioni, la verifica SCSI monitora anche l'accesso alla memoria del driver miniport per un uso non corretto. Due violazioni comuni della memoria effettuate dai driver miniport accedono a un'estensione SRB dopo il completamento di una richiesta e accedono a DataBuffer di SRB quando il driver miniport non ha specificato MapBuffers.

Le violazioni di memoria di questo tipo si tradurranno generalmente nell'emissione della verifica bug 0xD1 (DRIVER_IRQL_NOT_LESS_OR_EQUAL).

l'attivazione di questa opzione

La procedura per attivare l'opzione Verifica SCSI è diversa dalle procedure per l'attivazione di altre opzioni di Verifica driver.

Per attivare la verifica SCSI

  1. Usando Gestione Verificatore Driver o la riga di comando Verifier.exe, avviare una verifica del miniport driver. Poiché la verifica SCSI non sarà disponibile come opzione, è necessario selezionare almeno un'altra opzione di verifica driver. Per informazioni dettagliate, vedere Selezionare le opzioni del verifica driver e Selezionare i driver da verificare.

  2. Aprire il Registro di sistema usando regedit.exe. Nella chiave HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ScsiPort aggiungere una sottochiave denominata Verifier. All'interno di tale chiave aggiungere una voce di REG_DWORD denominata VerifyLevel. Il valore assegnato a questa voce determinerà quali test di verifica SCSI saranno attivi. Il valore 0x1 darà la verifica massima.

  3. Riavviare il computer.

Se il valore VerifyLevel non esiste o è uguale a 0xFFFFFFFF, la verifica SCSI verrà disabilitata.

I singoli bit nel valore VerifyLevel possono essere usati per controllare esattamente quali test verranno eseguiti. Bit zero (0x1) abilita determinati test; i bit 28, 29, 30 e 31 disabilitano determinati test. Pertanto, è possibile ottenere la verifica massima usando il valore 0x00000001.

Gli effetti di ogni bit sono i seguenti:

Pezzo Valore Effetto

0

0x1

Driver Verifier monitorerà l'accesso alla memoria del driver miniport e verificherà l'uso improprio dei buffer di memoria.

28

0x10000000

Driver Verifier non emetterà un controllo di bug quando la routine HwAdapterControl richiede più di 0,5 secondi per il completamento.

29

0x20000000

Driver Verifier non eseguirà una verifica degli errori quando termina un periodo di attesa per la reimpostazione e ci sono ancora richieste pendenti su un'unità logica.

30

0x40000000

Driver Verifier non emetterà un controllo di bug quando il driver miniport chiama ScsiPortNotification con NextLuRequest mentre una richiesta senza tag è ancora attiva.

31

0x80000000

Driver Verifier non emetterà un controllo bug quando il completamento della routine HwInitialize richiede più di 5 secondi.

Nella maggior parte dei casi, l'impostazione consigliata è 0xD0000001. In questo modo, tutti i test SCSI Verifier tranne il limite di tempo per HwAdapterControl, il limite di tempo per HwInitialize e il divieto di effettuare più richieste a un'unità logica. Questi tre test sono spesso troppo rigorosi.

Se è collegato un debugger del kernel, è possibile modificare il livello di verifica SCSI dopo il ciclo di avvio. A tale scopo, usare il comando debugger:

kd> ed scsiport!SpVrfyLevel Level 

Questo comando consente di impostare un nuovo valore per Level. Usando questo metodo, è possibile modificare i bit alti (0x10000000 tramite 0x8000000) in qualsiasi momento. Tuttavia, se si vuole modificare il bit basso (0x1), è necessario farlo durante il processo di avvio (nel punto di interruzione iniziale del debugger del kernel).

Analogamente, se si vuole disattivare completamente la verifica SCSI, è necessario impostare Level su 0xFFFFFFFF al punto di interruzione iniziale.

Nota Il valore 0xF0000000 disabiliterà tutti i test, ma i moduli di verifica SCSI verranno comunque caricati. Usare questo valore se desideri disabilitare la verifica, ma intendi abilitare i test high-bit in un secondo momento. D'altra parte, il valore 0xFFFFFFFF impedisce che i moduli vengano caricati completamente; se questo valore viene usato durante l'avvio, non sarà possibile abilitare la verifica SCSI senza riavviare.

Attivazione senza riavvio

In generale, non è possibile attivare o disattivare la verifica SCSI senza riavviare il computer in qualsiasi sistema operativo Windows. Il driver ScsiPort.sys legge la voce del Registro di sistema VerifyLevel solo quando viene caricato, in genere in fase di avvio. Tuttavia, se il driver ScsiPort.sys non è caricato quando si aggiunge la voce del Registro di sistema, o se viene scaricato e ricaricato, è possibile abilitare la verifica SCSI in Windows XP e nelle versioni successive di Windows senza riavviare il computer.