VirtualAllocFromApp 関数 (memoryapi.h)
呼び出し元プロセスの仮想アドレス空間内のページ領域の状態を予約、コミット、または変更します。 この関数によって割り当てられたメモリは、自動的に 0 に初期化されます。
構文
PVOID VirtualAllocFromApp(
[in, optional] PVOID BaseAddress,
[in] SIZE_T Size,
[in] ULONG AllocationType,
[in] ULONG Protection
);
パラメーター
[in, optional] BaseAddress
割り当てるリージョンの開始アドレス。 メモリが予約されている場合、指定したアドレスは、割り当て粒度の最も近い倍数に切り捨てられます。 メモリが既に予約されていてコミットされている場合、アドレスは次のページ境界に切り捨てられます。 ホスト コンピューター上のページのサイズと割り当ての粒度を決定するには、GetSystemInfo 関数を使用します。 このパラメーターが NULL
[in] Size
リージョンのサイズ (バイト単位)。
[in] AllocationType
メモリ割り当ての種類。 このパラメーターには、次のいずれかの値が含まれている必要があります。
このパラメーターでは、次の値を指定することもできます。
価値 | 意味 |
---|---|
|
大きなページ サポート サイズと配置は、大きなページの最小値の倍数である必要があります。 この値を取得するには、GetLargePageMinimum 関数を使用します。 この値を指定する場合は、MEM_RESERVE と MEM_COMMITも指定する必要があります。 |
|
アドレスウィンドウ拡張 (AWE) ページ この値は、MEM_RESERVE で使用する必要があり、他の値は使用できません。 |
|
可能な限り高いアドレスでメモリを割り当てます。 これは、特に割り当てが多い場合に、通常の割り当てよりも遅くなる可能性があります。 |
|
割り当てられたリージョンに書き込まれたページをシステムが追跡します。 この値を指定する場合は、MEM_RESERVEも指定する必要があります。
リージョンが割り当てられたか、書き込み追跡状態がリセットされた後に書き込まれたページのアドレスを取得するには、getWriteWatch 関数 |
[in] Protection
割り当てるページの領域のメモリ保護。 ページをコミットする場合は、メモリ保護定数のいずれかを指定できます。 次の定数を指定すると、エラーが発生します。
- PAGE_EXECUTE
- PAGE_EXECUTE_READ
- PAGE_EXECUTE_READWRITE
- PAGE_EXECUTE_WRITECOPY
戻り値
関数が成功した場合、戻り値はページの割り当てられた領域のベース アドレスです。
関数が失敗した場合、戻り値は NULL
備考
Just-In-Time (JIT) 機能 Windows ストア アプリから VirtualAllocFromApp を呼び出して、JIT 機能を使用できます。 JIT 機能を使用するには、アプリ マニフェスト ファイルに codeGeneration 機能を含める必要があります。
各ページには、ページの状態
- 予約ページのリージョンをコミットする
- 無料ページのリージョンを予約する
- 空きページの領域を同時に予約してコミットする
VirtualAllocFromApp では、実行可能ページを作成できません。
VirtualAllocFromApp 関数を使用すると、指定したプロセスの仮想アドレス空間内のメモリの アドレス ウィンドウ拡張 (AWE) 領域を予約できます。 その後、このメモリ領域を使用して、アプリケーションの必要に応じて、仮想メモリとの間で物理ページをマップできます。 MEM_PHYSICAL と MEM_RESERVE の値は、AllocationType パラメーターで設定する必要があります。 MEM_COMMIT 値は設定しないでください。 ページ保護を PAGE_READWRITEに設定する必要があります。
VirtualFree 関数は、コミットされたページのコミットを解除したり、ページのストレージを解放したり、コミットされたページを同時にデコミットして解放したりできます。 また、予約ページを解放して、無料のページにすることもできます。
実行可能なリージョンを作成する場合、呼び出し元のプログラムは、コードが設定されたら、FlushInstructionCache への適切な呼び出しによってキャッシュの一貫性を確保する責任を負います。 そうしないと、新しく実行可能なリージョンからコードを実行しようとすると、予期しない結果が発生する可能性があります。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 10 [デスクトップ アプリ |UWP アプリ] |
サポートされる最小サーバー | Windows Server 2016 [デスクトップ アプリ |UWP アプリ] |
ターゲット プラットフォーム の |
ウィンドウズ |
ヘッダー | memoryapi.h (Windows.h を含む) |
ライブラリ | WindowsApp.lib |
DLL | Kernel32.dll |
関連項目
仮想メモリ関数 の
VirtualAlloc の
VirtualAllocEx の
VirtualQuery の
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示