NDK_FN_BUILD_LAM fonction de rappel (ndkpi.h)
La fonction NdkBuildLam (NDK_FN_BUILD_LAM) obtient un mappage d’adresses logiques (LAM) d’adaptateur à partir du fournisseur NDK pour une région de mémoire pratiquement contiguë.
Syntaxe
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
)
{...}
Paramètres
[in] pNdkAdapter
Pointeur vers un objet adaptateur NDK (NDK_ADAPTER).
[in] Mdl
Une liste de descripteurs mémoire (MDL) ou une chaîne de MDL. La partie de la chaîne MDL entre l’adresse virtuelle de départ et le nombre d’octets dans le paramètre Length doit représenter une région de mémoire pratiquement contiguë.
[in] Length
Nombre d’octets à mapper à partir de l’adresse virtuelle de la première MDL. L’adresse virtuelle MDL peut être obtenue avec la macro MmGetMdlVirtualAddress . La longueur ne doit pas dépasser le nombre total d’octets représentés par la chaîne MDL.
[in] RequestCompletion
Pointeur vers une fonction de rappel NdkRequestCompletion (NDK_FN_REQUEST_COMPLETION).
[in, optional] RequestContext
Valeur de contexte pour le fournisseur à transmettre à la fonction de rappel NdkRequestCompletion spécifiée dans le paramètre RequestCompletion .
pNdkLAM
Pointeur vers une mémoire tampon qui contiendra une structure NDK_LOGICAL_ADDRESS_MAPPING qui contient un tableau de pages d’adaptateur. Le tableau de pages de l’adaptateur est stocké dans le membre AdapterPageArray et le membre AdapterPageCount contient le nombre d’éléments de page de l’adaptateur.
pLAMSize
Taille, en octets, de la mémoire tampon au niveau du paramètre pNdkLAM pour l’entrée, ou le nombre réel d’octets écrits pour la sortie.
[out] pFBO
La première valeur de décalage d’octet (FBO) est retournée à cet emplacement. Le FBO est le décalage de départ dans la première page de l’adaptateur.
Valeur retournée
La fonction NdkBuildLam retourne l’un des codes NTSTATUS suivants.
Code de retour | Description |
---|---|
|
L’opération s’est terminée avec succès. |
|
La requête est en attente, la fonction spécifiée dans le paramètre RequestCompletion (NDK_FN_REQUEST_COMPLETION) est appelée lorsque l’opération de génération LAM est terminée. |
|
La partie de la chaîne MDL de l’adresse virtuelle de départ jusqu’au nombre d’octets spécifié dans le paramètre Length ne représente pas une région de mémoire pratiquement contiguë. |
|
La demande a échoué en raison de ressources insuffisantes.
Important La requête peut échouer en ligne et de manière asynchrone avec ce code status.
|
|
La taille de la mémoire tampon indiquée par le paramètre *pLAMSize est trop petite pour contenir le LAM. Dans ce cas, la valeur de *pLAMSize est mise à jour avec la taille de mémoire tampon requise. |
|
Une erreur est survenue. |
Remarques
La partie de la chaîne MDL de l’adresse virtuelle de départ jusqu’au nombre d’octets spécifié dans le paramètre Length doit représenter une région de mémoire pratiquement contiguë. Sinon, le fournisseur NDK doit échouer la demande. Il incombe au consommateur NDK de s’assurer que la chaîne MDL est verrouillée. Autrement dit, les pages de la modification MDL sont épinglées dans la mémoire physique.
Un consommateur NDK peut appeler la fonction NdkGetPrivilegedMemoryRegionToken (NDK_FN_GET_PRIVILEGED_MEMORY_REGION_TOKEN) pour obtenir un jeton de région de mémoire privilégiée à partir d’un fournisseur NDK.
Toutes les pages d’adaptateur retournées par un fournisseur NDK doivent avoir une longueur de PAGE_SIZE octets, où PAGE_SIZE est la taille de page mémoire prise en charge par la plateforme hôte, telle que définie dans wdm.h.
Le fournisseur doit traiter la valeur d’adresse virtuelle que la macro MmGetMdlVirtualAddress retourne pour la MDL comme un index au début de la région de mémoire en cours de mappage. Le fournisseur ne doit pas utiliser la valeur d’adresse virtuelle comme adresse virtuelle valide pour la lecture ou l’écriture du contenu de la mémoire tampon.
Si un fournisseur a une erreur lors du traitement d’une requête NdkBuildLam , il doit libérer tous les mappages partiels qu’il a générés en interne jusqu’à présent avant de terminer la demande avec échec.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Aucune prise en charge, prise en charge dans NDIS 6.30 et versions ultérieures. |
Serveur minimal pris en charge | Windows Server 2012 |
Plateforme cible | Windows |
En-tête | ndkpi.h (incluez Ndkpi.h) |
IRQL | <=DISPATCH_LEVEL |
Voir aussi
Exigences relatives à la durée de vie des objets NDKPI