共用方式為


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 既沒有使用者模式虛擬位址,也沒有內核模式虛擬位址。 如果呼叫此函式的驅動程式需要虛擬位址才能作虛擬機內的記憶體,該驅動程式必須呼叫 MmMapLockedPagesSpecifyCache,或 MmGetSystemAddressForMdlSafe,以及稍後對應的解除鎖定函式,例如 mmUnmapLockedPages。 使用虛擬位址的替代方法是將上的 MDL 向下傳遞至用於直接記憶體存取的驅動程式。

不需要呼叫此函式的驅動程式才能釋放 MDL。 呼叫 VmbChannelPacketComplete 函式時,它會變成無效。 核心模式客戶端連結庫 (KMCL) 稍後會發行它。

重要

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

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

要求

要求 價值
最低支援的用戶端 Windows 10 版本 1803
標頭 vmbuskernelmodeclientlibapi.h

另請參閱

mmGetSystemAddressForMdlSafe

mmMapLockedPagesSpecifyCache

mmProbeAndLockPages

mmUnmapLockedPages

VmbChannelPacketComplete