次の方法で共有


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 を割り当てるときに、バッファーの開始アドレスと長さを指定します。 バッファーは予約済みメモリ範囲内に収まる必要がありますが、厳密なサブセットにすることができます。

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

必要条件

要件 価値
サポートされる最小クライアント Windows XP 以降のバージョンの Windows で使用できます。
ターゲット プラットフォーム 万国
ヘッダー wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む)
ライブラリ NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
DDI コンプライアンス規則 する hwStorPortProhibitedDDDIs(storport) する

関連項目

IoAllocateMdl

MEMORY_CACHING_TYPE

mmAllocateMappingAddress する

mmAllocatePagesForMdl

mmAllocatePagesForMdlEx

MmFreeMappingAddress

MmProbeAndLockPages

MmUnmapReservedMapping