функция обратного вызова PIMAGEHLP_STATUS_ROUTINE (imagehlp.h)
Определяемая приложением функция обратного вызова, используемая с функцией BindImageEx . Подпрограмма состояния вызывается в процессе привязки образа.
Тип PIMAGEHLP_STATUS_ROUTINE определяет указатель на эту функцию обратного вызова. StatusRoutine — это заполнитель для имени функции, определяемой приложением.
Синтаксис
PIMAGEHLP_STATUS_ROUTINE PimagehlpStatusRoutine;
BOOL PimagehlpStatusRoutine(
[in] IMAGEHLP_STATUS_REASON Reason,
[in] PCSTR ImageName,
[in] PCSTR DllName,
[in] ULONG_PTR Va,
[in] ULONG_PTR Parameter
)
{...}
Параметры
[in] Reason
Текущее состояние операции привязки. Этот параметр может принимать одно из указанных ниже значений.
[in] ImageName
Имя привязаемого файла. Это может быть имя файла, частичный путь или полный путь.
[in] DllName
Имя библиотеки DLL.
[in] Va
Вычисленный виртуальный адрес.
[in] Parameter
Любые дополнительные сведения о состоянии. Это значение зависит от значения параметра Reason . Дополнительные сведения см. в фрагменте кода в следующем разделе Примечания.
Возвращаемое значение
Если функция выполнена успешно, возвращается значение TRUE.
Если функция завершается сбоем, возвращается значение FALSE. Чтобы получить расширенные сведения об ошибке, вызовите Метод GetLastError.
Комментарии
Все функции ImageHlp, такие как эта, являются однопоточными. Таким образом, вызовы из нескольких потоков к этой функции, скорее всего, приведут к непредвиденному поведению или повреждению памяти. Чтобы избежать этого, необходимо синхронизировать все параллельные вызовы из нескольких потоков в эту функцию.
В следующем фрагменте кода описывается, как использовать значение Va в состоянии BindImageComplete.
case BindImageComplete:
if (fVerbose) {
fprintf(stderr, "BIND: Details of binding %s\n", ImageName );
NewImports = (PIMAGE_BOUND_IMPORT_DESCRIPTOR)Va;
NewImport = NewImports;
while (NewImport->OffsetModuleName) {
fprintf( stderr, " Import from %s [%x]",
(LPSTR)NewImports + NewImport->OffsetModuleName,
NewImport->TimeDateStamp
);
if (NewImport->NumberOfModuleForwarderRefs != 0) {
fprintf( stderr, " with %u forwarders", NewImport->
NumberOfModuleForwarderRefs );
}
fprintf( stderr, "\n" );
NewForwarder = (PIMAGE_BOUND_FORWARDER_REF)(NewImport+1);
for (i=0; i<NewImport->NumberOfModuleForwarderRefs; i++)
{
fprintf( stderr, " Forward to %s [%x]\n",
(LPSTR)NewImports + NewForwarder->OffsetModuleName,
NewForwarder->TimeDateStamp);
NewForwarder += 1;
}
NewImport = (PIMAGE_BOUND_IMPORT_DESCRIPTOR)NewForwarder;
}
}
break;
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows XP [только классические приложения] |
Минимальная версия сервера | Windows Server 2003 [только классические приложения] |
Целевая платформа | Windows |
Header | imagehlp.h |