다음을 통해 공유


HW_MESSAGE_SIGNALED_INTERRUPT_ROUTINE 콜백 함수(storport.h)

HwMSInterruptRoutine 루틴은 MSI(메시지 신호 인터럽트)를 처리합니다.

통사론

HW_MESSAGE_SIGNALED_INTERRUPT_ROUTINE HwMessageSignaledInterruptRoutine;

BOOLEAN HwMessageSignaledInterruptRoutine(
  IN PVOID HwDeviceExtension,
  IN ULONG MessageId
)
{...}

매개 변수

HwDeviceExtension

HBA(호스트 버스 어댑터)의 하드웨어 디바이스 확장에 대한 포인터입니다.

MessageId

메시지의 식별자입니다.

반환 값

HwMSInterruptRoutine HBA가 MSI를 생성한 것으로 확인되면 TRUE 반환합니다. HBA가 MSI를 생성하지 않은 경우 HwMSInterruptRoutine false 반환합니다.

발언

미니포트 드라이버의 HwMSInterruptRoutine 일상적인 프로세스는 HBA에서 생성된 메시지 신호 인터럽트(MSI)를 처리합니다. 미니포트 드라이버는 HBA가 HwMSInterruptRoutine 루틴을 가리키도록 PORT_CONFIGURATION_INFORMATION 구조의 HwMSInterruptRoutine 멤버를 설정하여 MSI를 생성한다는 것을 나타냅니다. HBA가 MSI를 생성하지 않는 경우 미니포트 드라이버는 HwMSInterruptRoutine NULL 설정해야 합니다.

PORT_CONFIGURATION_INFORMATION 구조의 InterruptSynchronizationMode 멤버가 InterruptSynchronizeAll설정된 경우 Storport 드라이버는 관리하는 어댑터 또는 어댑터에 연결된 디바이스에서 시작된 모든 MSI를 동기화합니다. 인터럽트가 발생하면 Storport 드라이버는 인터럽트 스핀 잠금을 획득한 후 DIRQL에서 미니포트 드라이버의 HwMSInterruptRoutine 루틴을 호출합니다.

PORT_CONFIGURATION_INFORMATION 구조의 InterruptSynchronizationMode 멤버가 InterruptSynchronizePerMessage 설정된 경우 Storport 드라이버는 IRQL = DIRQL에서 미니포트 드라이버의 HwMSInterruptRoutine 루틴을 호출합니다. MessageID 매개 변수에 표시된 메시지 식별자(ID)에 해당하는 인터럽트 스핀 잠금을 보유합니다. HBA는 다른 메시지 ID에 대한 인터럽트에 대한 HwMSInterruptRoutine 루틴을 중단시킬 수 있으므로 Storport 드라이버는 HwMSInterruptRoutine중첩 호출하거나 다른 프로세서에서 동시에 HwMSInterruptRoutine 다른 인스턴스를 실행할 수 있습니다. HwMSInterruptRoutine여러 인스턴스에서 중요한 데이터에 대한 액세스를 동기화하려면 미니포트는 StorPortAcquireMSISpinLock 호출하고 storPortReleaseMSISpinLock루틴을MessageIDID 이외의 메시지 ID에 대한 스핀 잠금을 획득하고 해제해야 합니다.

미니포트 드라이버는 StorPortGetMSIInfo 루틴을 호출하여 메시지에 대한 추가 정보를 검색할 수 있습니다.

HwMSInterruptRoutine 루틴 내에서 StorPortGetMSIInfo 루틴을 호출해서는 안 됩니다.

HwMSInterruptRoutine 이름은 자리 표시자일 뿐입니다. 이 루틴의 실제 프로토타입은 다음과 같이 Storport.h 정의됩니다.

typedef
BOOLEAN
  HW_MESSAGE_SIGNALED_INTERRUPT_ROUTINE (
    _In_ PVOID  HwDeviceExtension,
    _In_ ULONG  MessageId
    );

예제

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

예를 들어 MyHwMSIRoutine명명된 HwMSInterruptRoutine 콜백 루틴을 정의하려면 이 코드 예제와 같이 HW_MESSAGE_SIGNALED_INTERRUPT_ROUTINE 형식을 사용합니다.

HW_MESSAGE_SIGNALED_INTERRUPT_ROUTINE MyHwMSIRoutine;

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

_Use_decl_annotations_
BOOLEAN
MyHwMSIRoutine (
  _In_ PVOID  DeviceExtension,
  _In_ ULONG  MessageId
  );
  {
      ...
  }

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

요구 사항

요구
대상 플랫폼 보편적
헤더 storport.h(Storport.h 포함)
IRQL DIRQL

참고 항목

PORT_CONFIGURATION_INFORMATION

storPortAcquireMSISpinLock

storPortGetMSIInfo

storPortReleaseMSISpinLock