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 |
---|---|
|
Operazione riuscita. |
|
La richiesta è in sospeso, la funzione specificata nel parametro RequestCompletion (NDK_FN_REQUEST_COMPLETION) verrà chiamata al termine dell'operazione di compilazione LAM. |
|
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. |
|
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.
|
|
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. |
|
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.
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
Requisiti di durata dell'oggetto NDKPI