MINIPORT_RESTART funzione di callback (ndis.h)
La funzione MiniportRestart avvia una richiesta di riavvio per un adattatore miniport sospeso.
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 |
---|---|
|
MiniportRestart ha riavviato correttamente il flusso di dati di rete tramite la scheda miniport. |
|
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. |
|
MiniportRestart non è riuscito a causa di risorse insufficienti. |
|
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 .
- 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.
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 |