NDK_FN_REGISTER_MR Rückruffunktion (ndkpi.h)

Die Funktion NdkRegisterMr (NDK_FN_REGISTER_MR) registriert einen nahezu zusammenhängenden Speicherbereich mit einem NDK-Adapter.

Syntax

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
)
{...}

Parameter

[in] pNdkMr

Ein Zeiger auf ein MR-Objekt (NDK Memory Region) (NDK_MR).

[in] Mdl

Eine MDL oder Eine Kette von MDLs, die einen nahezu zusammenhängenden Speicherbereich von der virtuellen Startadresse bis zur Anzahl von Bytes darstellen, die im Parameter Length angegeben sind.

[in] Length

Die Anzahl der Zu registrierenden Bytes ab der virtuellen Adresse der ersten MDL. Die virtuelle Adresse der ersten MDL kann durch Aufrufen des Makros MmGetMdlVirtualAddress abgerufen werden. Die Länge darf die Gesamtanzahl der Byte, die durch die MDL-Kette dargestellt wird, nicht überschreiten.

[in] Flags

Eine Bitmaske von Flags, die die Zugriffsberechtigungen für den registrierten Speicherbereich angeben. Die folgenden Flags können festgelegt werden:

Wert Bedeutung
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

Ein Zeiger auf die Rückrufroutine NdkRequestCompletion (NDK_FN_REQUEST_COMPLETION) der Anforderungsvervollständigung.

[in, optional] RequestContext

Ein Kontextwert, der an den Context-Parameter der Rückruffunktion übergeben werden soll, der im RequestCompletion-Parameter angegeben ist.

Rückgabewert

Die NdkRegisterMr-Funktion gibt einen der folgenden NTSTATUS-Codes zurück.

Rückgabecode Beschreibung
STATUS_SUCCESS
Die MR-Registrierung wurde erfolgreich abgeschlossen.
STATUS_PENDING
Der Vorgang ist ausstehend und wird später abgeschlossen. Der Treiber ruft die angegebene RequestCompletion-Funktion (NDK_FN_REQUEST_COMPLETION) auf, um den ausstehenden Vorgang abzuschließen.
STATUS_INVALID_PARAMETER
Der Teil der MDL-Kette von der virtuellen Startadresse bis zur Länge in Bytes stellt keinen nahezu zusammenhängenden Speicherbereich dar.
STATUS_INSUFFICIENT_RESOURCES
Fehler bei der Anforderung aufgrund unzureichender Ressourcen.
Wichtig Die Anforderung kann sowohl inline als auch asynchron mit diesem status Code fehlschlagen.
 
Andere status Codes
Ein Fehler ist aufgetreten.

Hinweise

Auf einem NDK_MR-Objekt , das mit dem FastRegister-Parameter erstellt wurde, der auf FALSE festgelegt ist, wird NdkRegisterMr verwendet, um einen praktisch zusammenhängenden Speicherbereich mit dem Adapter zu registrieren.

Der NDK-Consumer muss eine MDL oder eine Kette von MDLs übergeben, die praktisch zusammenhängende Speicherbereiche darstellen, die im physischen Speicher angeheftet sind. Die virtuelle Basisadresse für den zu registrierenden Speicherbereich ist die virtuelle Adresse, die durch das MmGetMdlVirtualAddress-Makro angegeben wird. Wenn die MDL-Kette keinen nahezu zusammenhängenden Speicherbereich von der virtuellen Startadresse bis zur angegebenen Länge in Bytes darstellt, muss der NDK-Anbieter die Anforderung fehlschlagen.

Der Anbieter muss die virtuelle Adresse, die MmGetMdlVirtualAddress zurückgibt, als Index für den Anfang des registrierten Speicherbereichs behandeln. Der Anbieter darf die virtuelle Adresse nicht als gültige virtuelle Adresse zum Lesen oder Schreiben von Pufferinhalten verwenden.

Der NDK-Consumer darf die MDL-Kette nicht verwenden, während die Registrierungsanforderung aussteht.

NdkRegisterMr unterstützt keine nullbasierten virtuellen Adressen.

Ein NDK-Consumer muss das NDK_MR_FLAG_RDMA_READ_SINK-Flag übergeben, wenn er Arbeitsspeicher registriert, der als Senkenpuffer für eine RDMA-Leseanforderung verwendet werden kann. Bestimmte NDK-Anbieter erfordern möglicherweise die Aktivierung spezieller Zugriffsrechte für den Senkenpuffer für eine RDMA-Leseanforderung für Adapter, für die das flag NDK_ADAPTER_FLAG_RDMA_READ_SINK_NOT_REQUIRED im AdapterFlags-Member der NDK_ADAPTER_INFO-Struktur nicht festgelegt ist. Das NDK_MR_FLAG_RDMA_READ_SINK-Flag ermöglicht es diesen Anbietern, Registrierungsanforderungen angemessen zu unterstützen.

Hinweis Puffer können für mehrere Zwecke registriert werden. Daher kann das NDK_MR_FLAG_RDMA_READ_SINK-Flag von anderen Flaggen begleitet werden.
 
Wenn ein NDK-Consumer das NDK_MR_FLAG_RDMA_READ_SINK-Flag auf einem Adapter übergibt, für den das NDK_ADAPTER_FLAG_RDMA_READ_SINK_NOT_REQUIRED-Flag im AdapterFlags-Member der NDK_ADAPTER_INFO-Struktur festgelegt ist, muss der Anbieter das NDK_MR_FLAG_RDMA_READ_SINK-Flag nicht verarbeiten und darf die Anforderung aufgrund des Vorhandenseins dieses Flags nicht fehlschlagen.

Um die Registrierung des Speicherbereichs aufzuheben, verwenden Sie die Funktion NdkDeregisterMr (NDK_FN_DEREGISTER_MR).

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Keine unterstützt, unterstützt in NDIS 6.30 und höher.
Unterstützte Mindestversion (Server) Windows Server 2012
Zielplattform Windows
Kopfzeile ndkpi.h (Ndkpi.h einschließen)
IRQL <=DISPATCH_LEVEL

Weitere Informationen

MmGetMdlVirtualAddress

Anforderungen an die Lebensdauer des NDKPI-Objekts

NDK_ADAPTER_INFO

NDK_FN_DEREGISTER_MR

NDK_FN_REQUEST_COMPLETION

NDK_MR