Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
[Einige Informationen beziehen sich auf vorab veröffentlichte Produkte, die vor der kommerziellen Veröffentlichung erheblich geändert werden können. Microsoft übernimmt keine Gewährleistungen, ausdrücklich oder konkludent in Bezug auf die hier bereitgestellten Informationen.]
Die VmbChannelPacketGetExternalData--Funktion ruft alle externen MdLs (Memory Descriptor Lists) ab, die einem Paket während der Paketverarbeitung zugeordnet sind.
Syntax
FN_VMB_CHANNEL_PACKET_GET_EXTERNAL_DATA FnVmbChannelPacketGetExternalData;
NTSTATUS FnVmbChannelPacketGetExternalData(
VMBPACKETCOMPLETION PacketCompletionContext,
UINT32 Flags,
PMDL *Mdl
)
{...}
Parameter
PacketCompletionContext
Ein Handle, das das eingehende Paket identifiziert und verwendet wird, um auf das Paket zu verweisen, sobald die Verarbeitung abgeschlossen ist.
Flags
Flags, die steuern, wie die MDL zugeordnet wird. Die möglichen Flagwerte sind:
Wert | Bedeutung |
---|---|
|
Zuordnen von MDL als schreibgeschützt. |
Mdl
Ein Zeiger auf die zugeordnete MDL.
Rückgabewert
VmbChannelPacketGetExternalData gibt einen Statuscode zurück. Wenn diese Funktion STATUS_PENDING zurückgibt, muss der Aufrufer aus dem Paketverarbeitungsrückruf zurückgeben, der erneut aufgerufen wird, möglicherweise bei einem anderen IRQL, wenn die externen Daten bereit sind. An diesem Punkt wird ein Aufruf dieser Funktion erfolgreich ausgeführt und die externen Daten zurückgegeben.
Bemerkungen
Das Erstellen einer MDL, die den durch diese Transaktion beschriebenen Arbeitsspeicher darstellt, bewirkt, dass diese Bereiche des virtuellen Computers im Arbeitsspeicher für den Rest der Transaktionslebensdauer angeheftet werden. Dies kann dazu führen, dass die Funktion STATUS_PENDING zurückgibt, da die Bereiche des virtuellen Computers möglicherweise auf die Seite verschoben werden müssen.
Die von dieser Funktion zurückgegebene MDL beschreibt bereits gesperrten Arbeitsspeicher. Daher ist es nicht erforderlich, die MmProbeAndLockPages-Funktion aufzurufen. Die MDL verfügt jedoch weder über eine virtuelle Adresse im Benutzermodus noch über eine virtuelle Adresse im Kernelmodus. Wenn der Treiber, der diese Funktion aufruft, eine virtuelle Adresse zum Bearbeiten des Speichers innerhalb des virtuellen Computers erfordert, muss dieser Treiber MmMapLockedPagesSpecifyCache-oder MmGetSystemAddressForMdlSafeaufrufen, und die entsprechende Entsperrfunktion später, z. B. MmUnmapLockedPages. Eine Alternative zur Verwendung einer virtuellen Adresse wäre die Übergabe der MDL an einen Treiber, der ihn für den direkten Speicherzugriff verwendet.
Der Treiber, der diese Funktion aufruft, ist nicht erforderlich, um die MDL freizugeben. Es wird ungültig, wenn die VmbChannelPacketComplete--Funktion aufgerufen wird. Die Kernelmodus-Clientbibliothek (KERNEL Mode Client Library, KMCL) veröffentlicht sie später.
Wichtig
Diese Funktion wird über die KMCL-Schnittstelle (VMBus Kernel Mode Client Library) aufgerufen, die vom Vmbkmcl.sys Bustreiber bereitgestellt wird. Dies ist eine Clientfunktion, auf die über die KMCL_CLIENT_INTERFACE_V1 Struktur zugegriffen wird.
Weitere Informationen finden Sie im Abschnitt "Hinweise" des KMCL_CLIENT_INTERFACE_V1.
Anforderungen
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Windows 10, Version 1803 |
Header- | vmbuskernelmodeclientlibapi.h |