共用方式為


FN_VMB_CHANNEL_PACKET_GET_EXTERNAL_DATA回呼函式 (vmbuskernelmodeclientlibapi.h)

[某些資訊與發行前發行的產品有關,在正式發行前可能會大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。]

VmbChannelPacketGetExternalData 函式會在封包處理期間取得與封包相關聯的任何外部記憶體描述元) 清單 (MDL。

語法

FN_VMB_CHANNEL_PACKET_GET_EXTERNAL_DATA FnVmbChannelPacketGetExternalData;

NTSTATUS FnVmbChannelPacketGetExternalData(
  VMBPACKETCOMPLETION PacketCompletionContext,
  UINT32 Flags,
  PMDL *Mdl
)
{...}

參數

PacketCompletionContext

識別傳入封包的句柄,並在處理完成後用來參考封包。

Flags

旗標,控制 MDL 的對應方式。 可能的旗標值為:

意義
VMBUS_CHANNEL_PACKET_EXTERNAL_DATA_FLAG_READ_ONLY
將 MDL 對應為唯讀。

Mdl

對應 MDL 的指標。

傳回值

VmbChannelPacketGetExternalData 會傳回狀態代碼。 如果此函式傳回STATUS_PENDING,當外部數據就緒時,呼叫端必須從封包處理回呼傳回,這可能需要在不同的 IRQL 上再次呼叫。 此時,呼叫此函式將會成功,並傳回外部數據。

備註

建立代表此交易所描述的記憶體的 MDL,會導致虛擬機的這些區域在交易存留期的其餘時間內釘選在記憶體中。 這可能是造成函式傳回STATUS_PENDING的原因,因為虛擬機的區域可能需要分頁。

此函式傳回的 MDL 描述已就地鎖定的記憶體。 因此,不需要呼叫 MmProbeAndLockPages 函式 。 不過,MDL 不會有使用者模式虛擬位址或核心模式虛擬位址。 如果呼叫此函式的驅動程式需要虛擬位址才能操作虛擬機內的記憶體,該驅動程式必須呼叫 MmMapLockedPagesSpecifyCacheMmGetSystemAddressForMdlSafe,以及稍後對應的解除鎖定函式,例如 MmUnmapLockedPages。 使用虛擬位址的替代方式是將 MDL 向下傳遞至用來直接記憶體存取的驅動程式。

呼叫此函式的驅動程式不需要釋放 MDL。 呼叫 VmbChannelPacketComplete 函式時會變成無效。 核心模式客戶端連結庫 (KMCL) 更新版本。

重要

此函式是透過 VMBus 核心模式用戶端連結庫 (KMCL) 介面呼叫,由 Vmbkmcl.sys 總線驅動程式提供。 這是從 KMCL_CLIENT_INTERFACE_V1 結構存取的用戶端函式。

如需詳細資訊,請參閱 KMCL_CLIENT_INTERFACE_V1的一節。

規格需求

需求
最低支援的用戶端 Windows 10 (版本 1803)
標頭 vmbuskernelmodeclientlibapi.h

另請參閱

MmGetSystemAddressForMdlSafe

MmMapLockedPagesSpecifyCache

MmProbeAndLockPages

MmUnmapLockedPages

VmbChannelPacketComplete