Condividi tramite


NDK_FN_BUILD_LAM funzione di callback (ndkpi.h)

La funzione NdkBuildLam (NDK_FN_BUILD_LAM) ottiene un mapping di indirizzi logici dell'adattatore (LAM) dal provider NDK per un'area di memoria virtualmente contigua.

Sintassi

NDK_FN_BUILD_LAM NdkFnBuildLam;

NTSTATUS NdkFnBuildLam(
  [in]           NDK_ADAPTER *pNdkAdapter,
  [in]           MDL *Mdl,
  [in]           SIZE_T Length,
  [in]           NDK_FN_REQUEST_COMPLETION RequestCompletion,
  [in, optional] PVOID RequestContext,
                 NDK_LOGICAL_ADDRESS_MAPPING *pNdkLAM,
                 ULONG *pLAMSize,
  [out]          ULONG *pFBO
)
{...}

Parametri

[in] pNdkAdapter

Puntatore a un oggetto adattatore NDK (NDK_ADAPTER).

[in] Mdl

Elenco di descrittori di memoria (MDL) o catena di MDLs. La parte della catena MDL dall'indirizzo virtuale iniziale fino al numero di byte nel parametro Length deve rappresentare un'area di memoria virtualmente contigua.

[in] Length

Numero di byte di cui eseguire il mapping a partire dall'indirizzo virtuale del primo MDL. L'indirizzo virtuale MDL può essere ottenuto con la macro MmGetMdlVirtualAddress . La lunghezza non deve superare il numero totale di byte rappresentati dalla catena MDL.

[in] RequestCompletion

Puntatore a una funzione di callback NdkRequestCompletion (NDK_FN_REQUEST_COMPLETION).

[in, optional] RequestContext

Valore di contesto per il provider da passare di nuovo alla funzione di callback NdkRequestCompletion specificata nel parametro RequestCompletion .

pNdkLAM

Puntatore a un buffer che conterrà una struttura NDK_LOGICAL_ADDRESS_MAPPING che contiene una matrice di pagine dell'adattatore. La matrice di pagine dell'adapter viene archiviata nel membro AdapterPageArray e il membro AdapterPageCount contiene il numero di elementi della pagina dell'adapter.

pLAMSize

Dimensione, in byte, del buffer nel parametro pNdkLAM per l'input o il numero effettivo di byte scritti per l'output.

[out] pFBO

Il primo valore di offset di byte (FBO) viene restituito in questa posizione. L'FBO è l'offset iniziale all'interno della prima pagina dell'adapter.

Valore restituito

La funzione NdkBuildLam restituisce uno dei codici NTSTATUS seguenti.

Codice restituito Descrizione
STATUS_SUCCESS
Operazione riuscita.
STATUS_PENDING
La richiesta è in sospeso, la funzione specificata nel parametro RequestCompletion (NDK_FN_REQUEST_COMPLETION) verrà chiamata al termine dell'operazione di compilazione LAM.
STATUS_INVALID_PARAMETER
La parte della catena MDL dall'indirizzo virtuale iniziale fino al numero di byte specificato nel parametro Length non rappresenta un'area di memoria virtualmente contigua.
STATUS_INSUFFICIENT_RESOURCES
La richiesta non è riuscita a causa di risorse insufficienti.
Importante La richiesta può non riuscire inline e in modo asincrono con questo codice di stato.
 
STATUS_BUFFER_TOO_SMALL
La dimensione del buffer indicata dal parametro *pLAMSize è troppo piccola per contenere LAM. In questo caso, il valore di *pLAMSize viene aggiornato con le dimensioni del buffer necessarie.
Altri codici di stato
Si è verificato un errore.

Commenti

La parte della catena MDL dall'indirizzo virtuale iniziale fino al numero di byte specificati nel parametro Length deve rappresentare un'area di memoria virtualmente contigua. In caso contrario, il provider NDK deve non riuscire la richiesta. È responsabilità del consumer NDK assicurarsi che la catena MDL sia bloccata. Ovvero, le pagine della modifica MDL vengono aggiunte in memoria fisica.

Importante Il consumer NDK non deve usare la catena MDL mentre NdkBuildLam è in attesa di completamento.
 
Un adattatore accede alla memoria fisica con indirizzi logici. È simile a una CPU che accede alla memoria fisica con indirizzi virtuali. Se un consumer NDK userà pagine di memoria fisica direttamente come buffer di dati locali nelle richieste di invio, ricezione, lettura o scrittura, deve ottenere un mapping degli indirizzi logici dell'adapter NDK dal provider NDK e usare gli indirizzi logici anziché gli indirizzi fisici. Analogamente, un consumer NDK deve anche usare indirizzi logici nelle richieste di registrazione rapida.

Un consumer NDK può chiamare la funzione NdkGetPrivilegedMemoryRegionToken (NDK_FN_GET_PRIVILEGED_MEMORY_REGION_TOKEN) per ottenere un token di area di memoria con privilegi da un provider NDK.

Tutte le pagine dell'adattatore restituite da un provider NDK devono essere di lunghezza PAGE_SIZE byte, dove PAGE_SIZE è la dimensione della pagina di memoria supportata dalla piattaforma host, come definito in wdm.h.

Il provider deve considerare il valore dell'indirizzo virtuale restituito dalla macro MmGetMdlVirtualAddress per MDL come indice all'inizio dell'area di memoria di cui viene eseguito il mapping. Il provider non deve usare il valore dell'indirizzo virtuale come indirizzo virtuale valido per la lettura o la scrittura del contenuto del buffer.

Se un provider presenta un errore durante l'elaborazione di una richiesta NdkBuildLam , il provider deve rilasciare eventuali mapping parziali creati internamente prima di completare la richiesta con errore.

Requisiti

Requisito Valore
Client minimo supportato None supported,Supported in NDIS 6.30 and later.
Server minimo supportato Windows Server 2012
Piattaforma di destinazione Windows
Intestazione ndkpi.h (include Ndkpi.h)
IRQL <=DISPATCH_LEVEL

Vedi anche

MmGetMdlVirtualAddress

Requisiti di durata dell'oggetto NDKPI

NDK_ADAPTER

NDK_ADAPTER_DISPATCH

NDK_FN_GET_PRIVILEGED_MEMORY_REGION_TOKEN

NDK_FN_RELEASE_LAM

NDK_FN_REQUEST_COMPLETION

NDK_LOGICAL_ADDRESS_MAPPING