Share via


IrqlNtifsApcPassive 규칙(wdm)

IrqlNtifsApcPassive 규칙은 드라이버가 IRQL = PASSIVE_LEVEL 또는 IRQL = APC_LEVEL 실행되는 경우에만 규칙에 나열된 DDI를 <호출한다고 지정합니다.

드라이버 모델: WDM

버그 검사 0xC4: DRIVER_VERIFIER_DETECTED_VIOLATION(0x20024) 규칙으로 발견된 버그 검사

예제

다음 코드는 이 규칙을 위반합니다.

//
// KeAcquireSpinLock raises the IRQL to DISPATCH_LEVEL.
//

KeAcquireSpinLock (&Lock, &OldIrql);

//
// ERROR: ZwWriteFile can only be called at IRQL == PASSIVE_LEVEL.
//

ZwWriteFile (Handle,
             NULL,
             NULL,
             NULL,
             IoStatusBlock,
             Buffer,
             BufferLength,
             NULL,
             NULL);

KeReleaseSpinLock (&Lock, OldIrql);

IRQL 수준에 대한 자세한 내용은 디스패치 루틴 및 IRQL 및하드웨어 우선 순위 관리를 참조하세요.

테스트 방법

컴파일 시

정적 드라이버 검증 도구를 실행하고 IrqlNtifsApcPassive 규칙을 지정합니다.

다음 단계를 사용하여 코드 분석을 실행합니다.
  1. 코드를 준비합니다(역할 형식 선언 사용).
  2. 정적 드라이버 검증 도구를 실행합니다.
  3. 결과를 보고 분석합니다.

자세한 내용은 정적 드라이버 검증 도구를 사용하여 드라이버에서 결함 찾기를 참조하세요.

런타임 시

Verifier.exe 명령줄을 사용하여 하나 이상의 드라이버에 대한 DDI 규정 준수 - 추가 IRQL 규칙을 활성화할 수 있습니다. 자세한 내용은 드라이버 검증 도구 옵션 선택을 참조하세요. DDI 규정 준수 - 추가 IRQL 규칙을 활성화하거나 비활성화하려면 컴퓨터를 다시 시작해야 합니다.

명령줄에서 DDI 준수 - 추가 IRQL 검사는 규칙 클래스 값 35로 표시됩니다. 예를 들면 다음과 같습니다.

verifier /ruleclasses 35 /driver MyDriver.sys

또는

verifier /rc 35 /driver MyDriver.sys

PC를 다시 부팅한 후 추가 IRQL 검사가 활성화됩니다.

적용 대상

NtSetInformationFile

NtWriteFile

NtCreateFile

ZwWriteFile

CcCopyWrite

CcCopyWriteEx

CcDeferWrite

CcFastCopyWrite