Initialisieren des Symbolhandlers

Der folgende Code veranschaulicht, wie der Symbolhandler initialisiert wird. Die SymSetOptions-Funktion verzögert das Laden von Symbolen, bis Symbolinformationen angefordert werden. Der Code lädt die Symbole für jedes Modul im angegebenen Prozess, indem der Wert TRUE für den bInvade-Parameter der SymInitialize-Funktion übergeben wird. (Diese Funktion ruft die SymLoadModule64-Funktion für jedes Modul auf, das der Prozess dem Adressraum zugeordnet hat.)

Wenn der angegebene Prozess nicht der Prozess ist, der SymInitialize aufgerufen hat, übergibt der Code einen Prozessbezeichner als ersten Parameter von SymInitialize.

Die Angabe von NULL als zweiten Parameter von SymInitialize gibt an, dass der Symbolhandler den Standardsuchpfad verwenden sollte, um Symboldateien zu suchen. Ausführliche Informationen dazu, wie der Symbolhandler Symboldateien findet oder wie eine Anwendung einen Symbolsuchpfad angeben kann, finden Sie unter Symbolpfade.

DWORD  error;
HANDLE hCurrentProcess;
HANDLE hProcess;

SymSetOptions(SYMOPT_UNDNAME | SYMOPT_DEFERRED_LOADS);

hCurrentProcess = GetCurrentProcess();

if (!DuplicateHandle(hCurrentProcess, hCurrentProcess, hCurrentProcess, &hProcess, 0, FALSE, DUPLICATE_SAME_ACCESS))
{
    // DuplicateHandle failed
    error = GetLastError();
    printf("DuplicateHandle returned error : %d\n", error);
    return FALSE;
}

if (!SymInitialize(hProcess, NULL, TRUE))
{
    // SymInitialize failed
    error = GetLastError();
    printf("SymInitialize returned error : %d\n", error);
    return FALSE;
}