MmAllocateContiguousMemory 関数 (wdm.h)
MmAllocateContiguousMemory ルーチンは、連続した非ページ物理メモリの範囲を割り当て、システム アドレス空間にマップします。
構文
PVOID MmAllocateContiguousMemory(
[in] SIZE_T NumberOfBytes,
[in] PHYSICAL_ADDRESS HighestAcceptableAddress
);
パラメーター
[in] NumberOfBytes
割り当てる連続したメモリのブロックのサイズ (バイト単位)。 詳細については、「解説」を参照してください。
[in] HighestAcceptableAddress
呼び出し元が使用できる最も有効な物理アドレス。 たとえば、デバイスがプロセッサの物理メモリ アドレス範囲の最初の 16 メガバイトの場所のみをアドレス指定できる場合、このデバイスのドライバーは、highestAcceptableAddress 0x0000000000FFFFFFに設定する必要があります。 メモリ割り当ての特定の要件がない場合は、MAXULONG64に設定します。
戻り値
MmAllocateContiguousMemory は、割り当てられたメモリのベース仮想アドレスを返します。 要求を満たすことができない場合、ルーチンは NULL 返します。
備考
mmAllocateContiguousMemory は、物理アドレス空間で連続する非ページ メモリのブロックを割り当てます。 ルーチンは、このブロックをシステム・アドレス・スペース内の連続した仮想メモリー・ブロックにマップし、このブロックのベースの仮想アドレスを戻します。 このルーチンは、連続したメモリ割り当ての開始アドレスをメモリ ページの境界に合わせます。
ドライバーは、要求された割り当てサイズを超えてメモリにアクセスすることはできません。 たとえば、開発者は、ドライバーが要求された割り当ての終了から次のページ境界までの間にメモリを安全に使用できると想定しないでください。
連続した物理メモリは通常、不足しているため、必要な場合にのみ慎重に使用する必要があります。 連続したメモリを使用する必要があるドライバーは、オペレーティング システムがメモリを割り当てて解放すると、物理メモリが時間の経過と同時に断片化する可能性があるため、ドライバーの初期化中にこのメモリを割り当てる必要があります。 通常、ドライバーは、DriverEntry ルーチンから mmAllocateContiguousMemory を呼び出して、長期間使用するために内部バッファーを割り当て、ドライバーがアンロードされる直前にバッファーを解放します。
MmAllocateContiguousMemory によって割り当てられたメモリは、メモリが不要になったときに解放する必要があります。 MmFreeContiguousMemory ルーチンを呼び出して、MmAllocateContiguousMemoryによって割り当てられたメモリを解放します。
大量の RAM を持つコンピューターで物理メモリが断片化されている場合、オペレーティング システムが連続するメモリ ブロックを検索する必要がある mmAllocateContiguousMemory 呼び出すと、パフォーマンスが大幅に低下する可能性があります。 この低下は、Windows Vista SP1 および Windows Server 2008 以降では大幅に削減されますが、連続したメモリは割り当てにコストがかかる場合があります。 このため、ドライバーは、mmAllocateContiguousMemory 繰り返し呼び出しを回避する必要があります。 代わりに、ドライバーは、DriverEntry ルーチンに必要なすべての連続したバッファーを割り当て、これらのバッファーを再利用する必要があります。
mmAllocateContiguousMemory が割り当てる メモリは初期化されていません。 カーネル モード ドライバーは、ユーザー モード のソフトウェアに表示する場合 (潜在的に特権のあるコンテンツのリークを回避するために) このメモリを 0 に設定する必要があります。
必要条件
要件 | 価値 |
---|---|
ターゲット プラットフォーム の | 万国 |
ヘッダー | wdm.h (Wdm.h、Ntddk.h を含む) |
ライブラリ | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | IRQL <= DISPATCH_LEVEL |
関連項目
AllocateCommonBuffer の
mmAllocateContiguousMemorySpecifyCache の
mmAllocateNonCachedMemory の