Freigeben über


FN_VMB_CHANNEL_PACKET_GET_EXTERNAL_DATA Rückruffunktion (vmbuskernelmodeclientlibapi.h)

[Einige Informationen beziehen sich auf die Vorabversion, die vor der kommerziellen Freigabe möglicherweise wesentlichen Änderungen unterliegt. Microsoft übernimmt für die hier bereitgestellten Informationen keine Gewährleistung, weder ausdrücklicher noch impliziter Art.]

Die VmbChannelPacketGetExternalData-Funktion ruft alle externen Speicherdeskriptor-Listen (MDLs) 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 nach Abschluss der Verarbeitung auf das Paket zu verweisen.

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 status Code zurück. Wenn diese Funktion STATUS_PENDING zurückgibt, muss der Aufrufer vom Paketverarbeitungsrückruf zurückgeben, der möglicherweise bei einem anderen IRQL erneut aufgerufen wird, wenn die externen Daten bereit sind. An diesem Punkt ist ein Aufruf dieser Funktion erfolgreich und gibt die externen Daten zurück.

Hinweise

Durch das Erstellen einer MDL, die den in dieser Transaktion beschriebenen Arbeitsspeicher darstellt, werden diese Bereiche des virtuellen Computers für den Rest der Transaktionslebensdauer im Arbeitsspeicher angeheftet. Dies kann dazu führen, dass die Funktion STATUS_PENDING zurückgibt, da die Bereiche des virtuellen Computers möglicherweise ausgelagert werden müssen.

Die von dieser Funktion zurückgegebene MDL beschreibt arbeitsspeicher, der bereits gesperrt ist. 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 Arbeitsspeichers auf dem virtuellen Computer benötigt, muss dieser Treiber MmMapLockedPagesSpecifyCache oder MmGetSystemAddressForMdlSafe und die entsprechende Entsperrfunktion später aufrufen, z. B. MmUnmapLockedPages. Eine Alternative zur Verwendung einer virtuellen Adresse wäre, die MDL einfach an einen Treiber zu übergeben, der sie für den direkten Speicherzugriff verwendet.

Der Treiber, der diese Funktion aufruft, ist nicht erforderlich, um die MDL freizugeben. Er wird ungültig, wenn die Funktion VmbChannelPacketComplete aufgerufen wird. Die Kernelmodus-Clientbibliothek (KMCL) gibt sie später wieder frei.

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
Unterstützte Mindestversion (Client) Windows 10, Version 1803
Kopfzeile vmbuskernelmodeclientlibapi.h

Weitere Informationen

MmGetSystemAddressForMdlSafe

MmMapLockedPagesSpecifyCache

MmProbeAndLockPages

MmUnmapLockedPages

VmbChannelPacketComplete