Udostępnij za pośrednictwem


Weryfikacja SCSI

Funkcja weryfikacji SCSI Weryfikatora sterowników monitoruje interakcję między sterownikiem miniportu SCSI a sterownikiem portu. Jeśli sterownik miniportu nieprawidłowo używa procedury, odpowiada niepoprawnie na żądanie od sterownika portu lub zajmuje zbyt dużo czasu, aby odpowiedzieć na żądanie, zostanie wystawiona kontrola błędów.

Ta opcja weryfikatora sterowników jest dostępna tylko w systemie Windows XP i nowszych wersjach.

Naruszenia wykryte przez weryfikację SCSI

Opcja weryfikacji SCSI może wykryć kilka nadużyć procedur SCSI. Istnieje również możliwość indywidualnego wyłączenia niektórych z tych kontroli.

Gdy sterownik miniportu SCSI popełni jedno z następujących naruszeń, weryfikator sterowników zgłosi błąd krytyczny 0xF1.

  • Sterownik miniportu przekazuje zły argument do ScsiPortInitialize.

  • Sterownik miniportu wywołuje funkcję ScsiPortStallExecution i określa opóźnienie dłuższe niż 0,1 sekundy, co powoduje zatrzymanie procesora przez zbyt długi czas.

  • Sterownik portu wywołuje procedurę sterownika miniportu, a sterownik miniportu trwa dłużej niż 0,5 sekundy, aby go wykonać. (Procedura FindAdapter jest zwolniona, a procedura HwInitialize ma 5 sekund).

  • Sterownik miniportu wykonuje żądanie więcej niż raz.

  • Sterownik miniportu kończy procedurę z nieprawidłowym stanem SRB.

  • Sterownik miniportu wywołuje ScsiPortNotification, aby poprosić o NextLuRequest, ale nietagowane żądanie jest nadal aktywne.

  • Sterownik miniportu przekazuje nieprawidłowy adres wirtualny do ScsiPortGetPhysicalAddress. (Zazwyczaj oznacza to, że podany adres nie jest przyporządkowany do wspólnego obszaru buforu.)

  • Okres wstrzymania resetowania autobusu kończy się, ale kierowca miniportu nadal ma zaległe żądania.

Aby uzyskać pełną listę parametrów sprawdzania błędów, zobacz Sprawdzanie błędów 0xF1 (SCSI_VERIFIER_DETECTED_VIOLATION).

Oprócz tych naruszeń weryfikacja SCSI monitoruje również dostęp do pamięci sterownika miniportu w celu niewłaściwego użycia. Dwa typowe naruszenia pamięci powodowane przez sterowniki miniport to uzyskiwanie dostępu do rozszerzenia SRB po zakończeniu żądania oraz uzyskiwanie dostępu do DataBuffer SRB, gdy sterownik miniportu nie określił opcji MapBuffers.

Naruszenia pamięci tego rodzaju zwykle powodują wystawianie 0xD1 sprawdzania błędów (DRIVER_IRQL_NOT_LESS_OR_EQUAL).

Aktywowanie tej opcji

Procedura aktywowania opcji weryfikacji SCSI różni się od procedur aktywowania innych opcji weryfikatora sterowników.

Aby aktywować weryfikację SCSI

  1. Za pomocą Menedżera weryfikatora sterowników lub wiersza polecenia Verifier.exe uruchom weryfikację sterownika miniportu. Ponieważ weryfikacja SCSI nie będzie dostępna jako opcja, należy wybrać co najmniej jedną inną opcję Weryfikatora sterowników. Aby uzyskać szczegółowe informacje, zobacz Wybieranie opcji weryfikatora sterowników i Wybieranie sterowników do zweryfikowania .

  2. Otwórz rejestr przy użyciu regedit.exe. W kluczu HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ScsiPort dodaj podklucz o nazwie Weryfikator. W tym kluczu dodaj wpis REG_DWORD o nazwie VerifyLevel. Wartość przypisana do tego wpisu określi, które testy weryfikacji SCSI będą aktywne. Wartość 0x1 da maksymalną weryfikację.

  3. Uruchom ponownie komputer.

