struttura IO_CONNECT_INTERRUPT_PARAMETERS (wdm.h)
La struttura IO_CONNECT_INTERRUPT_PARAMETERS contiene i parametri forniti da un driver alla routine IoConnectInterruptEx per registrare una routine del servizio interrupt (ISR).
Sintassi
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;
Members
Version
In base all'input, specifica l'operazione specifica da eseguire da IoConnectInterruptEx, come indicato di seguito.
Valore della versione | Operazione IoConnectInterruptEx |
---|---|
CONNECT_FULLY_SPECIFIED | Si connette a un interrupt specifico usando le informazioni fornite dal gestore Plug and Play (PnP). Utilizzare il membro FullySpecified per fornire i parametri aggiuntivi dell'operazione. |
CONNECT_LINE_BASED | Registra una routine InterruptService per gli interrupt basati su riga del dispositivo. Utilizzare il membro LineBased per fornire i parametri aggiuntivi dell'operazione. |
CONNECT_MESSAGE_BASED | Registra una routine InterruptMessageService per gli interrupt del messaggio del dispositivo. Il chiamante può anche specificare una routine InterruptService di fallback se il dispositivo ha solo interrupt basati su riga. Utilizzare il membro MessageBased per fornire i parametri aggiuntivi dell'operazione. |
In caso di restituzione, la routine fornisce informazioni sull'operazione, come indicato di seguito.
Valore della versione | Descrizione |
---|---|
CONNECT_FULLY_SPECIFIED | Il chiamante specificato CONNECT_LINE_BASED o CONNECT_MESSAGE_BASED per Version in una piattaforma che non lo supporta. Ripetere l'operazione usando CONNECT_FULLY_SPECIFIED. |
CONNECT_LINE_BASED | Il chiamante ha specificato CONNECT_MESSAGE_BASED e la routine InterruptService di fallback del chiamante è stata registrata. |
CONNECT_MESSAGE_BASED | Il chiamante ha specificato CONNECT_MESSAGE_BASED e la routine InterruptMessageService del chiamante è stata registrata. |
FullySpecified
Specifica i parametri aggiuntivi dell'operazione da eseguire da IoConnectInterruptEx quando Version ha un valore di CONNECT_FULLY_SPECIFIED (o CONNECT_FULLY_SPECIFIED_GROUP se viene utilizzato il membro Group ). Per altre informazioni, vedere Uso della versione CONNECT_FULLY_SPECIFIED di IoConnectInterruptEx.
PhysicalDeviceObject
Puntatore al PDO per il dispositivo.
InterruptObject
Puntatore a una posizione che riceve un puntatore al set di oggetti interrupt per il dispositivo.
ServiceRoutine
Puntatore alla routine InterruptService da registrare come ISR per gli interrupt del dispositivo.
ServiceContext
Specifica il valore da passare come parametro ServiceContext della routine InterruptService .
SpinLock
Puntatore a un blocco spin da usare come blocco di rotazione di interrupt per il set di interrupt o NULL. Se NULL, il sistema alloca un blocco spin per fungere da blocco di rotazione di interruzione. Se non è NULL, è necessario inizializzare il blocco di selezione con KeInitializeSpinLock.
SynchronizeIrql
Specifica l'identificatore DIRQL in cui verrà eseguito l'ISR. Se l'ISR gestisce più di un vettore di interruzione o il driver ha più di un ISR, questo valore deve essere il valore IRQL massimo del set di interrupt. Il runtime di integrazione per un interrupt viene passato nella risorsa CmResourceTypeInterrupt nel membro u.Interrupt.Level di CM_PARTIAL_RESOURCE_DESCRIPTOR. In caso contrario, i valori Irql e SynchronizeIrql sono identici.
Salvataggio in virgola mobile
Specifica se il sistema salva lo stato a virgola mobile del processore quando si verifica l'interrupt. Se TRUE, il sistema salva lo stato a virgola mobile.
ShareVector
Specifica se il vettore di interrupt è condivisibile. Gli interrupt PCI basati su riga devono essere condivisibili. Per gli interrupt PCI con segnalazione di messaggi, i writer di driver possono scegliere se le interruzioni sono condivisibili, ma devono scegliere di renderle condivisibili per impostazione predefinita.
Vettore
Specifica il vettore di interrupt passato nella risorsa CmResourceTypeInterrupt nel membro u.Interrupt.Vector di CM_PARTIAL_RESOURCE_DESCRIPTOR.
Irql
Specifica il DIRQL passato nella risorsa CmResourceTypeInterrupt nel membro u.Interrupt.Level di CM_PARTIAL_RESOURCE_DESCRIPTOR. A partire da Windows 8, un driver può registrare un ISR eseguito a livello passivo impostando Irql e SynchronizeIrql su PASSIVE_LEVEL e impostando SpinLock su NULL. Per altre informazioni, vedere Using Passive-Level Interrupt Service Routines .For more information, see Using Passive-Level Interrupt Service Routines.
InterruptMode
Specifica un KINTERRUPT_MODE che determina se l'interrupt viene attivato a livello (InterruptMode = LevelSensitive) o attivato da edge (InterruptMode = Latched). Per le linee di interruzione condivise da un bus PCI, specificare LevelSensitive. Per gli interrupt con segnalazione di messaggi PCI, specificare Latched.
ProcessorEnableMask
Specifica la maschera KAFFINITY che rappresenta il set di processori in cui possono verificarsi interruzioni del dispositivo. Questo valore viene passato nella risorsa CmResourceTypeInterrupt nel membro u.Interrupt.Affinity di CM_PARTIAL_RESOURCE_DESCRIPTOR.
Raggruppare
Specifica un numero di gruppo che identifica il gruppo di processori a cui deve essere recapitato l'interrupt. In genere, un driver riceve il numero di gruppo come parte delle risorse tradotte incluse in una richiesta di IRP_MN_START_DEVICE . A partire da Windows 7, il membro Group viene usato se il membro Version della struttura IO_CONNECT_INTERRUPT_PARAMETERS è impostato su CONNECT_FULLY_SPECIFIED_GROUP. Il membro Group viene ignorato se Version è impostato su CONNECT_FULLY_SPECIFIED, nel qual caso il numero di gruppo per il recapito dell'interrupt è sempre 0.
LineBased
Specifica i parametri aggiuntivi dell'operazione da eseguire da IoConnectInterruptEx quando Version ha un valore di CONNECT_LINE_BASED. Per altre informazioni, vedere Uso della versione CONNECT_LINE_BASED di IoConnectInterruptEx.
PhysicalDeviceObject
Puntatore all'oggetto dispositivo fisico (PDO) del dispositivo.
InterruptObject
Puntatore a una posizione che riceve un puntatore al set di oggetti interrupt per il dispositivo.
ServiceRoutine
Puntatore alla routine InterruptService da registrare come ISR per gli interrupt del dispositivo.
ServiceContext
Specifica il valore da passare come parametro ServiceContext della routine InterruptService .
SpinLock
Puntatore a un blocco spin da usare come blocco di rotazione di interrupt per il set di interrupt o NULL. Se NULL, il sistema alloca un blocco spin per fungere da blocco di rotazione di interruzione. Se non è NULL, è necessario inizializzare il blocco di selezione con KeInitializeSpinLock.
SynchronizeIrql
Specifica il dispositivo minimo IRQL (DIRQL) in cui viene eseguito l'ISR. Il sistema usa questo valore solo se è maggiore del valore IRQL massimo del set di interrupt; in caso contrario, il sistema usa il valore IRQL massimo. I driver specificano quasi sempre PASSIVE_LEVEL per SynchronizeIrql. Un driver deve specificare un valore diverso da PASSIVE_LEVEL solo se l'ISR deve essere eseguito sopra un determinato IRQL. A partire da Windows 8, un set di risorse di interrupt basate su riga assegnate a un dispositivo può condividere un ISR eseguito in IRQL = PASSIVE_LEVEL. Se SynchronizeIrql = PASSIVE_LEVEL e il valore IRQL massimo di questo set di interrupt è PASSIVE_LEVEL, la routine InterruptService viene chiamata in PASSIVE_LEVEL. Per altre informazioni, vedere Using Passive-Level Interrupt Service Routines .For more information, see Using Passive-Level Interrupt Service Routines.
Salvataggio in virgola mobile
Specifica se il sistema salva lo stato a virgola mobile del processore quando si verifica l'interrupt. Se TRUE, il sistema salva lo stato a virgola mobile. Per le piattaforme basate su x86 e Itanium, questo valore deve essere impostato su FALSE. Per altre informazioni sul salvataggio dello stato mmx e a virgola mobile, vedere Uso di mmx o a virgola mobile in un driver WDM.
MessageBased
Specifica i parametri aggiuntivi dell'operazione da eseguire da IoConnectInterruptEx quando Version ha un valore di CONNECT_MESSAGE_BASED. Per altre informazioni, vedere Uso della versione CONNECT_MESSAGE_BASED di IoConnectInterruptEx.
PhysicalDeviceObject
Puntatore al PDO del dispositivo.
Connectioncontext
Puntatore a una posizione che riceve un puntatore al contesto di connessione. Se in versione restituita ha un valore di CONNECT_LINE_BASED, la routine fornisce un puntatore a una struttura KINTERRUPT . Se in versione restituita ha un valore di CONNECT_MESSAGE_BASED, la routine fornisce un puntatore a una struttura IO_INTERRUPT_MESSAGE_INFO .
Per ridurre al minimo il cast, ConnectionContext viene definito come unione. Usare ConnectionContext.Generic per considerare la posizione come PVOID. Usare ConnectionContext.InterruptObject e ConnectionContext.InterruptMessageTable per considerare la posizione come variabile PKINTERRUPT o PIO_INTERRUPT_MESSAGE_INFO rispettivamente.
Generico
Puntatore a una variabile PVOID in cui la routine IoConnectInterruptEx scrive un puntatore nel contesto di connessione.
InterruptMessageTable
Puntatore a una variabile PIO_INTERRUPT_MESSAGE_INFO in cui la routine IoConnectInterruptEx scrive un puntatore nel contesto di connessione.
InterruptObject
Puntatore a una variabile PKINTERRUPT in cui la routine IoConnectInterruptEx scrive un puntatore nel contesto di connessione.
MessageServiceRoutine
Puntatore alla routine InterruptMessageService da registrare come ISR per gli interrupt del dispositivo.
ServiceContext
Specifica il valore da passare come parametro ServiceContext della routine InterruptMessageService o InterruptService per l'interrupt.
SpinLock
Puntatore a un blocco spin da usare come blocco di rotazione di interrupt per il set di interrupt o NULL. Se NULL, il sistema alloca un blocco spin per fungere da blocco di rotazione di interruzione. Se non è NULL, è necessario inizializzare il blocco di selezione con KeInitializeSpinLock.
SynchronizeIrql
Specifica il dispositivo minimo IRQL (DIRQL) in cui viene eseguito l'ISR. Il sistema usa questo valore solo se è maggiore del valore IRQL massimo del set di interrupt; in caso contrario, il sistema usa il valore IRQL massimo. I driver specificano quasi sempre PASSIVE_LEVEL per SynchronizeIrql.
Salvataggio in virgola mobile
Specifica se il sistema salva lo stato a virgola mobile del processore quando si verifica l'interrupt. Se TRUE, il sistema salva lo stato a virgola mobile.
FallBackServiceRoutine
Puntatore a una routine InterruptService da utilizzare come ISR per gli interrupt basati su riga. Se il dispositivo non ha interruzioni segnalate dal messaggio, ma ha interruzioni basate su riga, il sistema registra questa routine per gestire gli interrupt basati su riga.
Commenti
La routine IoConnectInterruptEx accetta un singolo parametro Parameters , che punta a una struttura IO_CONNECT_INTERRUPT_PARAMETERS che contiene tutti i parametri dell'operazione.
Requisiti
Requisito | Valore |
---|---|
Intestazione | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |