Condividi tramite


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_STATUS_PENDING
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 .
NDIS_STATUS_FAILURE
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

Nota Un driver miniport deve avere già chiamato NdisMRegisterScatterGatherDma o NdisMRegisterDmaChannel per inizializzare un canale DMA a dispersione/raccolta prima di chiamare NdisMAllocateSharedMemoryAsyncEx.
 
I driver delle schede di interfaccia di rete DMA master del bus chiamano NdisMAllocateSharedMemoryAsyncEx per allocare dinamicamente la memoria condivisa. Tali driver allocano anche spazio di memoria condivisa durante l'inizializzazione. Questi driver usano la memoria condivisa allocata dinamicamente per le operazioni di trasferimento quando il traffico di rete elevato pone richieste eccessive sullo spazio di memoria condiviso esistente.

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)

Vedi anche

MiniportHaltEx

MiniportInitializeEx

MiniportSharedMemoryAllocateComplete

NdisMAllocateSharedMemory

NdisMFreeSharedMemory

NdisMRegisterDmaChannel

NdisMRegisterScatterGatherDma