/*
 *      imagehlp.h   -       Declarations for IMAGEHLP
 */

#ifndef __WINE_IMAGEHLP_H
#define __WINE_IMAGEHLP_H

#include "toolhelp.h"
#include "winnt.h"
#include "wintypes.h"

/***********************************************************************
 * Types
 */

typedef PVOID DIGEST_HANDLE32; 

/***********************************************************************
 * Enums/Defines
 */

typedef enum _IMAGEHLP_STATUS_REASON32 {
  BindOutOfMemory,
  BindRvaToVaFailed,
  BindNoRoomInImage,
  BindImportModuleFailed,
  BindImportProcedureFailed,
  BindImportModule,
  BindImportProcedure,
  BindForwarder,
  BindForwarderNOT,
  BindImageModified,
  BindExpandFileHeaders,
  BindImageComplete,
  BindMismatchedSymbols,
  BindSymbolsNotUpdated
} IMAGEHLP_STATUS_REASON32;

#define BIND_NO_BOUND_IMPORTS  0x00000001
#define BIND_NO_UPDATE         0x00000002
#define BIND_ALL_IMAGES        0x00000004
#define BIND_CACHE_IMPORT_DLLS 0x00000008

#define CERT_PE_IMAGE_DIGEST_DEBUG_INFO      0x01
#define CERT_PE_IMAGE_DIGEST_RESOURCES       0x02
#define CERT_PE_IMAGE_DIGEST_ALL_IMPORT_INFO 0x04
#define CERT_PE_IMAGE_DIGEST_NON_PE_INFO     0x08

#define CERT_SECTION_TYPE_ANY 0xFF

#define WIN_CERT_REVISION_1_0 0x0100
#define WIN_CERT_REVISION_2_0 0x0200

#define WIN_CERT_TYPE_X509             0x0001 /* X.509 Certificate */
#define WIN_CERT_TYPE_PKCS_SIGNED_DATA 0x0002 /* PKCS SignedData */
#define WIN_CERT_TYPE_RESERVED_1       0x0003 /* Reserved */

#define SPLITSYM_REMOVE_PRIVATE    0x00000001
#define SPLITSYM_EXTRACT_ALL       0x00000002
#define SPLITSYM_SYMBOLPATH_IS_SRC 0x00000004

#define IMAGE_DEBUG_TYPE_UNKNOWN        0
#define IMAGE_DEBUG_TYPE_COFF           1
#define IMAGE_DEBUG_TYPE_CODEVIEW       2
#define IMAGE_DEBUG_TYPE_FPO            3
#define IMAGE_DEBUG_TYPE_MISC           4
#define IMAGE_DEBUG_TYPE_EXCEPTION      5
#define IMAGE_DEBUG_TYPE_FIXUP          6
#define IMAGE_DEBUG_TYPE_OMAP_TO_SRC    7
#define IMAGE_DEBUG_TYPE_OMAP_FROM_SRC  8
#define IMAGE_DEBUG_TYPE_BORLAND        9
#define IMAGE_DEBUG_TYPE_RESERVED10    10

#define FRAME_FPO    0
#define FRAME_TRAP   1
#define FRAME_TSS    2
#define FRAME_NONFPO 3

#define CHECKSUM_SUCCESS         0
#define CHECKSUM_OPEN_FAILURE    1
#define CHECKSUM_MAP_FAILURE     2
#define CHECKSUM_MAPVIEW_FAILURE 3
#define CHECKSUM_UNICODE_FAILURE 4

typedef enum _ADRESS_MODE32 {
  AddrMode1616,
  AddrMode1632,
  AddrModeReal,
  AddrModeFlat
} ADDRESS_MODE32;

#define SYMOPT_CASE_INSENSITIVE  0x00000001
#define SYMOPT_UNDNAME           0x00000002
#define SYMOPT_DEFERRED_LOADS    0x00000004
#define SYMOPT_NO_CPP            0x00000008
#define SYMOPT_LOAD_LINES        0x00000010
#define SYMOPT_OMAP_FIND_NEAREST 0x00000020

#define SYMF_OMAP_GENERATED   0x00000001
#define SYMF_OMAP_MODIFIED    0x00000002

typedef enum _SYM_TYPE32 {
  SymNone,
  SymCoff,
  SymCv,
  SymPdb,
  SymExport,
  SymDeferred,
  SymSym        /* .sym file */
} SYM_TYPE32;

#define UNDNAME_COMPLETE               0x0000
#define UNDNAME_NO_LEADING_UNDERSCORES 0x0001
#define UNDNAME_NO_MS_KEYWORDS         0x0002
#define UNDNAME_NO_FUNCTION_RETURNS    0x0004
#define UNDNAME_NO_ALLOCATION_MODEL    0x0008
#define UNDNAME_NO_ALLOCATION_LANGUAGE 0x0010
#define UNDNAME_NO_MS_THISTYPE         0x0020
#define UNDNAME_NO_CV_THISTYPE         0x0040
#define UNDNAME_NO_THISTYPE            0x0060
#define UNDNAME_NO_ACCESS_SPECIFIERS   0x0080
#define UNDNAME_NO_THROW_SIGNATURES    0x0100
#define UNDNAME_NO_MEMBER_TYPE         0x0200
#define UNDNAME_NO_RETURN_UDT_MODEL    0x0400
#define UNDNAME_32_BIT_DECODE          0x0800
#define UNDNAME_NAME_ONLY              0x1000
#define UNDNAME_NO_ARGUMENTS           0x2000
#define UNDNAME_NO_SPECIAL_SYMS        0x4000

#define CBA_DEFERRED_SYMBOL_LOAD_START          0x00000001
#define CBA_DEFERRED_SYMBOL_LOAD_COMPLETE       0x00000002
#define CBA_DEFERRED_SYMBOL_LOAD_FAILURE        0x00000003
#define CBA_SYMBOLS_UNLOADED                    0x00000004
#define CBA_DUPLICATE_SYMBOL                    0x00000005

#define IMAGE_DOS_SIGNATURE    0x5A4D     /* MZ   */
#define IMAGE_OS2_SIGNATURE    0x454E     /* NE   */
#define IMAGE_OS2_SIGNATURE_LE 0x454C     /* LE   */
#define IMAGE_VXD_SIGNATURE    0x454C     /* LE   */
#define IMAGE_NT_SIGNATURE     0x00004550 /* PE00 */

/***********************************************************************
 * Structures
 */

typedef struct _IMAGE_DATA_DIRECTORY32 {
  DWORD VirtualAddress;
  DWORD Size;
} IMAGE_DATA_DIRECTORY32, *PIMAGE_DATA_DIRECTORY32;

#define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16

typedef struct _IMAGE_OPTIONAL_HEADER32 {

  /* Standard fields */

  WORD  Magic;
  BYTE  MajorLinkerVersion;
  BYTE  MinorLinkerVersion;
  DWORD SizeOfCode;
  DWORD SizeOfInitializedData;
  DWORD SizeOfUninitializedData;
  DWORD AddressOfEntryPoint;
  DWORD BaseOfCode;
  DWORD BaseOfData;

  /* NT additional fields */

  DWORD ImageBase;
  DWORD SectionAlignment;
  DWORD FileAlignment;
  WORD  MajorOperatingSystemVersion;
  WORD  MinorOperatingSystemVersion;
  WORD  MajorImageVersion;
  WORD  MinorImageVersion;
  WORD  MajorSubsystemVersion;
  WORD  MinorSubsystemVersion;
  DWORD Win32VersionValue;
  DWORD SizeOfImage;
  DWORD SizeOfHeaders;
  DWORD CheckSum;
  WORD  Subsystem;
  WORD  DllCharacteristics;
  DWORD SizeOfStackReserve;
  DWORD SizeOfStackCommit;
  DWORD SizeOfHeapReserve;
  DWORD SizeOfHeapCommit;
  DWORD LoaderFlags;
  DWORD NumberOfRvaAndSizes;
  IMAGE_DATA_DIRECTORY32 DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
} IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;

typedef struct _IMAGE_FILE_HEADER32 {
  WORD  Machine;
  WORD  NumberOfSections;
  DWORD TimeDateStamp;
  DWORD PointerToSymbolTable;
  DWORD NumberOfSymbols;
  WORD  SizeOfOptionalHeader;
  WORD  Characteristics;
} IMAGE_FILE_HEADER32, *PIMAGE_FILE_HEADER32;

typedef struct _IMAGE_NT_HEADERS32 {
  DWORD Signature;
  IMAGE_FILE_HEADER32 FileHeader;
  IMAGE_OPTIONAL_HEADER32 OptionalHeader;
} IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;

