Funzione NdisMAllocateSharedMemoryAsyncEx (ndis.h)
Attenzione
Per i processori ARM e ARM64, è consigliabile che i writer di driver NDIS usino WDF DMA o WDM DMA anziché NDIS Scatter/Gather DMA.
Per altre informazioni su WDF DMA, vedere Gestione delle operazioni DMA nei driver KMDF.
Per altre informazioni su WDM DMA, vedere gli argomenti figlio correlati a DMA di Gestione dell'input/output per i driver.
I driver Miniport chiamano la funzione NdisMAllocateSharedMemoryAsyncEx per allocare memoria aggiuntiva condivisa tra il driver e la scheda di interfaccia di rete DMA master del bus, in genere quando il driver miniport è in esecuzione basso sulla scheda di interfaccia di rete disponibile.
Sintassi
NDIS_STATUS NdisMAllocateSharedMemoryAsyncEx(
[in] NDIS_HANDLE MiniportDmaHandle,
[in] ULONG Length,
[in] BOOLEAN Cached,
[in] PVOID Context
);
Parametri
[in] MiniportDmaHandle
Handle per un'area di contesto utilizzata da NDIS per gestire una risorsa DMA. Il chiamante ha ottenuto questo handle chiamando l'oggetto Funzione NdisMRegisterScatterGatherDma .
[in] Length
Numero di byte da allocare.
[in] Cached
Questo parametro viene ignorato (la memoria memorizzata nella cache viene sempre usata nei sistemi x86 e x64).
[in] Context
Puntatore al contesto determinato dal driver da passare alla funzione MiniportSharedMemoryAllocateComplete quando viene chiamata.
Valore restituito
NdisMAllocateSharedMemoryAsyncEx può restituire uno dei seguenti elementi:
Codice restituito | Descrizione |
---|---|
|
NDIS chiamerà la funzione MiniportSharedMemoryAllocateComplete e fornisce informazioni che descrivono la memoria condivisa allocata. Se il tentativo di allocare memoria condivisa ha esito negativo, NDIS chiama MiniportSharedMemoryAllocateComplete e passa puntatoriNULL . |
|
Impossibile allocare la memoria richiesta in questo momento. Se NdisMAllocateSharedMemoryAsyncEx restituisce questo stato, una chiamata successiva con gli stessi parametri potrebbe avere esito positivo, a seconda che le risorse di sistema siano diventate disponibili. |
Commenti
In genere un driver miniport gestisce una o più variabili di stato per tenere traccia del numero di buffer di memoria condivisi disponibili per i trasferimenti in ingresso. Quando il numero di buffer disponibili raggiunge un valore basso determinato dal driver, il driver miniport chiama NdisMAllocateSharedMemoryAsyncEx per allocare più spazio buffer in memoria condivisa. Quando il numero di buffer disponibili raggiunge un livello elevato determinato dal driver, il driver miniport chiama NdisMFreeSharedMemory una o più volte per rilasciare le allocazioni dinamiche precedenti.
In genere, un driver miniport mantiene il blocco di memoria condivisa che la funzione MiniportInitializeEx allocata con NdisMAllocateSharedMemory fino a quando non viene rimossa una scheda di interfaccia di rete. Quando la scheda di interfaccia di rete viene rimossa, NDIS chiama la funzione MiniportHaltEx del driver miniport . Questa allocazione è sufficiente per gestire una domanda media per i trasferimenti tramite la scheda di interfaccia di rete.
Un driver miniport deve impostare un limite sulla quantità di memoria condivisa che può allocare. Questo limite è specifico del driver e deve essere abbastanza elevato in modo che il driver non esegua buffer. Non e un limite eccessivamente elevato, in quanto ciò potrebbe comportare un consumo di memoria condivisa che potrebbe ridurre le prestazioni del sistema.
Qualsiasi driver miniport che chiama NdisMAllocateSharedMemoryAsyncEx o NdisMAllocateSharedMemory deve rilasciare tutte le allocazioni in sospeso con una o più chiamate a NdisMFreeSharedMemory quando la scheda di interfaccia di rete viene rimossa.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Supportato in NDIS 6.0 e versioni successive. |
Piattaforma di destinazione | Universale |
Intestazione | ndis.h (includere Ndis.h) |
IRQL | <= DISPATCH_LEVEL |
Regole di conformità DDI | Irql_Gather_DMA_Function(ndis) |