Jeśli wartość VerifyLevel nie istnieje lub jest równa 0xFFFFFFFF, weryfikacja SCSI zostanie wyłączona.

Poszczególne bity w wartości VerifyLevel mogą służyć do kontrolowania dokładnie, które testy zostaną wykonane. Bit zero (0x1) włącza określone testy; bity 28, 29, 30 i 31 wyłączają niektóre testy. Dlatego maksymalną weryfikację można otrzymać przy użyciu wartości 0x00000001.

Efekty poszczególnych bitów są następujące:

Bit Wartość Efekt

0

0x1

Weryfikator sterowników będzie monitorował dostęp do pamięci sterownika miniportu i sprawdzał nieprawidłowe użycie pamięci buforowej.

28

0x10000000

Weryfikator sterownika nie spowoduje sprawdzenia błędów, gdy procedura HwAdapterControl trwa ponad 0,5 sekundy.

29

0x20000000

Weryfikator sterowników nie będzie wystawiał sprawdzania błędów po zakończeniu okresu wstrzymania resetowania i nadal istnieją zaległe żądania w jednostce logicznej.

30

0x40000000

Weryfikator sterowników nie wywoła błędu krytycznego, gdy sterownik miniportu wywołuje ScsiPortNotification przy użyciu NextLuRequest, podczas gdy żądanie nietagowane jest nadal aktywne.

31

0x80000000

Weryfikator sterownika nie wywoła błędu krytycznego, gdy procedura HwInitialize trwa ponad 5 sekund.

W większości przypadków zalecane ustawienie jest 0xD0000001. Umożliwia to włączenie wszystkich testów weryfikatora SCSI z wyjątkiem limitu czasu dla HwAdapterControl, limitu czasu hwInitialize i zakazu wielu żądań do jednostki logicznej. Te trzy testy są często zbyt rygorystyczne.

Jeśli debuger jądra jest dołączony, można zmienić poziom weryfikacji SCSI po cyklu rozruchowym. W tym celu użyj polecenia debugera:

kd> ed scsiport!SpVrfyLevel Level 

To polecenie umożliwia ustawienie nowej wartości dla poziomu. Korzystając z tej metody, można w dowolnym momencie zmienić wysokie bity (0x10000000 przez 0x8000000). Jeśli jednak chcesz zmienić bit niski (0x1), należy to zrobić podczas procesu rozruchu (w początkowym punkcie przerwania debugera jądra).

Podobnie, jeśli chcesz całkowicie dezaktywować weryfikację SCSI, musisz ustawić poziom na 0xFFFFFFFF w początkowym punkcie przerwania.

Nuta Wartość 0xF0000000 spowoduje wyłączenie wszystkich testów, ale moduły weryfikacji SCSI będą nadal ładowane. Użyj tej wartości, jeśli chcesz wyłączyć weryfikację, ale zamierzasz włączyć testy wysoko bitowe w późniejszym czasie. Z drugiej strony wartość 0xFFFFFFFF uniemożliwia całkowite ładowanie modułów; jeśli ta wartość jest używana podczas rozruchu, nie będzie można włączyć weryfikacji SCSI bez ponownego uruchamiania.

Aktywowanie bez ponownego uruchamiania

Ogólnie rzecz biorąc, nie można aktywować ani dezaktywować weryfikacji SCSI bez ponownego uruchamiania ("ponownego uruchamiania") komputera w dowolnym systemie operacyjnym Windows. Sterownik ScsiPort.sys odczytuje wpis rejestru VerifyLevel tylko wtedy, gdy jest ładowany, co jest zwykle w czasie rozruchu. Jeśli jednak sterownik ScsiPort.sys nie jest załadowany podczas dodawania wpisu rejestru lub jeśli został on wcześniej zwolniony i ponownie załadowany, możesz włączyć weryfikację SCSI w systemie Windows XP i nowszych wersjach systemu Windows bez ponownego uruchamiania komputera.