KMESSAGE_SERVICE_ROUTINE funzione di callback (wdm.h)

Una routine InterruptMessageService consente di gestire un interrupt segnalato dal messaggio.

Sintassi

KMESSAGE_SERVICE_ROUTINE KmessageServiceRoutine;

BOOLEAN KmessageServiceRoutine(
  [in] _KINTERRUPT *Interrupt,
  [in] PVOID ServiceContext,
       ULONG MessageID
)
{...}

Parametri

[in] Interrupt

Puntatore alla struttura KINTERRUPT per l'interrupt. Il driver ha ricevuto questo puntatore nella chiamata alla routine IoConnectInterruptEx che ha registrato la routine InterruptMessageService del driver.

[in] ServiceContext

Valore ServiceContext passato al driver A IoConnectInterruptEx quando è stata registrata la routine InterruptMessageService .

MessageID

ID del messaggio per l'interrupt. Questo valore è l'indice per la voce dell'interrupt nella matrice membro MessageInfo nella struttura IO_INTERRUPT_MESSAGE_INFO che descrive gli interrupt del messaggio segnalato dal driver.

Valore restituito

La routine InterruptMessageService restituisce TRUE se l'interrupt è gestito dalla routine InterruptMessageService . In caso contrario, restituisce FALSE.

Commenti

I driver usano IoConnectInterruptEx per registrare una routine InterruptMessageService per gestire le interruzioni segnalate dai messaggi. Un driver può successivamente annullare la registrazione della routine chiamando IoDisconnectInterruptEx. Le interruzioni segnalate dai messaggi sono supportate a partire da Windows Vista.

Il sistema può chiamare una routine InterruptMessageService anche quando l'interrupt della routine non si è verificato. Ad esempio, se viene condiviso un interrupt segnalato dal messaggio, InterruptMessageService può essere chiamato per gli interrupt appartenenti ad altri dispositivi. La routine deve verificare se il valore del parametro ServiceContext corrisponde al valore passato a IoConnectInterruptEx. Se il valore corrisponde, InterruptMessageService gestisce l'interrupt e restituisce TRUE. In caso contrario, InterruptMessageService non gestisce l'interrupt e restituisce FALSE.

Un driver che usa MSI (PCI 2.2) deve esaminare il parametro MessageID per distinguere i diversi messaggi generati dal dispositivo, poiché condividono tutte la stessa risorsa di interrupt (e quindi lo stesso callback interruptMessageService> ).

Si noti che se il sistema riceve più interrupt identici in un breve intervallo di tempo, può combinarli in una singola chiamata a InterruptMessageService. La routine deve essere scritta per gestire più interrupt identici all'interno di una singola chiamata.

Gli interrupt con segnalazione dei messaggi sono simili a quello degli interrupt attivati da edge. Il dispositivo invia una richiesta di interruzione ma non riceve alcun riconoscimento hardware che la richiesta è stata ricevuta.

Un InterruptMessageService viene eseguito in corrispondenza di un IRQL maggiore o uguale al valore massimo di IRQL (DIRQL) del dispositivo per ogni interruzione degli handle di routine.

Esempio

Per definire una routine di callback InterruptMessageService , è innanzitutto necessario fornire una dichiarazione di funzione che identifica il tipo di routine 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 InterruptMessageService denominata MyInterruptMessageService, usare il tipo di KMESSAGE_SERVICE_ROUTINE come illustrato nell'esempio di codice seguente:

KMESSAGE_SERVICE_ROUTINE MyInterruptMessageService;

Implementare quindi la routine di callback come indicato di seguito:

_Use_decl_annotations_
BOOLEAN
  MyInterruptMessageService(
    struct _KINTERRUPT  *Interrupt,
    PVOID  ServiceContext,
    ULONG  MessageId 
    )
  {
      // Function body
  }

Il tipo di funzione KMESSAGE_SERVICE_ROUTINE è definito nel file di intestazione Wdm.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 KMESSAGE_SERVICE_ROUTINE nel file di intestazione. Per altre informazioni sui requisiti per le dichiarazioni di funzione, vedere Dichiarazione di funzioni tramite tipi di ruolo di funzione per i driver WDM. Per informazioni su Use_decl_annotations, vedere Annotazione del comportamento della funzione.

Requisiti

Requisito Valore
Client minimo supportato Vedere la sezione Osservazioni.
Piattaforma di destinazione Desktop
Intestazione wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
IRQL Vedere la sezione Osservazioni.

Vedi anche

Uso dei descrittori di risorse interrupt

IO_INTERRUPT_MESSAGE_INFO

IoConnectInterruptEx

IoDisconnectInterruptEx