PROTOCOL_CM_OPEN_AF funzione di callback (ndis.h)
È necessaria la funzione ProtocolCmOpenAf . Questa funzione alloca risorse per ogni apertura per un gestore chiamate per interagire con un client NDIS orientato alla connessione che apre la famiglia di indirizzi.
Sintassi
PROTOCOL_CM_OPEN_AF ProtocolCmOpenAf;
NDIS_STATUS ProtocolCmOpenAf(
[in] NDIS_HANDLE CallMgrBindingContext,
[in] PCO_ADDRESS_FAMILY AddressFamily,
[in] NDIS_HANDLE NdisAfHandle,
[out] PNDIS_HANDLE CallMgrAfContext
)
{...}
Parametri
[in] CallMgrBindingContext
Per un gestore chiamate non integrato, CallMgrBindingContext specifica l'handle in un'area di contesto allocata dal gestore chiamate in cui i responsabili delle chiamate mantengono le relative informazioni sullo stato per associazione. Il gestore chiamate ha fornito questo handle quando ha chiamato NdisOpenAdapterEx.
Per un gestore chiamate integrato (MCM), CallMgrBindingContext specifica l'handle in un'area di contesto allocata miniport in cui il miniport gestisce le informazioni sullo stato per adattatore. Il miniport ha fornito questo handle nella chiamata NdisMSetAttributesEx (per i driver 5.x) o la chiamata NdisMSetMiniportAttributes (per i driver 6.x).
[in] AddressFamily
Specifica la famiglia di indirizzi aperta da un client. Questa famiglia di indirizzi è stata registrata dal gestore chiamate quando ha chiamato NdisCmRegisterAddressFamilyEx.
[in] NdisAfHandle
Specifica un handle, fornito da NDIS, che identifica in modo univoco questa istanza della famiglia di indirizzi. Questo handle è opaco per il gestore chiamate e riservato per l'uso del sistema.
[out] CallMgrAfContext
Specifica l'handle in un'area di contesto fornita dal gestore chiamate in cui il gestore chiamate mantiene lo stato relativo a questa apertura di una famiglia di indirizzi fornita.
Valore restituito
ProtocolCmOpenAf restituisce lo stato delle operazioni come uno dei seguenti:
Codice restituito | Descrizione |
---|---|
|
Indica che il gestore chiamate ha allocato e inizializzato tutte le risorse necessarie per accettare richieste dal client a questa famiglia di indirizzi. |
|
Indica che l'operazione richiesta viene gestita in modo asincrono. Il gestore chiamate deve chiamare NdisCmOpenAddressFamilyComplete quando ha completato tutte le operazioni open-AF per indicare a NDIS (e al client) che le operazioni sono state completate. |
|
Indica che il gestore chiamate non è riuscito a completare le operazioni necessarie a causa di una mancanza di risorse di sistema disponibili, ad esempio memoria. |
|
Indica che il gestore chiamate non è riuscito a impostarsi in uno stato in cui può accettare richieste dal client per operare su questa famiglia di indirizzi. Questo potrebbe essere uno stato di errore propagato da un'altra funzione di libreria NDIS o da qualsiasi stato di errore determinato dal writer del driver. |
Commenti
ProtocolCmOpenAf esegue le allocazioni necessarie di risorse dinamiche e strutture che il writer di call manager ritiene necessario per eseguire operazioni per conto del client che apre un'istanza di questa famiglia di indirizzi. Tali risorse includono, ma non sono limitati a, buffer di memoria, strutture di dati, eventi e altre risorse simili. Un gestore chiamate deve anche inizializzare tutti i dati pertinenti per aprire prima di restituire il controllo a NDIS.
Quando un gestore chiamate ha allocato l'area dello stato per apertura, l'indirizzo dell'area di stato deve essere impostato nell'handle CallMgrAfContext prima di restituire il controllo a NDIS. A tale scopo, dereference CallMgrAfContext e archiviare un puntatore all'area dati come valore dell'handle. Ad esempio:
*CallMgrAfContext = SomeBuffer;
Se ProtocolCmOpenAf non può allocare le risorse per apertura necessarie per eseguire richieste successive per conto del client che apre questa famiglia di indirizzi, deve liberare tutte le risorse allocate per l'apertura e restituire il controllo all'NDIS con NDIS_STATUS_RESOURCES.
Se ProtocolCmOpenAf ha completato le operazioni necessarie e il cm è pronto per accettare richieste dal client, ProtocolCmOpenAf deve restituire il controllo il più rapidamente possibile con uno stato di NDIS_STATUS_SUCCESS.
Esempi
Per definire una funzione ProtocolCmOpenAf , è 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 ProtocolCmOpenAf denominata "MyCmOpenAf ", usare il tipo di PROTOCOL_CM_OPEN_AF come illustrato nell'esempio di codice seguente:
PROTOCOL_CM_OPEN_AF MyCmOpenAf;
Implementare quindi la funzione come indicato di seguito:
_Use_decl_annotations_
NDIS_STATUS
MyCmOpenAf(
NDIS_HANDLE CallMgrBindingContext,
PCO_ADDRESS_FAMILY AddressFamily,
NDIS_HANDLE NdisAfHandle,
PNDIS_HANDLE CallMgrAfContext
)
{...}
Il tipo di funzione PROTOCOL_CM_OPEN_AF è 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 PROTOCOL_CM_OPEN_AF 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 per i driver NDIS 6.0 e NDIS 5.1 (vedere ProtocolCmOpenAf (NDIS 5.1) in Windows Vista. Supportato per i driver NDIS 5.1 (vedere ProtocolCmOpenAf (NDIS 5.1) in Windows XP. |
Piattaforma di destinazione | Windows |
Intestazione | ndis.h (includere Ndis.h) |
IRQL | <= DISPATCH_LEVEL |