IoConnectInterrupt 함수(wdm.h)
IoConnectInterrupt 루틴은 지정된 프로세서 집합에서 디바이스가 중단될 때 호출되도록 디바이스 드라이버의 ISR(InterruptService 루틴)을 등록합니다.
구문
NTSTATUS IoConnectInterrupt(
[out] PKINTERRUPT *InterruptObject,
[in] PKSERVICE_ROUTINE ServiceRoutine,
[in, optional] PVOID ServiceContext,
[in, optional] PKSPIN_LOCK SpinLock,
[in] ULONG Vector,
[in] KIRQL Irql,
[in] KIRQL SynchronizeIrql,
[in] KINTERRUPT_MODE InterruptMode,
[in] BOOLEAN ShareVector,
[in] KAFFINITY ProcessorEnableMask,
[in] BOOLEAN FloatingSave
);
매개 변수
[out] InterruptObject
인터럽트 개체 집합에 대한 포인터에 대한 드라이버 제공 스토리지의 주소에 대한 포인터입니다. 이 포인터는 KeSynchronizeExecution에 대한 후속 호출에서 전달되어야 합니다.
[in] ServiceRoutine
드라이버 제공 InterruptService 루틴의 진입점에 대한 포인터입니다.
[in, optional] ServiceContext
인터럽트 서비스 루틴이 호출될 때 제공될 드라이버 결정 컨텍스트에 대한 포인터입니다. ServiceContext 영역은 드라이버에서 만든 디바이스 개체의 디바이스 확장, 드라이버에서 만든 컨트롤러 개체의 컨트롤러 확장 또는 디바이스 드라이버가 할당한 비페이지 풀의 상주 메모리에 있어야 합니다. 자세한 내용은 ISR 컨텍스트 정보 제공 을 참조하세요.
[in, optional] SpinLock
드라이버가 스토리지를 제공하는 초기화된 스핀 잠금에 대한 포인터로, 다른 드라이버 루틴에서 공유하는 드라이버 결정 데이터에 대한 액세스를 동기화하는 데 사용됩니다. ISR이 둘 이상의 벡터를 처리하거나 드라이버에 둘 이상의 ISR이 있는 경우 이 매개 변수가 필요합니다. 그렇지 않으면 드라이버가 인터럽트 스핀 잠금에 대한 스토리지를 할당할 필요가 없으며 입력 포인터는 NULL입니다.
[in] Vector
CM_PARTIAL_RESOURCE_DESCRIPTORu.Interrupt.Vector 멤버의 인터럽트 리소스에 전달된 인터럽트 벡터를 지정합니다.
[in] Irql
CM_PARTIAL_RESOURCE_DESCRIPTORu.Interrupt.Level 멤버의 인터럽트 리소스에 전달된 DIRQL을 지정합니다.
[in] SynchronizeIrql
ISR이 실행될 DIRQL을 지정합니다. ISR이 둘 이상의 인터럽트 벡터를 처리하거나 드라이버에 둘 이상의 ISR이 있는 경우 이 값은 각 인터럽트 리소스에서 u.Interrupt.Level에 전달된 Irql 값 중 가장 높아야 합니다. 그렇지 않으면 Irql 및 SynchronizeIrql 값이 동일합니다.
[in] InterruptMode
디바이스 인터럽트 가 LevelSensitive 인지 래 치인지를 지정합니다.
[in] ShareVector
인터럽트 벡터를 공유할 수 있는지 여부를 지정합니다.
[in] ProcessorEnableMask
이 플랫폼에서 디바이스 인터럽트 발생 가능 프로세서 집합을 나타내는 KAFFINITY 값을 지정합니다. 이 값은 u.Interrupt.Affinity의 인터럽트 리소스에 전달됩니다.
[in] FloatingSave
드라이버의 디바이스가 중단되면 부동 소수점 스택을 저장할지 여부를 지정합니다. x86 기반 및 Itanium 기반 플랫폼의 경우 이 값을 FALSE로 설정해야 합니다. 부동 소수점 및 MMX 상태를 저장하는 방법에 대한 자세한 내용은 WDM 드라이버에서 부동 소수점 또는 MMX 사용을 참조하세요.
반환 값
IoConnectInterrupt 는 다음 NTSTATUS 값 중 하나를 반환할 수 있습니다.
STATUS_SUCCESS
STATUS_INVALID_PARAMETER: 프로세서가 지정되지 않았습니다.
STATUS_INSUFFICIENT_RESOURCES: 페이지가 없는 풀이 충분하지 않았습니다.
설명
새 드라이버는 사용하기 쉬운 IoConnectInterruptEx 루틴을 사용해야 합니다. MSI(메시지 신호 인터럽트)를 지원하는 디바이스용 드라이버는 IoConnectInterruptEx를 사용해야 합니다.
PnP 드라이버는 PnP IRP_MN_START_DEVICE 요청을 완료하기 전에 디바이스 시작의 일부로 IoConnectInterrupt를 호출해야 합니다.
드라이버가 IRP_MN_START_DEVICE 요청을 받으면 드라이버는 각각 IRP IO_STACK_LOCATION구조의Parameters.StartDevice.AllocatedResources 및 Parameters.StartDevice.AllocatedResourcesTranslated 멤버에서 원시 및 변환된 하드웨어 리소스를 받습니다. 인터럽트를 연결하기 위해 드라이버는 AllocatedResourcesTranslated.List.PartialResourceList.PartialDescriptors[]의 리소스를 사용합니다. 드라이버는 CmResourceTypeInterrupt 형식의 리소스에 대한 부분 설명자 배열을 검사해야 합니다.
드라이버가 SpinLock에 대한 스토리지를 제공하는 경우 인터럽트 스핀 잠금을 IoConnectInterrupt에 전달하기 전에 KeInitializeSpinLock을 호출해야 합니다.
IoConnectInterrupt에 대한 성공적인 호출에서 반환되는 경우 드라이버 디바이스에서 인터럽트를 사용하도록 설정하거나 ShareVector가 TRUE로 설정된 경우 호출자의 ISR을 호출할 수 있습니다. 드라이버는 IoConnectInterrupt 가 반환될 때까지 인터럽트를 사용하도록 설정해서는 안 됩니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 2000부터 사용할 수 있습니다. |
대상 플랫폼 | 유니버설 |
헤더 | wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함) |
라이브러리 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
DDI 규정 준수 규칙 | HwStorPortProhibitedDDIs(storport), IrqlIoPassive2(wdm), PowerIrpDDis(wdm) |