IO_CONNECT_INTERRUPT_PARAMETERS 구조체(wdm.h)
IO_CONNECT_INTERRUPT_PARAMETERS 구조에는 드라이버가 ISR(인터럽트 서비스 루틴)을 등록하기 위해 IoConnectInterruptEx 루틴에 제공하는 매개 변수가 포함되어 있습니다.
구문
typedef struct _IO_CONNECT_INTERRUPT_PARAMETERS {
ULONG Version;
union {
IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS FullySpecified;
IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS LineBased;
IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS MessageBased;
};
} IO_CONNECT_INTERRUPT_PARAMETERS, *PIO_CONNECT_INTERRUPT_PARAMETERS;
멤버
Version
입력 시 는 다음과 같이 IoConnectInterruptEx에서 수행할 특정 작업을 지정합니다.
버전 값 | IoConnectInterruptEx 작업 |
---|---|
CONNECT_FULLY_SPECIFIED | 플러그 앤 플레이(PnP) 관리자가 제공한 정보를 사용하여 특정 인터럽트 에 연결합니다. FullySpecified 멤버를 사용하여 작업의 추가 매개 변수를 제공합니다. |
CONNECT_LINE_BASED | 디바이스의 라인 기반 인터럽트용 InterruptService 루틴을 등록합니다. LineBased 멤버를 사용하여 작업의 추가 매개 변수를 제공합니다. |
CONNECT_MESSAGE_BASED | 디바이스의 메시지 신호 인터럽트용 InterruptMessageService 루틴을 등록합니다. 디바이스에 줄 기반 인터럽트만 있는 경우 호출자는 대체 인터럽트 서비스 루틴을 지정할 수도 있습니다. MessageBased 멤버를 사용하여 작업의 추가 매개 변수를 제공합니다. |
반환 시 루틴은 다음과 같이 작업에 대한 정보를 제공합니다.
버전 값 | Description |
---|---|
CONNECT_FULLY_SPECIFIED | 호출자가 CONNECT_LINE_BASED 또는 CONNECT_MESSAGE_BASED 지원하지 않는 플랫폼에서 Version 으로 지정했습니다. CONNECT_FULLY_SPECIFIED 사용하여 작업을 다시 시도합니다. |
CONNECT_LINE_BASED | 호출자가 CONNECT_MESSAGE_BASED 지정하고 호출자의 대체 InterruptService 루틴이 등록되었습니다. |
CONNECT_MESSAGE_BASED | 호출자가 CONNECT_MESSAGE_BASED 지정하고 호출자의 InterruptMessageService 루틴이 등록되었습니다. |
FullySpecified
Version 값이 CONNECT_FULLY_SPECIFIED(또는 그룹 멤버가 사용되는 경우 CONNECT_FULLY_SPECIFIED_GROUP)일 때 IoConnectInterruptEx에서 수행할 작업의 추가 매개 변수를 지정합니다. 자세한 내용은 CONNECT_FULLY_SPECIFIED 버전 IoConnectInterruptEx 사용을 참조하세요.
PhysicalDeviceObject
디바이스의 PDO에 대한 포인터입니다.
InterruptObject
디바이스의 인터럽트 개체 집합에 대한 포인터를 수신하는 위치에 대한 포인터입니다.
ServiceRoutine
디바이스 인터럽트의 ISR로 등록할 InterruptService 루틴에 대한 포인터입니다.
ServiceContext
InterruptService 루틴의 ServiceContext 매개 변수로 전달할 값을 지정합니다.
SpinLock
인터럽트 집합의 인터럽트 스핀 잠금 역할을 하는 스핀 잠금에 대한 포인터 또는 NULL입니다. NULL인 경우 시스템은 인터럽트 스핀 잠금 역할을 하는 스핀 잠금을 할당합니다. NULL이 아닌 경우 KeInitializeSpinLock을 사용하여 스핀 잠금을 초기화해야 합니다.
SynchronizeIrql
ISR이 실행될 DIRQL을 지정합니다. ISR이 둘 이상의 인터럽트 벡터를 처리하거나 드라이버에 둘 이상의 ISR이 있는 경우 이 값은 인터럽트 집합의 최대 IRQL이어야 합니다. 인터럽트에 대한 IRQL은 CM_PARTIAL_RESOURCE_DESCRIPTORu.Interrupt.Level 멤버의 CmResourceTypeInterrupt 리소스에 전달됩니다. 그렇지 않으면 Irql 및 SynchronizeIrql 값이 동일합니다.
FloatingSave
인터럽트 발생 시 시스템에서 프로세서의 부동 소수점 상태를 저장할지 지정합니다. TRUE이면 시스템에서 부동 소수점 상태를 저장합니다.
ShareVector
인터럽트 벡터를 공유할 수 있는지 여부를 지정합니다. 줄 기반 PCI 인터럽트는 공유할 수 있어야 합니다. 메시지 신호 PCI 인터럽트의 경우 드라이버 작성기는 인터럽트 공유 가능 여부를 선택할 수 있지만 기본적으로 공유할 수 있도록 선택해야 합니다.
벡터
CM_PARTIAL_RESOURCE_DESCRIPTORu.Interrupt.Vector 멤버의 CmResourceTypeInterrupt 리소스에 전달된 인터럽트 벡터를 지정합니다.
Irql
CM_PARTIAL_RESOURCE_DESCRIPTORu.Interrupt.Level 멤버의 CmResourceTypeInterrupt 리소스에 전달된 DIRQL을 지정합니다. Windows 8 시작하여 드라이버는 Irql 및 SynchronizeIrql을 PASSIVE_LEVEL 설정하고 SpinLock을 NULL로 설정하여 수동 수준에서 실행되는 ISR을 등록할 수 있습니다. 자세한 내용은 Passive-Level 인터럽트 서비스 루틴 사용을 참조하세요.
InterruptMode
인터럽트 가 수준 트리거(InterruptModeLevelSensitive) 또는 에지 트리거(InterruptMode = = 래치됨)인지 여부를 결정하는 KINTERRUPT_MODE 지정합니다. PCI 버스의 공유 인터럽트 라인에 대해 LevelSensitive를 지정합니다. PCI 메시지 신호 인터럽트에서 래치됨을 지정합니다.
ProcessorEnableMask
디바이스의 인터럽트 발생 가능 프로세서 집합을 나타내는 KAFFINITY 마스크를 지정합니다. 이 값은 CM_PARTIAL_RESOURCE_DESCRIPTORu.Interrupt.Affinity 멤버의 CmResourceTypeInterrupt 리소스에 전달됩니다.
그룹화
인터럽트 배달할 프로세서 그룹을 식별하는 그룹 번호를 지정합니다. 일반적으로 드라이버는 IRP_MN_START_DEVICE 요청에 포함된 번역된 리소스의 일부로 그룹 번호를 받습니다. Windows 7부터는 IO_CONNECT_INTERRUPT_PARAMETERS 구조체의 Version 멤버가 CONNECT_FULLY_SPECIFIED_GROUP 설정된 경우 그룹 멤버가 사용됩니다. 버전이 CONNECT_FULLY_SPECIFIED 설정된 경우 그룹 멤버는 무시됩니다. 이 경우 인터럽트 배달에 대한 그룹 번호는 항상 0입니다.
LineBased
Version 값이 CONNECT_LINE_BASED 경우 IoConnectInterruptEx에서 수행할 작업의 추가 매개 변수를 지정합니다. 자세한 내용은 CONNECT_LINE_BASED 버전 IoConnectInterruptEx 사용을 참조하세요.
PhysicalDeviceObject
디바이스의 PDO(물리적 디바이스 개체)에 대한 포인터입니다.
InterruptObject
디바이스의 인터럽트 개체 집합에 대한 포인터를 수신하는 위치에 대한 포인터입니다.
ServiceRoutine
디바이스 인터럽트의 ISR로 등록할 InterruptService 루틴에 대한 포인터입니다.
ServiceContext
InterruptService 루틴의 ServiceContext 매개 변수로 전달할 값을 지정합니다.
SpinLock
인터럽트 집합의 인터럽트 스핀 잠금 역할을 하는 스핀 잠금에 대한 포인터 또는 NULL입니다. NULL인 경우 시스템은 인터럽트 스핀 잠금 역할을 하는 스핀 잠금을 할당합니다. NULL이 아닌 경우 KeInitializeSpinLock을 사용하여 스핀 잠금을 초기화해야 합니다.
SynchronizeIrql
ISR이 실행되는 최소 디바이스 IRQL(DIRQL)을 지정합니다. 시스템은 인터럽트 집합의 최대 IRQL보다 큰 경우에만 이 값을 사용합니다. 그렇지 않으면 시스템에서 최대 IRQL을 사용합니다. 드라이버는 거의 항상 SynchronizeIrql에 대한 PASSIVE_LEVEL 지정합니다. (드라이버는 ISR이 특정 IRQL 위에서 실행되어야 하는 경우에만 PASSIVE_LEVEL 이외의 값을 지정해야 합니다.) Windows 8 시작해서 디바이스에 할당된 줄 기반 인터럽트 리소스 집합은 IRQL = PASSIVE_LEVEL 실행되는 ISR을 공유할 수 있습니다. SynchronizeIrql = PASSIVE_LEVEL 이 인터럽트 집합의 최대 IRQL이 PASSIVE_LEVEL 경우 PASSIVE_LEVEL InterruptService 루틴이 호출됩니다. 자세한 내용은 Passive-Level 인터럽트 서비스 루틴 사용을 참조하세요.
FloatingSave
인터럽트 발생 시 시스템에서 프로세서의 부동 소수점 상태를 저장할지 지정합니다. TRUE이면 시스템에서 부동 소수점 상태를 저장합니다. x86 기반 및 Itanium 기반 플랫폼의 경우 이 값을 FALSE로 설정해야 합니다. 부동 소수점 및 MMX 상태를 저장하는 방법에 대한 자세한 내용은 WDM 드라이버에서 부동 소수점 또는 MMX 사용을 참조하세요.
MessageBased
Version 값이 CONNECT_MESSAGE_BASED 경우 IoConnectInterruptEx에서 수행할 작업의 추가 매개 변수를 지정합니다. 자세한 내용은 CONNECT_MESSAGE_BASED 버전 IoConnectInterruptEx 사용을 참조하세요.
PhysicalDeviceObject
디바이스의 PDO에 대한 포인터입니다.
ConnectionContext
연결 컨텍스트에 대한 포인터를 수신하는 위치에 대한 포인터입니다. 반환 버전 에 값이 CONNECT_LINE_BASED 경우 루틴은 KINTERRUPT 구조체에 대한 포인터를 제공합니다. 반환 버전 에 값이 CONNECT_MESSAGE_BASED 경우 루틴은 IO_INTERRUPT_MESSAGE_INFO 구조체에 대한 포인터를 제공합니다.
캐스팅을 최소화하기 위해 ConnectionContext 는 공용 구조체로 정의됩니다. ConnectionContext.Generic를 사용하여 위치를 PVOID로 처리합니다. ConnectionContext.InterruptObject 및 ConnectionContext.InterruptMessageTable을 사용하여 위치를 각각 PKINTERRUPT 또는 PIO_INTERRUPT_MESSAGE_INFO 변수로 처리합니다.
일반
IoConnectInterruptEx 루틴이 연결 컨텍스트에 대한 포인터를 쓰는 PVOID 변수에 대한 포인터입니다.
InterruptMessageTable
IoConnectInterruptEx 루틴이 연결 컨텍스트에 대한 포인터를 쓰는 PIO_INTERRUPT_MESSAGE_INFO 변수에 대한 포인터입니다.
InterruptObject
IoConnectInterruptEx 루틴이 연결 컨텍스트에 대한 포인터를 쓰는 PKINTERRUPT 변수에 대한 포인터입니다.
MessageServiceRoutine
디바이스 인터럽트의 ISR로 등록할 InterruptMessageService 루틴에 대한 포인터입니다.
ServiceContext
인터럽트에 대한 InterruptMessageService 또는 InterruptService 루틴의 ServiceContext 매개 변수로 전달할 값을 지정합니다.
SpinLock
인터럽트 집합의 인터럽트 스핀 잠금 역할을 하는 스핀 잠금에 대한 포인터 또는 NULL입니다. NULL인 경우 시스템은 인터럽트 스핀 잠금 역할을 하는 스핀 잠금을 할당합니다. NULL이 아닌 경우 KeInitializeSpinLock을 사용하여 스핀 잠금을 초기화해야 합니다.
SynchronizeIrql
ISR이 실행되는 최소 디바이스 IRQL(DIRQL)을 지정합니다. 시스템은 인터럽트 집합의 최대 IRQL보다 큰 경우에만 이 값을 사용합니다. 그렇지 않으면 시스템에서 최대 IRQL을 사용합니다. 드라이버는 거의 항상 SynchronizeIrql에 대한 PASSIVE_LEVEL 지정합니다.
FloatingSave
인터럽트 발생 시 시스템에서 프로세서의 부동 소수점 상태를 저장할지 지정합니다. TRUE이면 시스템에서 부동 소수점 상태를 저장합니다.
FallBackServiceRoutine
줄 기반 인터럽트에서 ISR로 사용할 InterruptService 루틴에 대한 포인터입니다. 디바이스에 메시지 신호 인터럽트는 없지만 줄 기반 인터럽트는 없는 경우 시스템은 이 루틴을 등록하여 라인 기반 인터럽트 처리합니다.
설명
IoConnectInterruptEx 루틴은 작업의 모든 매개 변수를 포함하는 IO_CONNECT_INTERRUPT_PARAMETERS 구조를 가리키는 단일 Parameters 매개 변수를 사용합니다.
요구 사항
요구 사항 | 값 |
---|---|
헤더 | wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함) |