MmMapLockedPagesWithReservedMapping 関数 (wdm.h)

MmMapLockedPagesWithReservedMapping ルーチンは、以前に MmAllocateMappingAddress ルーチンによって予約されていたアドレス範囲のすべてまたは一部をマップします。

構文

PVOID MmMapLockedPagesWithReservedMapping(
  [in] PVOID                                                    MappingAddress,
  [in] ULONG                                                    PoolTag,
  [in] PMDL                                                     MemoryDescriptorList,
  [in] __drv_strictTypeMatch(__drv_typeCond)MEMORY_CACHING_TYPE CacheType
);

パラメーター

[in] MappingAddress

予約済み仮想メモリ範囲の先頭へのポインター。 これは、 MmAllocateMappingAddress によって以前に返されたアドレスである必要があります。

[in] PoolTag

予約済みメモリ バッファーのプール タグを指定します。 これは、バッファーを予約した MmAllocateMappingAddress の呼び出しの PoolTag パラメーターで指定された値と同じである必要があります。

[in] MemoryDescriptorList

マップされる MDL へのポインター。 この MDL は、ロックダウンされている物理ページを記述する必要があります。 ロックダウン MDL は、 MmProbeAndLockPages または MmAllocatePagesForMdlEx ルーチンによって構築できます。

[in] CacheType

マッピングの作成に使用する MEMORY_CACHING_TYPE 値を指定します。

戻り値

MmMapLockedPagesWithReservedMapping は、マップされたメモリの先頭へのポインターを返します。システムがメモリをマップできなかった場合は NULL を 返します。 このルーチンは、関数パラメーターにエラーがある場合にのみ NULL を 返します (たとえば、ドライバーのマッピング アドレスが指定された MDL にまたがるのに十分な大きさではありません)。 この関数は、リソースの少ないシナリオでもドライバーが前方に進行できるようにするためのものです。

注釈

呼び出し元は 、MmMapLockedPagesWithReservedMapping を使用して、 MmAllocateMappingAddress によって予約された仮想メモリ範囲のサブ範囲を次のようにマップできます。

  • IoAllocateMdl を使用して MDL を割り当てます。 返される MDL は、マップする仮想メモリ範囲のサブ範囲の指定された開始アドレスとサイズを使用して構築されます。

  • MmProbeAndLockPages を使用して、手順 1 で取得した MDL で説明されている物理ページをロックダウンします。

  • MmMapLockedPagesWithReservedMapping を使用して、手順 2 でロックダウンされた物理メモリに仮想メモリを実際にマップします。 この関数によって返される仮想アドレスには、MDL が指定するバイト オフセットが含まれることに注意してください。 ただし、この関数によって設定される MDL の MappedSystemVa フィールドには、バイト オフセットは含まれません。

  • 呼び出し元がメモリにアクセスする必要がない場合は、 MmUnmapReservedMapping を使用してメモリのマップを解除します。 呼び出し元は、必要に応じてメモリ バッファーをマップおよびマップ解除でき、 MmFreeMappingAddress を使用してマッピング範囲を解放する前にマップを解除する必要があります。

MappingAddress パラメーターは、マップするメモリ サブ範囲の先頭ではなく、呼び出し元によって以前に予約されたメモリの範囲の先頭を指定します。 呼び出し元は、 IoAllocateMdl を使用して MDL を割り当てるときに、バッファーの開始アドレスと長さを指定します。 バッファーは予約済みメモリ範囲内に収まる必要がありますが、厳密なサブセットにすることができます。

このルーチンは、MDL によって記述されるページにキャッシュの種類がまだ関連付けられていない場合にのみ、 CacheType パラメーターを使用します。 ただし、ほぼすべての場合において、ページには既に関連付けられたキャッシュの種類があり、このキャッシュの種類が新しいマッピングに使用されます。 この規則の例外は、特定のキャッシュの種類が関連付けられていない MmAllocatePagesForMdl によって割り当てられたページの場合です。 このようなページでは、 CacheType パラメーターによってマッピングのキャッシュの種類が決まります。

要件

要件
サポートされている最小のクライアント Windows XP 以降のバージョンの Windows で使用できます。
対象プラットフォーム ユニバーサル
Header wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む)
Library NtosKrnl.lib
[DLL] NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
DDI コンプライアンス規則 HwStorPortProhibitedDDIs(storport)

こちらもご覧ください

IoAllocateMdl

MEMORY_CACHING_TYPE

MmAllocateMappingAddress

MmAllocatePagesForMdl

MmAllocatePagesForMdlEx

MmFreeMappingAddress

MmProbeAndLockPages

MmUnmapReservedMapping