NDK_FN_BUILD_LAM Rückruffunktion (ndkpi.h)
Die Funktion NdkBuildLam (NDK_FN_BUILD_LAM) ruft eine Adapter-Lam (Logical Address Mapping) vom NDK-Anbieter für einen nahezu zusammenhängenden Speicherbereich ab.
Syntax
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
)
{...}
Parameter
[in] pNdkAdapter
Ein Zeiger auf ein NDK-Adapterobjekt (NDK_ADAPTER).
[in] Mdl
Eine Speicherdeskriptorliste (Memory Descriptor List, MDL) oder eine Kette von MDLs. Der Teil der MDL-Kette von der virtuellen Startadresse bis zur Anzahl der Bytes im Parameter Length muss einen nahezu zusammenhängenden Speicherbereich darstellen.
[in] Length
Die Anzahl der Bytes, die ab der virtuellen Adresse der ersten MDL zugeordnet werden sollen. Die virtuelle MDL-Adresse kann mit dem Makro MmGetMdlVirtualAddress abgerufen werden. Die Länge darf die Gesamtzahl der Byte, die durch die MDL-Kette dargestellt wird, nicht überschreiten.
[in] RequestCompletion
Ein Zeiger auf eine Rückruffunktion von NdkRequestCompletion (NDK_FN_REQUEST_COMPLETION).
[in, optional] RequestContext
Ein Kontextwert, der vom Anbieter an die Rückruffunktion NdkRequestCompletion zurückgegeben werden soll, die im RequestCompletion-Parameter angegeben ist.
pNdkLAM
Ein Zeiger auf einen Puffer, der eine NDK_LOGICAL_ADDRESS_MAPPING Struktur enthält, die ein Adapterseitenarray enthält. Das Adapterseitenarray wird im AdapterPageArray-Element gespeichert, und das AdapterPageCount-Element enthält die Anzahl der Adapterseitenelemente.
pLAMSize
Die Größe des Puffers am pNdkLAM-Parameter für die Eingabe in Bytes oder die tatsächliche Anzahl von Bytes, die für die Ausgabe geschrieben wurden.
[out] pFBO
Der erste Byteoffsetwert (FBO) wird an dieser Position zurückgegeben. Der FBO ist der Startoffset auf der ersten Adapterseite.
Rückgabewert
Die NdkBuildLam-Funktion gibt einen der folgenden NTSTATUS-Codes zurück.
Rückgabecode | Beschreibung |
---|---|
|
Der Vorgang wurde erfolgreich abgeschlossen. |
|
Die Anforderung ist ausstehend. Die im RequestCompletion-Parameter (NDK_FN_REQUEST_COMPLETION) angegebene Funktion wird aufgerufen, wenn der LAM-Buildvorgang abgeschlossen ist. |
|
Der Teil der MDL-Kette von der virtuellen Startadresse bis zur Anzahl von Bytes, die im Parameter Length angegeben ist, stellt keinen praktisch zusammenhängenden Speicherbereich dar. |
|
Fehler bei der Anforderung aufgrund unzureichender Ressourcen.
Wichtig Die Anforderung kann sowohl inline als auch asynchron mit diesem status Code fehlschlagen.
|
|
Die durch den *pLAMSize-Parameter angegebene Puffergröße ist zu klein, um die LAM-Datei zu speichern. In diesem Fall wird der Wert von *pLAMSize mit der erforderlichen Puffergröße aktualisiert. |
|
Ein Fehler ist aufgetreten. |
Hinweise
Der Teil der MDL-Kette von der virtuellen Startadresse bis zur Anzahl von Bytes, die im Parameter Length angegeben ist, muss einen nahezu zusammenhängenden Speicherbereich darstellen. Andernfalls muss der NDK-Anbieter die Anforderung fehlschlagen. Es liegt in der Verantwortung des NDK-Consumers sicherzustellen, dass die MDL-Kette gesperrt ist. Das heißt, die Seiten der MDL-Änderung werden im physischen Speicher angeheftet.
Ein NDK-Consumer kann die Funktion NdkGetPrivilegedMemoryRegionToken (NDK_FN_GET_PRIVILEGED_MEMORY_REGION_TOKEN) aufrufen, um ein Token für privilegierte Speicherbereiche von einem NDK-Anbieter abzurufen.
Alle von einem NDK-Anbieter zurückgegebenen Adapterseiten müssen PAGE_SIZE Bytes lang sein, wobei PAGE_SIZE die Größe der Speicherseite ist, die von der Hostplattform unterstützt wird, wie in wdm.h definiert.
Der Anbieter muss den Wert der virtuellen Adresse, den das MmGetMdlVirtualAddress-Makro für die MDL zurückgibt, als Index für den Anfang des zugeordneten Speicherbereichs behandeln. Der Anbieter darf den Wert der virtuellen Adresse nicht als gültige virtuelle Adresse zum Lesen oder Schreiben von Pufferinhalten verwenden.
Wenn bei einem Anbieter bei der Verarbeitung einer NdkBuildLam-Anforderung ein Fehler auftritt, muss der Anbieter alle Teilzuordnungen freigeben, die er bisher intern erstellt hat, bevor die Anforderung mit einem Fehler abgeschlossen wird.
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
Anforderungen an die Lebensdauer des NDKPI-Objekts