#define IMAGE_SIZEOF_SHORT_NAME 8

typedef struct _IMAGE_SECTION_HEADER32 {
  BYTE  Name[IMAGE_SIZEOF_SHORT_NAME];
  union {
    DWORD PhysicalAddress;
    DWORD VirtualSize;
  } Misc;
  DWORD VirtualAddress;
  DWORD SizeOfRawData;
  DWORD PointerToRawData;
  DWORD PointerToRelocations;
  DWORD PointerToLinenumbers;
  WORD  NumberOfRelocations;
  WORD  NumberOfLinenumbers;
  DWORD Characteristics;
} IMAGE_SECTION_HEADER32, *PIMAGE_SECTION_HEADER32;

typedef struct _LOADED_IMAGE32 {
  LPSTR                   ModuleName;
  HANDLE32                hFile;
  PUCHAR                  MappedAddress;
  PIMAGE_NT_HEADERS32     FileHeader;
  PIMAGE_SECTION_HEADER32 LastRvaSection;
  ULONG                   NumberOfSections;
  PIMAGE_SECTION_HEADER32 Sections;
  ULONG                   Characteristics;
  BOOLEAN                 fSystemImage;
  BOOLEAN                 fDOSImage;
  LIST_ENTRY32            Links;
  ULONG                   SizeOfImage;
} LOADED_IMAGE32, *PLOADED_IMAGE32;

typedef struct _IMAGE_LOAD_CONFIG_DIRECTORY32 {
  DWORD Characteristics;
  DWORD TimeDateStamp;
  WORD  MajorVersion;
  WORD  MinorVersion;
  DWORD GlobalFlagsClear;
  DWORD GlobalFlagsSet;
  DWORD CriticalSectionDefaultTimeout;
  DWORD DeCommitFreeBlockThreshold;
  DWORD DeCommitTotalFreeThreshold;
  PVOID LockPrefixTable;
  DWORD MaximumAllocationSize;
  DWORD VirtualMemoryThreshold;
  DWORD ProcessHeapFlags;
  DWORD ProcessAffinityMask;
  WORD  CSDVersion;
  WORD  Reserved1;
  PVOID EditList;
  DWORD Reserved[1];
} IMAGE_LOAD_CONFIG_DIRECTORY32, *PIMAGE_LOAD_CONFIG_DIRECTORY32;

typedef struct _WIN_CERTIFICATE32 {
  DWORD dwLength;
  WORD  wRevision;                   /*  WIN_CERT_REVISON_xxx */ 
  WORD  wCertificateType;            /*  WIN_CERT_TYPE_xxx */
  BYTE  bCertificate[ANYSIZE_ARRAY];
} WIN_CERTIFICATE32, *PWIN_CERTIFICATE32;

typedef struct _API_VERSION32 {
  USHORT  MajorVersion;
  USHORT  MinorVersion;
  USHORT  Revision;
  USHORT  Reserved;
} API_VERSION32, *PAPI_VERSION32;

typedef struct _IMAGE_FUNCTION_ENTRY32 {
  DWORD StartingAddress;
  DWORD EndingAddress;
  DWORD EndOfPrologue;
} IMAGE_FUNCTION_ENTRY32, *PIMAGE_FUNCTION_ENTRY32;

typedef struct _IMAGE_DEBUG_DIRECTORY32 {
  DWORD Characteristics;
  DWORD TimeDateStamp;
  WORD  MajorVersion;
  WORD  MinorVersion;
  DWORD Type;
  DWORD SizeOfData;
  DWORD AddressOfRawData;
  DWORD PointerToRawData;
} IMAGE_DEBUG_DIRECTORY32, *PIMAGE_DEBUG_DIRECTORY32;

typedef struct _IMAGE_COFF_SYMBOLS_HEADER32 {
  DWORD NumberOfSymbols;
  DWORD LvaToFirstSymbol;
  DWORD NumberOfLinenumbers;
  DWORD LvaToFirstLinenumber;
  DWORD RvaToFirstByteOfCode;
  DWORD RvaToLastByteOfCode;
  DWORD RvaToFirstByteOfData;
  DWORD RvaToLastByteOfData;
} IMAGE_COFF_SYMBOLS_HEADER32, *PIMAGE_COFF_SYMBOLS_HEADER32;

