다음을 통해 공유


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를 생성하지 않은 경우 HwMSInterruptRoutineFALSE를 반환합니다.

설명

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

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의 여러 인스턴스에서 중요한 데이터에 대한 액세스를 동기화하려면 미니포트가 StorPortAcquireMSISpinLockStorPortReleaseMSISpinLock 루틴을 호출하여 MessageID의 ID가 아닌 메시지 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