Freigeben über


FN_VMB_CHANNEL_PACKET_GET_EXTERNAL_DATA Rückruffunktion (vmbuskernelmodeclientlibapi.h)

[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
VMBUS_CHANNEL_PACKET_EXTERNAL_DATA_FLAG_READ_ONLY
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

Siehe auch

MmGetSystemAddressForMdlSafe

MmMapLockedPagesSpecifyCache-

MmProbeAndLockPages

MmUnmapLockedPages

VmbChannelPacketComplete-