次の方法で共有


FN_VMB_CHANNEL_PACKET_GET_EXTERNAL_DATA コールバック関数 (vmbuskernelmodeclientlibapi.h)

[一部の情報は、商用リリース前に大幅に変更される可能性があるプレリリース製品に関連しています。 Microsoft は、ここで提供される情報に関して明示的または黙示的な保証を行いません。

VmbChannelPacketGetExternalData 関数は、パケット処理中にパケットに関連付けられている外部メモリ記述子リスト (MDLs) を取得します。

構文

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