HeapQueryInformation 関数 (heapapi.h)
指定したヒープに関する情報を取得します。
構文
BOOL HeapQueryInformation(
[in, optional] HANDLE HeapHandle,
[in] HEAP_INFORMATION_CLASS HeapInformationClass,
[out] PVOID HeapInformation,
[in] SIZE_T HeapInformationLength,
[out, optional] PSIZE_T ReturnLength
);
パラメーター
[in, optional] HeapHandle
情報を取得するヒープへのハンドル。 このハンドルは、 HeapCreate 関数または GetProcessHeap 関数によって返されます。
[in] HeapInformationClass
取得する情報のクラス。 このパラメーターには、 HEAP_INFORMATION_CLASS 列挙型の次の値を指定できます。
値 | 意味 |
---|---|
|
有効になっているヒープ機能を示します。
HeapInformation パラメーターは、ULONG 変数へのポインターです。 HeapInformation が 0 の場合、ヒープはルックアサイド リストをサポートしない標準ヒープです。 HeapInformation が 1 の場合、ヒープはルックアサイド リストをサポートします。 詳細については、「解説」を参照してください。 HeapInformation が 2 の場合、ヒープに対して断片化の少ないヒープ (LFH) が有効になっています。 LFH を有効にすると、ルックアサイド リストが無効になります。 |
[out] HeapInformation
ヒープ情報を受け取るバッファーへのポインター。 このデータの形式は、 HeapInformationClass パラメーターの値によって異なります。
[in] HeapInformationLength
クエリ対象のヒープ情報のサイズ (バイト単位)。
[out, optional] ReturnLength
HeapInformation バッファーに書き込まれたデータの長さを受け取る変数へのポインター。 バッファーが小さすぎると、関数は失敗し、 ReturnLength はバッファーに必要な最小サイズを指定します。
この情報を受け取らない場合は、 NULL を指定します。
戻り値
関数が成功すると、戻り値は 0 以外になります。
関数が失敗した場合は、0 を返します。 詳細なエラー情報を得るには、GetLastError を呼び出します。
解説
LFH または破損時終了機能を有効にするには、 HeapSetInformation 関数を使用します。
Windows XP と Windows Server 2003: ルックアサイド リストは、固定サイズのブロックのみを含む高速メモリ割り当てメカニズムです。 ルックアサイド リストは、それらをサポートするヒープに対して既定で有効になっています。 Windows Vista 以降では、ルックアサイド リストは使用されず、LFH は既定で有効になっています。
システムは割り当てに適合する空きメモリを検索しないため、ルックアサイド リストはサイズが異なる一般的なプール割り当てよりも高速です。 さらに、一般に、ルックアサイド リストへのアクセスは、ミューテックスまたはスピンロックの代わりに高速アトミック プロセッサ交換命令を使用して同期されます。 ルックアサイド リストは、システムまたはドライバーによって作成できます。 これらは、ページ プールまたは非ページ プールから割り当てられます。
例
次の例では 、GetProcessHeap を使用して既定のプロセス ヒープへのハンドルを取得し、 HeapQueryInformation を使用してヒープに関する情報を取得します。
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#define HEAP_STANDARD 0
#define HEAP_LAL 1
#define HEAP_LFH 2
int __cdecl _tmain()
{
BOOL bResult;
HANDLE hHeap;
ULONG HeapInformation;
//
// Get a handle to the default process heap.
//
hHeap = GetProcessHeap();
if (hHeap == NULL) {
_tprintf(TEXT("Failed to retrieve default process heap with LastError %d.\n"),
GetLastError());
return 1;
}
//
// Query heap features that are enabled.
//
bResult = HeapQueryInformation(hHeap,
HeapCompatibilityInformation,
&HeapInformation,
sizeof(HeapInformation),
NULL);
if (bResult == FALSE) {
_tprintf(TEXT("Failed to retrieve heap features with LastError %d.\n"),
GetLastError());
return 1;
}
//
// Print results of the query.
//
_tprintf(TEXT("HeapCompatibilityInformation is %d.\n"), HeapInformation);
switch(HeapInformation)
{
case HEAP_STANDARD:
_tprintf(TEXT("The default process heap is a standard heap.\n"));
break;
case HEAP_LAL:
_tprintf(TEXT("The default process heap supports look-aside lists.\n"));
break;
case HEAP_LFH:
_tprintf(TEXT("The default process heap has the low-fragmentation ") \
TEXT("heap enabled.\n"));
break;
default:
_tprintf(TEXT("Unrecognized HeapInformation reported for the default ") \
TEXT("process heap.\n"));
break;
}
return 0;
}
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows XP (デスクトップ アプリのみ) |
サポートされている最小のサーバー | Windows Server 2003 (デスクトップ アプリのみ) |
対象プラットフォーム | Windows |
ヘッダー | heapapi.h (Windows.h を含む) |
Library | Kernel32.lib |
[DLL] | Kernel32.dll |