SCSI 확인

드라이버 검증 도구의 SCSI 확인 기능은 SCSI 미니포트 드라이버와 포트 드라이버 간의 상호 작용을 모니터링합니다. 미니포트 드라이버가 루틴을 오용하거나, 포트 드라이버의 요청에 잘못 응답하거나, 요청에 응답하는 데 과도한 시간이 걸리는 경우 버그 검사 발생합니다.

이 드라이버 검증 도구 옵션은 Windows XP 이상에서만 사용할 수 있습니다.

SCSI 확인에서 검색된 위반

SCSI 확인 옵션은 SCSI 루틴의 몇 가지 오용을 검색할 수 있습니다. 이러한 검사 중 특정 항목을 개별적으로 사용하지 않도록 설정할 수도 있습니다.

SCSI 미니포트 드라이버가 다음 위반 중 하나를 커밋하면 드라이버 검증 도구는 버그 검사 0xF1 발급합니다.

  • 미니포트 드라이버는 ScsiPortInitialize에 잘못된 인수를 전달합니다.

  • 미니포트 드라이버는 ScsiPortStallExecution 을 호출하고 0.1초보다 긴 지연을 지정하여 프로세서가 과도한 시간 동안 지연됩니다.

  • 포트 드라이버는 미니포트 드라이버 루틴을 호출하고 미니포트 드라이버는 실행하는 데 0.5초 이상 걸립니다. FindAdapter 루틴은 제외되고 HwInitialize 루틴은 5초 동안 허용됩니다.

  • 미니포트 드라이버는 요청을 두 번 이상 완료합니다.

  • 미니포트 드라이버는 잘못된 SRB 상태 사용하여 루틴을 완료합니다.

  • 미니포트 드라이버는 ScsiPortNotification 을 호출하여 NextLuRequest를 요청하지만 태그가 지정되지 않은 요청은 여전히 활성 상태입니다.

  • 미니포트 드라이버는 잘못된 가상 주소를 ScsiPortGetPhysicalAddress에 전달합니다. 이는 일반적으로 제공된 주소가 공통 버퍼 영역에 매핑되지 않음을 의미합니다.

  • 버스 재설정 보류 기간이 종료되지만 미니포트 드라이버에는 여전히 미해결 요청이 있습니다.

버그 검사 매개 변수의 전체 목록은 버그 검사 0xF1(SCSI_VERIFIER_DETECTED_VIOLATION)을 참조하세요.

SCSI 확인은 이러한 위반 외에도 미니포트 드라이버의 메모리 액세스를 모니터링하여 부적절한 사용을 수행합니다. 미니포트 드라이버가 수행한 두 가지 일반적인 메모리 위반은 요청이 완료된 후 SRB 확장에 액세스하고 미니포트 드라이버가 MapBuffers 를 지정하지 않은 경우 SRB의 DataBuffer에 액세스하는 것입니다.

이 정렬의 메모리 위반으로 인해 일반적으로 버그 검사 0xD1 (DRIVER_IRQL_NOT_LESS_OR_EQUAL)이 발급됩니다.

이 옵션 활성화

SCSI 확인 옵션을 활성화하는 절차는 다른 드라이버 검증 도구 옵션을 활성화하는 절차와 다릅니다.

SCSI 확인을 활성화하려면

  1. 드라이버 검증 도구 관리자 또는 Verifier.exe 명령줄을 사용하여 미니포트 드라이버 확인을 시작합니다. SCSI 확인은 옵션으로 사용할 수 없으므로 하나 이상의 다른 드라이버 검증 도구 옵션을 선택해야 합니다. 자세한 내용은 드라이버 검증 도구 옵션 선택확인할 드라이버 선택을 참조하세요.

  2. regedit.exe 사용하여 레지스트리를 엽니다. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ScsiPort 키에 Verifier라는 하위 키를 추가합니다. 해당 키 내에 VerifyLevel이라는 REG_DWORD 항목을 추가합니다. 이 항목에 할당된 값은 활성 상태일 SCSI 확인 테스트를 결정합니다. 0x1 값은 최대 확인을 제공합니다.

  3. 컴퓨터를 다시 부팅합니다.

