다음을 통해 공유


KSERVICE_ROUTINE 콜백 함수(wdm.h)

ISR(InterruptService 루틴)은 디바이스 인터럽트 서비스를 신속하게 처리하고 필요한 경우 수신된 데이터의 사후 인터럽트 처리를 예약합니다.

구문

KSERVICE_ROUTINE KserviceRoutine;

BOOLEAN KserviceRoutine(
  [in] _KINTERRUPT *Interrupt,
  [in] PVOID ServiceContext
)
{...}

매개 변수

[in] Interrupt

인터럽 트에 대한 KINTERRUPT 구조체에 대한 호출자 제공 포인터입니다.

[in] ServiceContext

IoConnectInterrupt 또는 IoConnectInterruptEx에 대한 이전 호출에서 지정한 컨텍스트 정보에 대한 호출자 제공 포인터입니다.

반환 값

루틴에서 인터럽트는 드라이버의 디바이스 중 하나에서 오지 않았다고 판단하는 경우 FALSE를 반환해야 합니다. 그렇지 않으면 루틴이 인터럽트 서비스를 제공하고 TRUE를 반환해야 합니다.

설명

특정 인터럽트 벡터 및 프로세서 선호도에 대해 ISR을 등록하려면 드라이버가 IoConnectInterrupt 또는 IoConnectInterruptEx를 호출해야 합니다.

드라이버의 ISR(InterruptService 루틴)은 SynchronizeIrql 매개 변수에서 IoConnectInterrupt에 지정된 대로 일부 시스템 할당 DIRQL에서 인터럽트 컨텍스트에서 실행됩니다. (DIRQL 값이 더 높은 다른 디바이스는 ISR을 중단할 수 있습니다.)

시스템에서 ISR을 호출하기 전에 인터럽트의 스핀 잠금(IoConnectInterrupt에 대한 SpinLock 매개 변수)을 획득하므로 ISR은 다른 프로세서에서 동시에 실행할 수 없습니다. ISR이 반환되면 시스템에서 스핀 잠금을 해제합니다.

ISR은 먼저 컨텍스트에서 제공하는 컨텍스트 정보를 검사하여 드라이버의 디바이스 중 하나에서 인터럽트를 발생했는지 확인해야 합니다. 인터럽트는 드라이버의 디바이스 중 하나에서 온 것이 아닌 경우 I/O 관리자가 동일한 프로세서 및 인터럽트 벡터에 대해 ISR을 등록한 다른 드라이버를 호출할 수 있도록 루틴에서 즉시 FALSE 를 반환해야 합니다.

ISR 구현에 대한 자세한 내용은 인터럽트 서비스 루틴을 참조하세요.

예제

InterruptService 콜백 루틴을 정의하려면 먼저 정의하려는 콜백 루틴의 유형을 식별하는 함수 선언을 제공해야 합니다. Windows는 드라이버에 대한 콜백 함수 형식 집합을 제공합니다. 콜백 함수 형식을 사용하여 함수를 선언하면 드라이버에 대한 코드 분석, SDV( 정적 드라이버 검증 도구 ) 및 기타 확인 도구에서 오류를 찾을 수 있으며 Windows 운영 체제용 드라이버를 작성하기 위한 요구 사항입니다.

예를 들어 이름이 MyInterruptServiceInterruptService 콜백 루틴을 정의하려면 다음 코드 예제와 같이 KSERVICE_ROUTINE 형식을 사용합니다.

KSERVICE_ROUTINE MyInterruptService;

그런 다음 다음과 같이 콜백 루틴을 구현합니다.

_Use_decl_annotations_
BOOLEAN
  MyInterruptService(
    struct _KINTERRUPT  *Interrupt,
    PVOID  ServiceContext
    )
  {
      // Function body
  }

KSERVICE_ROUTINE 함수 형식은 Wdm.h 헤더 파일에 정의되어 있습니다. 코드 분석 도구를 실행할 때 오류를 보다 정확하게 식별하려면 함수 정의에 _Use_decl_annotations_ 주석을 추가해야 합니다. 주석은 _Use_decl_annotations_ 헤더 파일의 KSERVICE_ROUTINE 함수 형식에 적용되는 주석이 사용되도록 합니다. 함수 선언에 대한 요구 사항에 대한 자세한 내용은 WDM 드라이버에 함수 역할 형식을 사용하여 함수 선언을 참조하세요. 에 대한 _Use_decl_annotations_자세한 내용은 함수 동작 주석 지정을 참조하세요.

요구 사항

요구 사항
대상 플랫폼 데스크톱
헤더 wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함)
IRQL DIRQL에서 호출됩니다(설명 섹션 참조).