NDK_FN_REGISTER_MR fonction de rappel (ndkpi.h)

La fonction NdkRegisterMr (NDK_FN_REGISTER_MR) enregistre une région de mémoire pratiquement contiguë avec un adaptateur NDK.

Syntaxe

NDK_FN_REGISTER_MR NdkFnRegisterMr;

NTSTATUS NdkFnRegisterMr(
  [in]           NDK_MR *pNdkMr,
  [in]           MDL *Mdl,
  [in]           SIZE_T Length,
  [in]           ULONG Flags,
  [in]           NDK_FN_REQUEST_COMPLETION RequestCompletion,
  [in, optional] PVOID RequestContext
)
{...}

Paramètres

[in] pNdkMr

Pointeur vers un objet de région de mémoire (MR) NDK (NDK_MR).

[in] Mdl

MdL ou chaîne de MDL qui représentent une région de mémoire pratiquement contiguë à partir de l’adresse virtuelle de départ jusqu’au nombre d’octets spécifié dans le paramètre Length .

[in] Length

Nombre d’octets à inscrire à partir de l’adresse virtuelle de la première MDL. L’adresse virtuelle de la première MDL peut être obtenue en appelant la macro MmGetMdlVirtualAddress . La longueur ne doit pas dépasser le nombre total d’octets représentés par la chaîne MDL.

[in] Flags

Masque de bits d’indicateurs qui spécifient les autorisations d’accès pour la région de mémoire inscrite. Les indicateurs suivants peuvent être définis :

Valeur Signification
NDK_MR_FLAG_ALLOW_LOCAL_READ
0x00000000
NDK_MR_FLAG_ALLOW_LOCAL_WRITE
0x00000001
NDK_MR_FLAG_ALLOW_REMOTE_READ
0x00000002
NDK_MR_FLAG_ALLOW_REMOTE_WRITE
0x00000005
NDK_MR_FLAG_RDMA_READ_SINK
0x00000008

[in] RequestCompletion

Pointeur vers une routine de rappel de fin de requête NdkRequestCompletion (NDK_FN_REQUEST_COMPLETION).

[in, optional] RequestContext

Valeur de contexte à passer au paramètre Context de la fonction de rappel spécifiée dans le paramètre RequestCompletion .

Valeur retournée

La fonction NdkRegisterMr retourne l’un des codes NTSTATUS suivants.

Code de retour Description
STATUS_SUCCESS
L’inscription mr a été effectuée avec succès.
STATUS_PENDING
L’opération est en attente et sera terminée ultérieurement. Le pilote appelle la fonction RequestCompletion (NDK_FN_REQUEST_COMPLETION) spécifiée pour terminer l’opération en attente.
STATUS_INVALID_PARAMETER
La partie de la chaîne MDL de l’adresse virtuelle de départ jusqu’à la longueur en octets ne représente pas une région de mémoire pratiquement contiguë.
STATUS_INSUFFICIENT_RESOURCES
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.
 
Autres codes status
Une erreur est survenue.

Remarques

Sur un objet NDK_MR créé avec le paramètre FastRegister défini sur FALSE, NdkRegisterMr est utilisé pour inscrire une région de mémoire pratiquement contiguë auprès de l’adaptateur.

Le consommateur NDK doit passer un MDL ou une chaîne de MDL qui représentent une région de mémoire pratiquement contiguë épinglée dans la mémoire physique. L’adresse virtuelle de base pour la région mémoire inscrite est l’adresse virtuelle indiquée par la macro MmGetMdlVirtualAddress . Si la chaîne MDL ne représente pas une région de mémoire pratiquement contiguë de l’adresse virtuelle de départ jusqu’à la longueur spécifiée en octets, le fournisseur NDK doit échouer à la demande.

Le fournisseur doit traiter l’adresse virtuelle retournée par MmGetMdlVirtualAddress en tant qu’index au début de la région de mémoire en cours d’inscription. Le fournisseur ne doit pas utiliser l’adresse virtuelle comme adresse virtuelle valide pour la lecture ou l’écriture du contenu de la mémoire tampon.

Le consommateur NDK ne doit pas utiliser la chaîne MDL pendant que la demande d’inscription est en attente.

NdkRegisterMr ne prend pas en charge les adresses virtuelles de base zéro.

Un consommateur NDK doit passer l’indicateur NDK_MR_FLAG_RDMA_READ_SINK lorsqu’il enregistre la mémoire qui peut être utilisée comme mémoire tampon du récepteur pour une demande de lecture RDMA. Certains fournisseurs NDK peuvent nécessiter l’activation de droits d’accès spéciaux sur la mémoire tampon du récepteur pour une demande de lecture RDMA sur les cartes pour lesquelles l’indicateur NDK_ADAPTER_FLAG_RDMA_READ_SINK_NOT_REQUIRED n’est pas défini dans le membre AdapterFlags de la structure NDK_ADAPTER_INFO . L’indicateur NDK_MR_FLAG_RDMA_READ_SINK permet à ces fournisseurs de prendre en charge les demandes d’inscription de manière appropriée.

Note Les mémoires tampons peuvent être inscrites à plusieurs fins. Par conséquent, l’indicateur NDK_MR_FLAG_RDMA_READ_SINK peut être accompagné d’autres indicateurs.
 
Si un consommateur NDK transmet l’indicateur de NDK_MR_FLAG_RDMA_READ_SINK sur un adaptateur pour lequel l’indicateur NDK_ADAPTER_FLAG_RDMA_READ_SINK_NOT_REQUIRED est défini dans le membre AdapterFlags de la structure NDK_ADAPTER_INFO , le fournisseur n’est pas tenu de gérer l’indicateur de NDK_MR_FLAG_RDMA_READ_SINK et ne doit pas faire échouer la demande en raison de la présence de cet indicateur.

Pour annuler l’inscription de la région de mémoire, utilisez la fonction NdkDeregisterMr (NDK_FN_DEREGISTER_MR).

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

MmGetMdlVirtualAddress

Exigences relatives à la durée de vie des objets NDKPI

NDK_ADAPTER_INFO

NDK_FN_DEREGISTER_MR

NDK_FN_REQUEST_COMPLETION

NDK_MR