次の方法で共有


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

メモリ情報を含むバッファーへのポインター。 バッファーの形式と内容は、指定された情報クラスによって異なります。

VmInformationClass が VmPrefetchInformation場合、このパラメーターを NULL にすることはできません。また、0 に設定された ULONG 変数を指す必要があります。

[in] VmInformationLength

VmInformationが指すバッファーのサイズ。

VmInformationClass が VmPrefetchInformation場合は、する必要があります。

戻り値

ZwSetInformationVirtualMemory 、成功した場合はSTATUS_SUCCESS、失敗した場合は適切な NTSTATUS エラー コードが返されます。

備考

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