Inizializzazione del gestore dei simboli

Il codice seguente illustra come inizializzare il gestore dei simboli. La funzione SymSetOptions rinvia il caricamento dei simboli fino a quando non vengono richieste informazioni sui simboli. Il codice carica i simboli per ogni modulo nel processo specificato passando un valore TRUE per il parametro bInvade della funzione SymInitialize. Questa funzione chiama Funzione SymLoadModule64 per ogni modulo di cui è stato eseguito il mapping nello spazio degli indirizzi.

Se il processo specificato non è il processo denominato SymInitialize, il codice passa un identificatore di processo come primo parametro di SymInitialize.

Se si specifica NULL come secondo parametro di SymInitialize , il gestore dei simboli deve usare il percorso di ricerca predefinito per individuare i file di simboli. Per informazioni dettagliate sul modo in cui il gestore dei simboli individua i file di simboli o su come un'applicazione può specificare un percorso di ricerca dei simboli, vedere Percorsi dei simboli.

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