NtQueryVirtualMemory 関数 (ntifs.h)

NtQueryVirtualMemory ルーチンは、指定されたプロセスの仮想アドレス空間内のページ領域の状態、保護、および種類を決定します。

構文

__kernel_entry NTSYSCALLAPI NTSTATUS NtQueryVirtualMemory(
  [in]            HANDLE                   ProcessHandle,
  [in, optional]  PVOID                    BaseAddress,
  [in]            MEMORY_INFORMATION_CLASS MemoryInformationClass,
  [out]           PVOID                    MemoryInformation,
  [in]            SIZE_T                   MemoryInformationLength,
  [out, optional] PSIZE_T                  ReturnLength
);

パラメーター

[in] ProcessHandle

クエリ対象のページが存在するコンテキスト内のプロセスを処理します。 NtCurrentProcess マクロを使用して、現在のプロセスを指定します。

[in, optional] BaseAddress

クエリを実行するページの領域のベース アドレス。 この値は、次のホスト ページ アドレス境界に切り捨てられます。

[in] MemoryInformationClass

情報を取得するメモリ情報クラス。 現在、サポートされている MEMORY_INFORMATION_CLASS 値は MemoryBasicInformation のみです。

[out] MemoryInformation

指定した情報を受け取るバッファーへのポインター。 バッファーの形式と内容は、 MemoryInformationClass パラメーターで指定された情報クラスによって異なります。 MemoryBasicInformation の値が MemoryInformationClass に渡されると、MemoryInformation パラメーターの値はMEMORY_BASIC_INFORMATION構造体になります。

[in] MemoryInformationLength

MemoryInformation が指すバッファーの長さをバイト単位で指定します。

[out, optional] ReturnLength

省略可能なポインター。指定した場合、 MemoryInformation バッファーに配置されたバイト数を受け取ります。

戻り値

呼び出しが成功した場合は、STATUS_SUCCESSを返します。 呼び出しが失敗した場合、考えられるエラー コードは次のとおりです。

リターン コード 説明
STATUS_ACCESS_DENIED 呼び出し元には、要求されたアクションを実行するための十分なアクセス権がありませんでした。
STATUS_ACCESS_VIOLATION 指定したベース アドレスが無効な仮想アドレスです。
STATUS_INFO_LENGTH_MISMATCH MemoryInformation バッファーが MemoryInformationLength より大きい。
STATUS_INVALID_INFO_CLASS 指定された MemoryInformationClass パラメーターが無効です。
STATUS_INVALID_PARAMETER 指定したベース アドレスが、アクセス可能なアドレスの範囲外です。

注釈

ZwQueryVirtualMemory は、領域内の最初のページの状態を決定し、ページの範囲全体がスキャンされるまで、または一致しない属性のセットが検出されるまで、プロセス アドレス マップ内の後続のエントリをベース アドレスから上方向にスキャンします。 リージョン属性、一致する属性を持つページの領域の長さ、および適切な状態値が返されます。

ページの領域全体に一致する属性のセットがない場合、1 つのアドレス予約内のサブリージョンは個別に返されます。 これらは同じ *MemoryInformation.AllocationBase 値を持ち、個々のサイズは *MemoryInformation.RegionSize に、アドレス予約の合計サイズは、特定の *MemoryInformation.AllocationBase 値に関連付けられているすべての *MemoryInformation.RegionSize 値を合計することで取得できます。

NtQueryVirtualMemoryZwQueryVirtualMemory は、同じ Windows ネイティブ システム サービス ルーチンの 2 つのバージョンです。

カーネル モード ドライバーからの呼び出しの場合、Windows ネイティブ システム サービス ルーチンの NtXxx および ZwXxx バージョンは、入力パラメーターを処理および解釈する方法で動作が異なります。 ルーチンの NtXxx バージョンと ZwXxx バージョン間の関係の詳細については、「Using Nt and Zw Versions of the Native System Services Routines」を参照してください。

要件

要件
サポートされている最小のクライアント Windows 2000
対象プラットフォーム ユニバーサル
Header ntifs.h
Library NtosKrnl.lib
[DLL] NtosKrnl.exe

こちらもご覧ください

MEMORY_BASIC_INFORMATION

MEMORY_INFORMATION_CLASS

POWER_PLATFORM_INFORMATION

ZwQueryVirtualMemory