ZwSetInformationVirtualMemory 関数 (ntifs.h)
ZwSetInformationVirtualMemory ルーチンは、プロセスのユーザー アドレス空間内の指定されたアドレス範囲のリストに対して操作を実行します。
構文
NTSYSAPI NTSTATUS ZwSetInformationVirtualMemory(
[in] HANDLE ProcessHandle,
[in] VIRTUAL_MEMORY_INFORMATION_CLASS VmInformationClass,
[in] ULONG_PTR NumberOfEntries,
[in] PMEMORY_RANGE_ENTRY VirtualAddresses,
[in] PVOID VmInformation,
[in] ULONG VmInformationLength
);
パラメーター
[in] ProcessHandle
操作を実行するコンテキスト内のプロセスのオープン ハンドルを指定します。 このハンドルを無効にすることはできません。 Ntddk.h で定義されている NtCurrentProcess マクロを使用して、現在のプロセスを指定します。
[in] VmInformationClass
実行する操作の種類を指定します。 VIRTUAL_MEMORY_INFORMATION_CLASS 列挙で定義 VmPrefetchInformation に設定します。ntddk.h を参照してください。
[in] NumberOfEntries
VirtualAddresses パラメーターが指す配列内のエントリの数。 このパラメーターを 0 にすることはできません。
[in] VirtualAddresses
各エントリが処理する仮想アドレス範囲を指定するMEMORY_RANGE_ENTRY構造体の配列へのポインター。 仮想アドレス範囲は、ターゲット プロセスからアクセスできるプロセス アドレス空間の任意の部分をカバーできます。
[in] VmInformation
メモリ情報を含むバッファーへのポインター。 バッファーの形式と内容は、指定された情報クラスによって異なります。
[in] VmInformationLength
VmInformationが指すバッファーのサイズ。
戻り値
ZwSetInformationVirtualMemory
備考
ZwSetInformationVirtualMemory ルーチンは、アクセスするアドレスのセットを認識するドライバーによって呼び出されます。 これらのアドレスがメモリに常駐しなくなった可能性が高い場合 (つまり、ディスクにページアウトされている)、アクセス前にこれらのアドレス範囲でこのルーチンを呼び出すと、可能な限り大きな同時 I/O 要求を使用してディスクからそれらのアドレス範囲が効率的に取り込まれるため、全体的な待機時間が短縮されます。
ZwSetInformationVirtualMemory を使用すると、ドライバーがアクセスされるプロセス アドレス範囲の一覧を提供する場合に、可能な限り大規模な同時実行 I/O を発行することで、ディスク ハードウェアを効率的に使用できます。 単一のアドレス範囲 (ファイル マッピングなど) の場合でも、このルーチンは、ページ フォールトによって発行される多数の小さな I/O ではなく、1 つの大きな I/O を発行することでパフォーマンスを向上させることができます。
ドライバーは、パフォーマンスの最適化のためにこのルーチンを純粋に呼び出します。プリフェッチは、ターゲット アドレス範囲にアクセスするために必要ありません。 プリフェッチされたメモリは、ターゲット プロセスのワーキング セットに追加されません。物理メモリにキャッシュされます。 プリフェッチされたアドレス範囲がターゲット プロセスによってアクセスされると、それらはワーキング セットに追加されます。
この呼び出しはドライバーの正しい操作には必要ないため、システムによって強力なヒントとして扱われ、メモリ不足の条件下で完全または部分的に失敗する可能性がある通常の物理メモリ制約の対象となります。 また、大きなアドレス範囲で呼び出された場合にメモリ不足を引き出す可能性があるため、アプリケーションでは実際に使用するアドレス範囲のみをプリフェッチする必要があります。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 10 バージョン 1511。 |
ターゲット プラットフォーム の |
万国 |
ヘッダー | ntifs.h (Ntddk.h を含む) |
ライブラリ | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
DDI コンプライアンス規則 を |
HwStorPortProhibitedDIs、PowerIrpDDis |