typedef struct _FPO_DATA32 {
  DWORD ulOffStart;
  DWORD cbProcSize;
  DWORD cdwLocals;
  WORD  cdwParams;
  WORD  cbProlog : 8;
  WORD  cbRegs   : 3;
  WORD  fHasSEH  : 1;
  WORD  fUseBP   : 1;
  WORD  reserved : 1;
  WORD  cbFrame  : 2;
} FPO_DATA32, *PFPO_DATA32;

typedef struct _IMAGE_DEBUG_INFORMATION32 {
  LIST_ENTRY32 List;
  DWORD        Size;
  PVOID        MappedBase;
  USHORT       Machine;
  USHORT       Characteristics;
  DWORD        CheckSum;
  DWORD        ImageBase;
  DWORD        SizeOfImage;
  
  DWORD NumberOfSections;
  PIMAGE_SECTION_HEADER32 Sections;

  DWORD ExportedNamesSize;
  LPSTR ExportedNames;

  DWORD NumberOfFunctionTableEntries;
  PIMAGE_FUNCTION_ENTRY32 FunctionTableEntries;
  DWORD LowestFunctionStartingAddress;
  DWORD HighestFunctionEndingAddress;

  DWORD NumberOfFpoTableEntries;
  PFPO_DATA32 FpoTableEntries;

  DWORD SizeOfCoffSymbols;
  PIMAGE_COFF_SYMBOLS_HEADER32 CoffSymbols;

  DWORD SizeOfCodeViewSymbols;
  PVOID CodeViewSymbols;

  LPSTR ImageFilePath;
  LPSTR ImageFileName;
  LPSTR DebugFilePath;

  DWORD TimeDateStamp;

  BOOL32 RomImage;
  PIMAGE_DEBUG_DIRECTORY32 DebugDirectory;
  DWORD  NumberOfDebugDirectories;

  DWORD Reserved[3];
} IMAGE_DEBUG_INFORMATION32, *PIMAGE_DEBUG_INFORMATION32;

typedef struct _ADDRESS32 {
    DWORD          Offset;
    WORD           Segment;
    ADDRESS_MODE32 Mode;
} ADDRESS32, *PADDRESS32;

typedef struct _KDHELP32 {
  DWORD Thread;
  DWORD ThCallbackStack;
  DWORD NextCallback;
  DWORD FramePointer;
  DWORD KiCallUserMode;
  DWORD KeUserCallbackDispatcher;
  DWORD SystemRangeStart;
} KDHELP32, *PKDHELP32;

typedef struct _STACKFRAME32 {
  ADDRESS32 AddrPC;
  ADDRESS32 AddrReturn;
  ADDRESS32 AddrFrame;
  ADDRESS32 AddrStack;
  PVOID     FuncTableEntry;
  DWORD     Params[4];
  BOOL32    Far;
  BOOL32    Virtual;
  DWORD     Reserved[3];
  KDHELP32  KdHelp;
} STACKFRAME32, *PSTACKFRAME32;

typedef struct _IMAGEHLP_SYMBOL32 {
  DWORD SizeOfStruct;
  DWORD Address;
  DWORD Size;
  DWORD Flags;
  DWORD MaxNameLength;
  CHAR  Name[ANYSIZE_ARRAY];
} IMAGEHLP_SYMBOL32, *PIMAGEHLP_SYMBOL32;

typedef struct _IMAGEHLP_MODULE32 {
  DWORD      SizeOfStruct;
  DWORD      BaseOfImage;
  DWORD      ImageSize;
  DWORD      TimeDateStamp;
  DWORD      CheckSum;
  DWORD      NumSyms;
  SYM_TYPE32 SymType;
  CHAR       ModuleName[32];
  CHAR       ImageName[256];
  CHAR       LoadedImageName[256];
} IMAGEHLP_MODULE32, *PIMAGEHLP_MODULE32;

typedef struct _IMAGEHLP_LINE32 {
  DWORD SizeOfStruct;
  DWORD Key;
  DWORD LineNumber;
  PCHAR FileName;
  DWORD Address;
} IMAGEHLP_LINE32, *PIMAGEHLP_LINE32;

typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD32 {
  DWORD   SizeOfStruct;
  DWORD   BaseOfImage;
  DWORD   CheckSum;
  DWORD   TimeDateStamp;
  CHAR    FileName[MAX_PATH];
  BOOLEAN Reparse;
} IMAGEHLP_DEFERRED_SYMBOL_LOAD32, *PIMAGEHLP_DEFERRED_SYMBOL_LOAD32;

typedef struct _IMAGEHLP_DUPLICATE_SYMBOL32 {
  DWORD              SizeOfStruct;
  DWORD              NumberOfDups;
  PIMAGEHLP_SYMBOL32 Symbol;
  ULONG              SelectedSymbol;
} IMAGEHLP_DUPLICATE_SYMBOL32, *PIMAGEHLP_DUPLICATE_SYMBOL32;

typedef struct _IMAGE_DOS_HEADER32 {
  WORD e_magic;
  WORD e_cblp;
  WORD e_cp;
  WORD e_crlc;
  WORD e_cparhdr;
  WORD e_minalloc;
  WORD e_maxalloc;
  WORD e_ss;
  WORD e_sp;
  WORD e_csum;
  WORD e_ip;
  WORD e_cs;
  WORD e_lfarlc;
  WORD e_ovno;
  WORD e_res[4];
  WORD e_oemid;
  WORD e_oeminfo;
  WORD e_res2[10];
  LONG e_lfanew;
} IMAGE_DOS_HEADER32, *PIMAGE_DOS_HEADER32;

typedef struct _IMAGE_OS2_HEADER32 {
  WORD ne_magic;
  CHAR ne_ver;
  CHAR ne_rev;
  WORD ne_enttab;
  WORD ne_cbenttab;
  LONG ne_crc;
  WORD ne_flags;
  WORD ne_autodata;
  WORD ne_heap;
  WORD ne_stack;
  LONG ne_csip;
  LONG ne_sssp;
  WORD ne_cseg;
  WORD ne_cmod;
  WORD ne_cbnrestab;
  WORD ne_segtab;
  WORD ne_rsrctab;
  WORD ne_restab;
  WORD ne_modtab;
  WORD ne_imptab;
  LONG ne_nrestab;
  WORD ne_cmovent;
  WORD ne_align;
  WORD ne_cres;
  BYTE ne_exetyp;
  BYTE ne_flagsothers;
  WORD ne_pretthunks;
  WORD ne_psegrefbytes;
  WORD ne_swaparea;
  WORD ne_expver;
} IMAGE_OS2_HEADER32, *PIMAGE_OS2_HEADER32;

typedef struct _IMAGE_VXD_HEADER32 {
  WORD  e32_magic;
  BYTE  e32_border;
  BYTE  e32_worder;
  DWORD e32_level;
  WORD  e32_cpu;
  WORD  e32_os;
  DWORD e32_ver;
  DWORD e32_mflags;
  DWORD e32_mpages;
  DWORD e32_startobj;
  DWORD e32_eip;
  DWORD e32_stackobj;
  DWORD e32_esp;
  DWORD e32_pagesize;
  DWORD e32_lastpagesize;
  DWORD e32_fixupsize;
  DWORD e32_fixupsum;
  DWORD e32_ldrsize;
  DWORD e32_ldrsum;
  DWORD e32_objtab;
  DWORD e32_objcnt;
  DWORD e32_objmap;
  DWORD e32_itermap;
  DWORD e32_rsrctab;
  DWORD e32_rsrccnt;
  DWORD e32_restab;
  DWORD e32_enttab;
  DWORD e32_dirtab;
  DWORD e32_dircnt;
  DWORD e32_fpagetab;
  DWORD e32_frectab;
  DWORD e32_impmod;
  DWORD e32_impmodcnt;
  DWORD e32_impproc;
  DWORD e32_pagesum;
  DWORD e32_datapage;
  DWORD e32_preload;
  DWORD e32_nrestab;
  DWORD e32_cbnrestab;
  DWORD e32_nressum;
  DWORD e32_autodata;
  DWORD e32_debuginfo;
  DWORD e32_debuglen;
  DWORD e32_instpreload;
  DWORD e32_instdemand;
  DWORD e32_heapsize;
  BYTE   e32_res3[12];
  DWORD e32_winresoff;
  DWORD e32_winreslen;
  WORD  e32_devid;
  WORD  e32_ddkver;
} IMAGE_VXD_HEADER32, *PIMAGE_VXD_HEADER32;

/***********************************************************************
 * Callbacks
 */