VerifyLevel 값이 없거나 0xFFFFFFFF 같으면 SCSI 확인이 비활성화됩니다.

VerifyLevel 값의 개별 비트를 사용하여 수행할 테스트를 정확하게 제어할 수 있습니다. 비트 0(0x1)은 특정 테스트를 사용하도록 설정합니다. bits 28, 29, 30 및 31은 특정 테스트를 사용하지 않도록 설정합니다. 따라서 0x00000001 값을 사용하여 최대 확인을 얻을 수 있습니다.

각 비트의 효과는 다음과 같습니다.

bit 효과

0

0x1

드라이버 검증 도구는 메모리 버퍼의 부적절한 사용에 대해 미니포트 드라이버의 메모리 액세스 및 검사 모니터링합니다.

28

0x10000000

드라이버 검증 도구는 HwAdapterControl 루틴을 완료하는 데 0.5초 이상 걸리는 경우 버그 검사 실행하지 않습니다.

29

0x20000000

드라이버 검증 도구는 재설정 보류 기간이 종료되고 논리 단위에 아직 미해결 요청이 있는 경우 버그 검사 실행하지 않습니다.

30

0x40000000

태그가 지정되지 않은 요청이 여전히 활성 상태인 동안 미니포트 드라이버가 NextLuRequest사용하여 ScsiPortNotification을 호출하는 경우 드라이버 검증 도구는 버그 검사 실행하지 않습니다.

31

0x80000000

드라이버 검증 도구는 HwInitialize 루틴을 완료하는 데 5초 이상 걸리는 경우 버그 검사 실행하지 않습니다.

대부분의 경우 권장 설정은 0xD0000001. 이렇게 하면 HwAdapterControl의 시간 제한, HwInitialize의 시간 제한 및 논리 단위에 대한 여러 요청 금지를 제외한 모든 SCSI 검증 도구 테스트가 가능합니다. 이 세 가지 테스트는 종종 너무 엄격합니다.

커널 디버거가 연결된 경우 부팅 주기 후에 SCSI 확인 수준을 변경할 수 있습니다. 이렇게 하려면 디버거 명령을 사용합니다.

kd> ed scsiport!SpVrfyLevel Level 

이 명령을 사용하면 Level에 대한 새 값을 설정할 수 있습니다. 이 메서드를 사용하면 언제든지 높은 비트(0x10000000~0x8000000)를 변경할 수 있습니다. 그러나 낮은 비트(0x1)를 변경하려면 부팅 프로세스 중에 커널 디버거의 초기 중단점에서 변경해야 합니다.

마찬가지로 SCSI 확인을 완전히 비활성화하려면 초기 중단점에서 수준을 0xFFFFFFFF 설정해야 합니다.

참고 0xF0000000 값은 모든 테스트를 사용하지 않도록 설정하지만 SCSI 확인 모듈은 계속 로드됩니다. 확인을 사용하지 않도록 설정하지만 나중에 고비트 테스트를 사용하도록 설정하려는 경우 이 값을 사용합니다. 반면에 0xFFFFFFFF 값은 모듈이 완전히 로드되지 않도록 합니다. 이 값이 부팅 중에 사용되면 다시 부팅하지 않고 SCSI 확인을 사용하도록 설정할 수 없습니다.

다시 부팅하지 않고 활성화

일반적으로 Windows 운영 체제에서 컴퓨터를 다시 시작("다시 부팅")하지 않고는 SCSI 확인을 활성화하거나 비활성화할 수 없습니다. ScsiPort.sys 드라이버는 일반적으로 부팅 시간에 로드될 때만 VerifyLevel 레지스트리 항목을 읽습니다. 그러나 레지스트리 항목을 추가할 때 ScsiPort.sys 드라이버가 로드되지 않거나 언로드 및 다시 로드된 경우 컴퓨터를 다시 시작하지 않고 Windows XP 이상 버전의 Windows에서 SCSI 확인을 사용하도록 설정할 수 있습니다.