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