typedef BOOL32 (CALLBACK *PIMAGEHLP_STATUS_ROUTINE32)(
  IMAGEHLP_STATUS_REASON32 Reason, LPSTR ImageName, LPSTR DllName,
  ULONG Va, ULONG Parameter
);

typedef BOOL32 (CALLBACK *PSYM_ENUMMODULES_CALLBACK32)(
  LPSTR ModuleName, ULONG BaseOfDll, PVOID UserContext
);

typedef BOOL32 (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK32)(
  LPSTR SymbolName, ULONG SymbolAddress, ULONG SymbolSize, 
  PVOID UserContext
);

typedef BOOL32 (CALLBACK *PENUMLOADED_MODULES_CALLBACK32)(
  LPSTR ModuleName, ULONG ModuleBase, ULONG ModuleSize, 
  PVOID UserContext
);

typedef BOOL32 (CALLBACK *PSYMBOL_REGISTERED_CALLBACK32)(
  HANDLE32 hProcess, ULONG ActionCode, PVOID CallbackData,
  PVOID UserContext
);

typedef BOOL32 (CALLBACK *DIGEST_FUNCTION32)(
  DIGEST_HANDLE32 refdata, PBYTE pData, DWORD dwLength
);

typedef BOOL32 (CALLBACK *PREAD_PROCESS_MEMORY_ROUTINE32)(
  HANDLE32  hProcess, PCVOID lpBaseAddress, PVOID lpBuffer,
  DWORD nSize, PDWORD lpNumberOfBytesRead
);

typedef PVOID (CALLBACK *PFUNCTION_TABLE_ACCESS_ROUTINE32)(
  HANDLE32 hProcess, DWORD AddrBase
);

typedef DWORD (CALLBACK *PGET_MODULE_BASE_ROUTINE32)(
  HANDLE32 hProcess, DWORD ReturnAddress);

typedef DWORD (CALLBACK *PTRANSLATE_ADDRESS_ROUTINE32)(
  HANDLE32 hProcess, HANDLE32 hThread, PADDRESS32 lpaddr
);

/***********************************************************************
 * Functions
 */

