Freigeben über


HeapQueryInformation-Funktion (heapapi.h)

Ruft Informationen zum angegebenen Heap ab.

Syntax

BOOL HeapQueryInformation(
  [in, optional]  HANDLE                 HeapHandle,
  [in]            HEAP_INFORMATION_CLASS HeapInformationClass,
  [out]           PVOID                  HeapInformation,
  [in]            SIZE_T                 HeapInformationLength,
  [out, optional] PSIZE_T                ReturnLength
);

Parameter

[in, optional] HeapHandle

Ein Handle für den Heap, dessen Informationen abgerufen werden sollen. Dieses Handle wird entweder von der HeapCreate- oder getProcessHeap-Funktion zurückgegeben.

[in] HeapInformationClass

Die Klasse der abzurufenden Informationen. Dieser Parameter kann der folgende Wert aus dem HEAP_INFORMATION_CLASS Enumerationstyp sein.

Wert Bedeutung
HeapCompatibilityInformation
0
Gibt die aktivierten Heapfeatures an.

Der HeapInformation-Parameter ist ein Zeiger auf eine ULONG-Variable .

Wenn HeapInformation den Wert 0 aufweist, ist der Heap ein Standardheap, der keine Look-Aside-Listen unterstützt.

Wenn HeapInformation 1 ist, unterstützt der Heap Look-Aside-Listen. Weitere Informationen finden Sie in den Hinweisen.

Wenn HeapInformation den Wert 2 aufweist, wurde der Heap mit niedriger Fragmentierung (LFH) für den Heap aktiviert. Wenn Sie die LFH aktivieren, werden Look-Aside-Listen deaktiviert.

[out] HeapInformation

Ein Zeiger auf einen Puffer, der die Heapinformationen empfängt. Das Format dieser Daten hängt vom Wert des HeapInformationClass-Parameters ab.

[in] HeapInformationLength

Die Größe der abgefragten Heapinformationen in Bytes.

[out, optional] ReturnLength

Ein Zeiger auf eine Variable, die die Länge der in den HeapInformation-Puffer geschriebenen Daten empfängt. Wenn der Puffer zu klein ist, schlägt die Funktion fehl, und ReturnLength gibt die erforderliche Mindestgröße für den Puffer an.

Wenn Sie diese Informationen nicht erhalten möchten, geben Sie NULL an.

Rückgabewert

Wenn die Funktion erfolgreich ist, ist der Rückgabewert ungleich Null.

Wenn die Funktion fehlerhaft ist, ist der Rückgabewert null. Um erweiterte Fehlerinformationen zu erhalten, rufen Sie GetLastError auf.

Hinweise

Verwenden Sie die HeapSetInformation-Funktion , um die LFH oder die Funktion zum Beenden bei Beschädigung zu aktivieren.

Windows XP und Windows Server 2003: Eine Look-Aside-Liste ist ein schneller Speicherbelegungsmechanismus, der nur Blöcke mit fester Größe enthält. Look-Aside-Listen sind standardmäßig für Heaps aktiviert, die sie unterstützen. Ab Windows Vista werden Keine Look-Aside-Listen verwendet, und die LFH ist standardmäßig aktiviert.

Look-Aside-Listen sind schneller als allgemeine Poolzuordnungen, die in ihrer Größe variieren, da das System nicht nach freiem Arbeitsspeicher sucht, der der Zuordnung entspricht. Darüber hinaus wird der Zugriff auf Look-Aside-Listen in der Regel mithilfe schneller Anweisungen für den Atomprozessoraustausch anstelle von Mutexes oder Spinlocks synchronisiert. Look-Aside-Listen können vom System oder von Treibern erstellt werden. Sie können aus einem ausgelagerten oder nicht ausgelagerten Pool zugeordnet werden.

Beispiele

Im folgenden Beispiel wird GetProcessHeap verwendet, um ein Handle für den Standardprozessheap und HeapQueryInformation abzurufen, um Informationen zum Heap abzurufen.

#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;
}

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows XP [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile heapapi.h (windows.h einschließen)
Bibliothek Kernel32.lib
DLL Kernel32.dll

Siehe auch

GetProcessHeap

Heapfunktionen

HeapCreate

HeapSetInformation

Speicherverwaltungsfunktionen