HW_MESSAGE_SIGNALED_INTERRUPT_ROUTINE funzione di callback (storport.h)
La routine HwMSInterruptRoutine gestisce un interrupt segnalato dal messaggio .
Sintassi
HW_MESSAGE_SIGNALED_INTERRUPT_ROUTINE HwMessageSignaledInterruptRoutine;
BOOLEAN HwMessageSignaledInterruptRoutine(
IN PVOID HwDeviceExtension,
IN ULONG MessageId
)
{...}
Parametri
HwDeviceExtension
Puntatore all'estensione del dispositivo hardware per l'adattatore bus host (HBA).
MessageId
Identificatore del messaggio.
Valore restituito
HwMSInterruptRoutine restituisce TRUE se determina che l'HBA ha generato l'identità del servizio gestito. Se l'HBA non ha generato l'identità del servizio gestito, HwMSInterruptRoutine restituisce FALSE.
Commenti
HwMSInterruptRoutine di un driver miniport elabora le interruzioni segnalate dai messaggi generati dall'HBA. Un driver miniport indica che l'HBA genera msi impostando il membro HwMSInterruptRoutine della struttura PORT_CONFIGURATION_INFORMATION in modo che punti alla routine HwMSInterruptRoutine . Se l'HBA non genera msi, un driver miniport deve impostare HwMSInterruptRoutine su NULL.
Se il membro InterruptSynchronizationMode della struttura PORT_CONFIGURATION_INFORMATION è impostato su InterruptSynchronizeAll, il driver Storport sincronizza tutti gli oggetti MSI che hanno origine con la scheda gestita o i dispositivi connessi alla scheda. Quando si verifica un interrupt, il driver Storport chiama la routine HwMSInterruptRoutine del driver miniport in DIRQL dopo aver acquisito il blocco di rotazione di interrupt.
Se il membro InterruptSynchronizationMode della struttura PORT_CONFIGURATION_INFORMATION è impostato su InterruptSynchronizePerMessage, il driver Storport chiama la routine HwMSInterruptRoutine del driver miniport in IRQL = DIRQL, tenendo premuto il blocco di spin interrupt corrispondente all'identificatore del messaggio (ID) indicato nel parametro MessageID . L'HBA può interrompere la routine HwMSInterruptRoutine per gli interrupt per altri ID messaggio, quindi il driver Storport potrebbe effettuare chiamate annidate a HwMSInterruptRoutine o eseguire istanze diverse di HwMSInterruptRoutine contemporaneamente su processori diversi. Per sincronizzare l'accesso ai dati sensibili da istanze diverse di HwMSInterruptRoutine, il miniport deve chiamare le routine StorPortAcquireMSISpinLock e StorPortReleaseMSISpinLock per acquisire e rilasciare i blocchi di selezione per gli ID messaggio diversi dall'ID in MessageID.
Un driver miniport può recuperare informazioni aggiuntive sul messaggio chiamando la routine StorPortGetMSIInfo .
Non deve chiamare la routine StorPortGetMSIInfo dall'interno della routine HwMSInterruptRoutine .
Il nome HwMSInterruptRoutine è solo un segnaposto. Il prototipo effettivo per questa routine viene definito in Storport.h come indicato di seguito:
typedef
BOOLEAN
HW_MESSAGE_SIGNALED_INTERRUPT_ROUTINE (
_In_ PVOID HwDeviceExtension,
_In_ ULONG MessageId
);
Esempio
Per definire una funzione di callback HwMSInterruptRoutine , è necessario innanzitutto fornire una dichiarazione di funzione che identifica il tipo di funzione di callback che si sta definendo. Windows fornisce un set di tipi di funzione di callback per i driver. La dichiarazione di una funzione tramite i tipi di funzione di callback consente di analizzare il codice per i driver, l'SDV ( Static Driver Verifier ) e altri strumenti di verifica di trovare errori ed è un requisito per la scrittura di driver per il sistema operativo Windows.
Ad esempio, per definire una routine di callback HwMSInterruptRoutine denominata MyHwMSIRoutine, usare il tipo di HW_MESSAGE_SIGNALED_INTERRUPT_ROUTINE , come illustrato nell'esempio di codice seguente:
HW_MESSAGE_SIGNALED_INTERRUPT_ROUTINE MyHwMSIRoutine;
Implementare quindi la routine di callback come indicato di seguito:
_Use_decl_annotations_
BOOLEAN
MyHwMSIRoutine (
_In_ PVOID DeviceExtension,
_In_ ULONG MessageId
);
{
...
}
Il tipo di funzione HW_MESSAGE_SIGNALED_INTERRUPT_ROUTINE è definito nel file di intestazione Storport.h. Per identificare in modo più accurato gli errori quando si eseguono gli strumenti di analisi del codice, assicurarsi di aggiungere l'annotazione Use_decl_annotations alla definizione della funzione. L'annotazione Use_decl_annotations garantisce che vengano utilizzate le annotazioni applicate al tipo di funzione HW_MESSAGE_SIGNALED_INTERRUPT_ROUTINE nel file di intestazione. Per altre informazioni sui requisiti per le dichiarazioni di funzione, vedere Dichiarazione di funzioni tramite tipi di ruolo per i driver Storport. Per informazioni sulle Use_decl_annotations, vedere Annotazione del comportamento della funzione.
Requisiti
Requisito | Valore |
---|---|
Piattaforma di destinazione | Universale |
Intestazione | storport.h (include Storport.h) |
IRQL | DIRQL |