Condividi tramite


MINIPORT_SYNCHRONIZE_INTERRUPT funzione di callback (ndis.h)

Un driver miniport deve fornire un gestore MiniportSynchronizeInterrupt se qualsiasi funzione driver eseguita in meno di DIRQL condivide le risorse con la funzione MiniportInterrupt .

Per le interruzioni segnalate dal messaggio, il driver miniport fornisce un gestore MiniportSynchronizeMessageInterrupt se qualsiasi funzione driver eseguita in meno di DIRQL condivide le risorse per un interruzione del messaggio segnalato con la funzione MiniportMessageInterrupt .

Nota È necessario dichiarare questa funzione usando il tipo di MINIPORT_SYNCHRONIZE_INTERRUPT per gli interruzioni non segnalati dal messaggio oppure usando il tipo di MINIPORT_SYNCHRONIZE_MESSAGE_INTERRUPT per gli interruzioni segnalate dal messaggio. Per altre informazioni, vedere la sezione Esempi seguenti.
 

Sintassi

MINIPORT_SYNCHRONIZE_INTERRUPT MiniportSynchronizeInterrupt;

BOOLEAN MiniportSynchronizeInterrupt(
  [in] NDIS_HANDLE SynchronizeContext
)
{...}

Parametri

[in] SynchronizeContext

Handle per un'area di contesto fornita quando la funzione miniportxxx o interna del driver miniport Funzione NdisMSynchronizeWithInterruptEx .

Valore restituito

MiniportSynchronizeInterrupt restituisce un valore booleano con un significato determinato dal driver. NDIS restituisce lo stesso valore quando NDIS restituisce da NdisMSynchronizeWithInterruptEx.

Commenti

Nota Le informazioni contenute in questa sezione possono essere applicate anche agli interruzioni segnalate dal messaggio sostituendo "MiniportSynchronizeMessageInterrupt" per "MiniportMessageInterrupt" e sostituendo "MiniportSynchronizeInterrupt" per "MiniportSynchronizeMessageInterrupt".
 
Se qualsiasi funzione del driver miniport che viene eseguita a meno delle risorse DIRQL condivisioni risorse, ad esempio i registri della scheda di interfaccia di rete, con la funzione MiniportInterrupt del driver, tale driver non può accedere direttamente a tali risorse. Se una funzione con priorità inferiore tenta di accedere direttamente alle risorse condivise, potrebbe essere preceduta da MiniportInterrupt, che potrebbe ignorare le modifiche dello stato della funzione driver con priorità inferiore.

Per sincronizzare l'accesso alle risorse condivise con MiniportInterrupt, le funzioni del driver con priorità inferiore devono chiamare Funzione NdisMSynchronizeWithInterruptEx . La funzione MiniportSynchronizeInterrupt del driver accede alle risorse condivise in DIRQL. La chiamata a NdisMSynchronizeWithInterruptEx impedisce le condizioni di gara e i deadlock in tale miniport driver.

Le funzioni driver con priorità inferiore che condividono le risorse tra di loro (ma non con alcuna funzione eseguita in DIRQL) devono usare un blocco spin per proteggere tali risorse condivise.

MiniportSynchronizeInterrupt viene eseguito all'indirizzo DIRQL assegnato quando la funzione MiniportInitializeEx del driver chiama la Funzione NdisMRegisterInterruptEx . Come qualsiasi funzione driver eseguita in DIRQL, MiniportSynchronizeInterrupt deve restituire il controllo al chiamante il più rapidamente possibile e può chiamare solo quelle funzioni NdisXxx sicure per chiamare in qualsiasi IRQL.

Esempi

Per definire una funzione MiniportSynchronizeInterrupt , è prima necessario fornire una dichiarazione di funzione che identifica il tipo di funzione che si sta definendo. Windows fornisce un set di tipi di funzione per i driver. La dichiarazione di una funzione usando i tipi di funzione consente l'analisi del codice per i driver, il verifica driver statico (SDV) e altri strumenti di verifica trovano errori ed è un requisito per la scrittura di driver per il sistema operativo Windows.

Ad esempio, per definire una funzione MiniportSynchronizeInterrupt denominata "MySynchronizeInterrupt ", usare il tipo MINIPORT_SYNCHRONIZE_INTERRUPT come illustrato nell'esempio di codice seguente:

MINIPORT_SYNCHRONIZE_INTERRUPT MySynchronizeInterrupt;

Implementare quindi la funzione come indicato di seguito:

_Use_decl_annotations_
BOOLEAN
 MySynchronizeInterrupt(
    NDIS_HANDLE  SynchronizeContext
    )
  {...}

Per definire una funzione MiniportSynchronizeMessageInterrupt per gli interruzioni segnalati dal messaggio, usare il tipo di MINIPORT_SYNCHRONIZE_MESSAGE_INTERRUPT come illustrato nell'esempio di codice seguente:

MINIPORT_SYNCHRONIZE_MESSAGE_INTERRUPT MySynchronizeMessageInterrupt;

Implementare quindi la funzione come indicato di seguito:

_Use_decl_annotations_
BOOLEAN
 MySynchronizeMessageInterrupt(
    NDIS_HANDLE  SynchronizeContext
    )
  {...}

I tipi di funzione MINIPORT_SYNCHRONIZE_INTERRUPT e MINIPORT_SYNCHRONIZE_MESSAGE_INTERRUPT sono definiti nel file di intestazione Ndis.h. Per identificare in modo più accurato gli errori durante l'esecuzione degli strumenti di analisi del codice, assicurarsi di aggiungere l'annotazione Use_decl_annotations alle definizioni delle funzioni. L'annotazione Use_decl_annotations garantisce che vengano usate le annotazioni applicate al tipo di funzione 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 NDIS.

Per informazioni su Use_decl_annotations, vedere Annotazione del comportamento della funzione.

Requisiti

Requisito Valore
Client minimo supportato Supportato in NDIS 6.0 e versioni successive.
Piattaforma di destinazione Windows
Intestazione ndis.h (includere Ndis.h)
IRQL Vedere La sezione Osservazioni

Vedi anche

MiniportInetrrupt

MiniportInitializeEx

NdisAllocateSpinLock

NdisMRegisterInterruptEx

NdisMSynchronizeWithInterruptEx