Инициализация обработчика символов

В следующем коде показано, как инициализировать обработчик символов. Функция SymSetOptions откладывает загрузку символов до запроса сведений о символах. Код загружает символы для каждого модуля в указанном процессе, передав значение TRUE для параметра bInvade функции SymInitialize. (Эта функция вызывает Функция SymLoadModule64 для каждого модуля, которая сопоставлена с адресным пространством.)

Если указанный процесс не является процессом, который называется SymInitialize, код передает идентификатор процесса в качестве первого параметра SymInitialize.

Указание NULL в качестве второго параметра SymInitialize указывает, что обработчик символов должен использовать путь поиска по умолчанию для поиска файлов символов. Подробные сведения о том, как обработчик символов находит файлы символов или как приложение может указать путь поиска символов, см. в разделе "Пути символов".

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