BOOL32 WINAPI BindImage32(
  LPSTR ImageName, LPSTR DllPath, LPSTR SymbolPath
);
BOOL32 WINAPI BindImageEx32(
  DWORD Flags, LPSTR ImageName, LPSTR DllPath, LPSTR SymbolPath,
  PIMAGEHLP_STATUS_ROUTINE32 StatusRoutine
);
PIMAGE_NT_HEADERS32 WINAPI CheckSumMappedFile32(
  LPVOID BaseAddress, DWORD FileLength, 
  LPDWORD HeaderSum, LPDWORD CheckSum
);
BOOL32 WINAPI EnumerateLoadedModules32(
  HANDLE32 hProcess,
  PENUMLOADED_MODULES_CALLBACK32 EnumLoadedModulesCallback,
  PVOID UserContext
);
HANDLE32 WINAPI FindDebugInfoFile32(
  LPSTR FileName, LPSTR SymbolPath, LPSTR DebugFilePath
);
HANDLE32 WINAPI FindExecutableImage32(
  LPSTR FileName, LPSTR SymbolPath, LPSTR ImageFilePath
);
BOOL32 WINAPI GetImageConfigInformation32(
  PLOADED_IMAGE32 LoadedImage, 
  PIMAGE_LOAD_CONFIG_DIRECTORY32 ImageConfigInformation
);
DWORD WINAPI GetImageUnusedHeaderBytes32(
  PLOADED_IMAGE32 LoadedImage,
  LPDWORD SizeUnusedHeaderBytes
);
DWORD WINAPI GetTimestampForLoadedLibrary32(
  HMODULE32 Module
);
BOOL32 WINAPI ImageAddCertificate32(
  HANDLE32 FileHandle, PWIN_CERTIFICATE32 Certificate, PDWORD Index
);
PVOID WINAPI ImageDirectoryEntryToData32(
  PVOID Base, BOOLEAN MappedAsImage, USHORT DirectoryEntry, PULONG Size
);
BOOL32 WINAPI ImageEnumerateCertificates32(
  HANDLE32 FileHandle, WORD TypeFilter, PDWORD CertificateCount,
  PDWORD Indices, DWORD IndexCount
);
BOOL32 WINAPI ImageGetCertificateData32(
  HANDLE32 FileHandle, DWORD CertificateIndex,
  PWIN_CERTIFICATE32 Certificate, PDWORD RequiredLength
);
BOOL32 WINAPI ImageGetCertificateHeader32(
  HANDLE32 FileHandle, DWORD CertificateIndex,
  PWIN_CERTIFICATE32 Certificateheader
);
BOOL32 WINAPI ImageGetDigestStream32(
  HANDLE32 FileHandle, DWORD DigestLevel,
  DIGEST_FUNCTION32 DigestFunction, DIGEST_HANDLE32 DigestHandle
);
PLOADED_IMAGE32 WINAPI ImageLoad32(
  LPSTR DllName, LPSTR DllPath
);
PIMAGE_NT_HEADERS32 WINAPI ImageNtHeader32(
  PVOID Base
);
BOOL32 WINAPI ImageRemoveCertificate32(
  HANDLE32 FileHandle, DWORD Index
);
PIMAGE_SECTION_HEADER32 WINAPI ImageRvaToSection32(
  PIMAGE_NT_HEADERS32 NtHeaders, PVOID Base, ULONG Rva
);
PVOID WINAPI ImageRvaToVa32(
  PIMAGE_NT_HEADERS32 NtHeaders, PVOID Base, ULONG Rva,
  PIMAGE_SECTION_HEADER32 *LastRvaSection
);
BOOL32 WINAPI ImageUnload32(
  PLOADED_IMAGE32 LoadedImage
);
PAPI_VERSION32 WINAPI ImagehlpApiVersion32(
  void 
);
PAPI_VERSION32 WINAPI ImagehlpApiVersionEx32(
  PAPI_VERSION32 AppVersion
);
BOOL32 WINAPI MakeSureDirectoryPathExists32(
  LPCSTR DirPath
);
BOOL32 WINAPI MapAndLoad32(
  LPSTR ImageName, LPSTR DllPath, PLOADED_IMAGE32 LoadedImage,
  BOOL32 DotDll, BOOL32 ReadOnly
);
PIMAGE_DEBUG_INFORMATION32 WINAPI MapDebugInformation32(
  HANDLE32 FileHandle, LPSTR FileName,
  LPSTR SymbolPath, DWORD ImageBase
);
DWORD WINAPI MapFileAndCheckSum32A(
  LPSTR Filename, LPDWORD HeaderSum, LPDWORD CheckSum
);
DWORD WINAPI MapFileAndCheckSum32W(
  LPWSTR Filename, LPDWORD HeaderSum, LPDWORD CheckSum
);
BOOL32 WINAPI ReBaseImage32(
  LPSTR CurrentImageName, LPSTR SymbolPath, BOOL32 fReBase,
  BOOL32 fRebaseSysfileOk, BOOL32 fGoingDown, ULONG CheckImageSize,
  ULONG *OldImageSize, ULONG *OldImageBase, ULONG *NewImageSize,
  ULONG *NewImageBase, ULONG TimeStamp
);
BOOL32 WINAPI RemovePrivateCvSymbolic32(
  PCHAR DebugData, PCHAR *NewDebugData, ULONG *NewDebugSize
);
VOID WINAPI RemoveRelocations32(
  PCHAR ImageName
);
BOOL32 WINAPI SearchTreeForFile32(
  LPSTR RootPath, LPSTR InputPathName, LPSTR OutputPathBuffer
);
BOOL32 WINAPI SetImageConfigInformation32(
  PLOADED_IMAGE32 LoadedImage,
  PIMAGE_LOAD_CONFIG_DIRECTORY32 ImageConfigInformation
);
BOOL32 WINAPI SplitSymbols32(
  LPSTR ImageName, LPSTR SymbolsPath, 
  LPSTR SymbolFilePath, DWORD Flags
);
BOOL32 WINAPI StackWalk32(
  DWORD MachineType, HANDLE32 hProcess, HANDLE32 hThread,
  PSTACKFRAME32 StackFrame, PVOID ContextRecord,
  PREAD_PROCESS_MEMORY_ROUTINE32 ReadMemoryRoutine,
  PFUNCTION_TABLE_ACCESS_ROUTINE32 FunctionTableAccessRoutine,
  PGET_MODULE_BASE_ROUTINE32 GetModuleBaseRoutine,
  PTRANSLATE_ADDRESS_ROUTINE32 TranslateAddress
);
BOOL32 WINAPI SymCleanup32(
  HANDLE32 hProcess
);
BOOL32 WINAPI SymEnumerateModules32(
  HANDLE32 hProcess, PSYM_ENUMMODULES_CALLBACK32 EnumModulesCallback,
  PVOID UserContext
);
BOOL32 WINAPI SymEnumerateSymbols32(
  HANDLE32 hProcess, DWORD BaseOfDll,
  PSYM_ENUMSYMBOLS_CALLBACK32 EnumSymbolsCallback, PVOID UserContext
);
PVOID WINAPI SymFunctionTableAccess32(
  HANDLE32 hProcess, DWORD AddrBase
);
DWORD WINAPI SymGetModuleBase32(
  HANDLE32 hProcess, DWORD dwAddr
);
BOOL32 WINAPI SymGetModuleInfo32(
  HANDLE32 hProcess, DWORD dwAddr,
  PIMAGEHLP_MODULE32 ModuleInfo
);
DWORD WINAPI SymGetOptions32(
  void
);
BOOL32 WINAPI SymGetSearchPath32(
  HANDLE32 hProcess, LPSTR szSearchPath, DWORD SearchPathLength
);
BOOL32 WINAPI SymGetSymFromAddr32(
  HANDLE32 hProcess, DWORD dwAddr,
  PDWORD pdwDisplacement, PIMAGEHLP_SYMBOL32 Symbol
);
BOOL32 WINAPI SymGetSymFromName32(
  HANDLE32 hProcess, LPSTR Name, PIMAGEHLP_SYMBOL32 Symbol
);
BOOL32 WINAPI SymGetSymNext32(
  HANDLE32 hProcess, PIMAGEHLP_SYMBOL32 Symbol
);
BOOL32 WINAPI SymGetSymPrev32(
  HANDLE32 hProcess, PIMAGEHLP_SYMBOL32 Symbol
);
BOOL32 WINAPI SymInitialize32(
  HANDLE32 hProcess, LPSTR UserSearchPath, BOOL32 fInvadeProcess
);
BOOL32 WINAPI SymLoadModule32(
  HANDLE32 hProcess, HANDLE32 hFile, LPSTR ImageName, LPSTR ModuleName,
  DWORD BaseOfDll, DWORD SizeOfDll
);
BOOL32 WINAPI SymRegisterCallback32(
  HANDLE32 hProcess, PSYMBOL_REGISTERED_CALLBACK32 CallbackFunction,
  PVOID UserContext
);
DWORD WINAPI SymSetOptions32(
  DWORD SymOptions
);
BOOL32 WINAPI SymSetSearchPath32(
  HANDLE32 hProcess, LPSTR szSearchPath
);
BOOL32 WINAPI SymUnDName32(
  PIMAGEHLP_SYMBOL32 sym, LPSTR UnDecName, DWORD UnDecNameLength
);
BOOL32 WINAPI SymUnloadModule32(
  HANDLE32 hProcess, DWORD BaseOfDll
);
BOOL32 WINAPI TouchFileTimes32(
  HANDLE32 FileHandle, LPSYSTEMTIME lpSystemTime
);
DWORD WINAPI UnDecorateSymbolName32(
  LPCSTR DecoratedName, LPSTR UnDecoratedName,
  DWORD UndecoratedLength, DWORD Flags
);
BOOL32 WINAPI UnMapAndLoad32(
  PLOADED_IMAGE32 LoadedImage
);
BOOL32 WINAPI UnmapDebugInformation32(
  PIMAGE_DEBUG_INFORMATION32 DebugInfo
);
BOOL32 WINAPI UpdateDebugInfoFile32(
  LPSTR ImageFileName, LPSTR SymbolPath,
  LPSTR DebugFilePath, PIMAGE_NT_HEADERS32 NtHeaders
);
BOOL32 WINAPI UpdateDebugInfoFileEx32(
  LPSTR ImageFileName, LPSTR SymbolPath, LPSTR DebugFilePath,
  PIMAGE_NT_HEADERS32 NtHeaders, DWORD OldChecksum
);

/***********************************************************************
 * Wine specific
 */

extern HANDLE32 IMAGEHLP_hHeap32;

#endif  /* __WINE_IMAGEHLP_H */



