MINIPORT_RESTART funzione di callback (ndis.h)

La funzione MiniportRestart avvia una richiesta di riavvio per un adattatore miniport sospeso.

Nota È necessario dichiarare la funzione usando il tipo di MINIPORT_RESTART . Per altre informazioni, vedere la sezione Esempi seguenti.
 

Sintassi

MINIPORT_RESTART MiniportRestart;

NDIS_STATUS MiniportRestart(
  [in] NDIS_HANDLE MiniportAdapterContext,
       PNDIS_MINIPORT_RESTART_PARAMETERS RestartParameters
)
{...}

Parametri

[in] MiniportAdapterContext

Handle in un'area di contesto allocata dal driver miniport nella funzione MiniportInitializeEx . Il driver miniport usa questa area di contesto per mantenere le informazioni sullo stato per un adattatore miniport.

RestartParameters

Puntatore a un oggetto NDIS_MINIPORT_RESTART_PARAMETERS struttura che definisce i parametri di riavvio per l'adattatore miniport.

Valore restituito

MiniportRestart restituisce uno dei valori di stato seguenti:

Codice restituito Descrizione
NDIS_STATUS_SUCCESS

MiniportRestart ha riavviato correttamente il flusso di dati di rete tramite la scheda miniport.

NDIS_STATUS_PENDING
MiniportRestart non ha completato l'operazione di riavvio e l'operazione verrà completata in modo asincrono. Il driver miniport deve chiamare la funzione NdisMRestartComplete al termine dell'operazione.
NDIS_STATUS_RESOURCES

MiniportRestart non è riuscito a causa di risorse insufficienti.

NDIS_STATUS_FAILURE
Nessuno dei valori di stato precedenti si applica. In questa situazione, il driver deve chiamare la funzione NdisWriteErrorLogEntry con parametri che specificano il motivo dell'errore.

Commenti

Un driver specifica il punto di ingresso MiniportRestart quando chiama Funzione NdisMRegisterMiniportDriver .

L'adattatore miniport specificato dal parametro MiniportAdapterContext entra nello stato Di riavvio quando NDIS chiama MiniportRestart.

Quando NDIS chiama MiniportRestart, un driver miniport:

  • Deve completare tutte le attività necessarie per riprendere le operazioni di invio e ricezione.
  • Facoltativamente modifica gli attributi di riavvio specificati nel membro RestartAttributes dell'oggetto NDIS_MINIPORT_RESTART_PARAMETERS struttura. Se il puntatore in RestartAttributes è NULL, il driver miniport non deve modificare o aggiungere all'elenco degli attributi di riavvio. Se il puntatore in RestartAttributes non è NULL, punta a una struttura NDIS_RESTART_ATTRIBUTES . Se un driver miniport non viene riavviato, non deve modificare alcun attributo.
  • Può fornire indicazioni sullo stato con l'oggetto Funzione NdisMIndicateStatusEx .
  • Deve gestire le richieste di stato nella funzione MiniportOidRequest .
Se un driver miniport modifica l'elenco degli attributi di riavvio, il driver miniport:
  • Può aggiungere nuovi attributi specifici del supporto all'elenco degli attributi di riavvio. In questa situazione, il driver miniport deve allocare un nuovo NDIS_RESTART_ATTRIBUTES struttura, ad esempio con Funzione NdisAllocateMemoryWithTagPriority e fornire spazio di memoria per i nuovi attributi. Dopo aver propagato gli attributi di riavvio ai driver overlying, NDIS libera la memoria degli attributi per i driver miniport.
  • Può modificare gli attributi specifici del supporto nell'elenco degli attributi di riavvio. Se il driver miniport richiede più spazio di memoria, può liberare una struttura NDIS_RESTART_ATTRIBUTES con la funzione NdisFreeMemory e allocare una nuova struttura per contenere le informazioni modificate. Dopo aver propagato gli attributi di riavvio ai driver overlying, NDIS libera la memoria degli attributi per i driver miniport.
  • Può modificare qualsiasi campo nell'oggetto NDIS_RESTART_GENERAL_ATTRIBUTES struttura. Quando NDIS fornisce un puntatore non NULL nel membro RestartAttributes del NDIS_MINIPORT_RESTART_PARAMETERS struttura, l'elenco degli attributi contiene una voce in cui il membro OID nella struttura NDIS_RESTART_ATTRIBUTES è OID_GEN_MINIPORT_RESTART_ATTRIBUTES e il membro Dati contiene una struttura NDIS_RESTART_GENERAL_ATTRIBUTES.
  • Assicurarsi che l'oggetto NDIS_RESTART_GENERAL_ATTRIBUTES struttura contiene le informazioni corrette. Per assicurarsi che la struttura NDIS_RESTART_GENERAL_ATTRIBUTES contenga le informazioni necessarie, è necessario prima determinare la versione della struttura controllando il membro Revisionnella struttura NDIS_OBJECT_HEADER specificata nel membro Intestazione della struttura NDIS_RESTART_GENERAL_ATTRIBUTES.
NDIS non avvia altre operazioni di Plug and Play (PnP) per l'adattatore miniport, ad esempio arresta, inizializzazione, modifica della potenza o una richiesta di sospensione, fino al completamento dell'operazione di riavvio.

Dopo che il driver miniport riavvia correttamente le operazioni di invio e ricezione, deve completare l'operazione di riavvio. Se il driver restituisce NDIS_STATUS_SUCCESS da MiniportRestart, l'operazione di riavvio viene completata. Se il driver restituisce NDIS_STATUS_PENDING, può continuare le operazioni di riavvio. L'operazione di riavvio viene completata dopo che il driver chiama la funzione NdisMRestartComplete . Al termine dell'operazione di riavvio, l'adattatore miniport si trova nello stato In esecuzione .

Il driver miniport può riprendere a indicare pacchetti ricevuti per l'adattatore miniport immediatamente dopo NDIS chiama MiniportRestart e prima che il driver chiami NdisMRestartComplete. Il driver miniport deve essere pronto per accettare richieste di invio dopo che il driver completa la richiesta di riavvio.

Se il driver miniport non riavvia le operazioni di invio e ricezione, il driver deve restituire uno stato di errore appropriato da MiniportRestart. In questa situazione, il driver deve arrestare tutte le operazioni di invio o ricezione avviate e quindi tornare allo stato sospeso .

NDIS chiama MiniportRestart in IRQL = PASSIVE_LEVEL.

Esempi

Per definire una funzione MiniportRestart , è 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 MiniportRestart denominata "MyRestart", usare il tipo di MINIPORT_RESTART , come illustrato nell'esempio di codice seguente:

MINIPORT_RESTART MyRestart;

Implementare quindi la funzione come indicato di seguito:

_Use_decl_annotations_
NDIS_STATUS
 MyRestart(
    NDIS_HANDLE  MiniportAdapterContext,
    PNDIS_MINIPORT_RESTART_PARAMETERS  RestartParameters
    )
  {...}

Il tipo di funzione MINIPORT_RESTART è definito 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 alla definizione della funzione. L'annotazione Use_decl_annotations garantisce che vengano usate le annotazioni applicate al tipo di funzione MINIPORT_RESTART 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 PASSIVE_LEVEL

Vedi anche

MiniportInitializeEx

MiniportOidRequest

MiniportPause

NDIS_MINIPORT_RESTART_PARAMETERS

NDIS_OBJECT_HEADER

NDIS_RESTART_ATTRIBUTES

NDIS_RESTART_GENERAL_ATTRIBUTES NdisAllocateMemoryWithTagPriority

NdisFreeMemory

NdisMIndicateStatusEx

NdisMRegisterMiniportDriver

NdisMRestartComplete

NdisWriteErrorLogEntry

OID_GEN_MINIPORT_RESTART_ATTRIBUTES