blob: f9edba1425f92f73cd630486c7f0058dde89b97e [file] [log] [blame]
/**
* Windows API header module
*
* Translated from MinGW Windows headers
*
* Authors: Stewart Gordon
* License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
* Source: $(DRUNTIMESRC src/core/sys/windows/_imagehlp.d)
*/
module core.sys.windows.imagehlp;
version (Windows):
@system:
version (ANSI) {} else version = Unicode;
/* Comment from MinGW
NOTE: This strictly does not belong in the Win32 API since it's
really part of Platform SDK. However, GDB needs it and we might
as well provide it here.
*/
import core.sys.windows.winbase, core.sys.windows.windef;
// FIXME: check types of constants
enum API_VERSION_NUMBER = 7;
enum BIND_NO_BOUND_IMPORTS = 1;
enum BIND_NO_UPDATE = 2;
enum BIND_ALL_IMAGES = 4;
enum BIND_CACHE_IMPORT_DLLS = 8;
enum {
CBA_DEFERRED_SYMBOL_LOAD_START = 1,
CBA_DEFERRED_SYMBOL_LOAD_COMPLETE,
CBA_DEFERRED_SYMBOL_LOAD_FAILURE,
CBA_SYMBOLS_UNLOADED,
CBA_DUPLICATE_SYMBOL
}
enum CERT_PE_IMAGE_DIGEST_DEBUG_INFO = 1;
enum CERT_PE_IMAGE_DIGEST_RESOURCES = 2;
enum CERT_PE_IMAGE_DIGEST_ALL_IMPORT_INFO = 4;
enum CERT_PE_IMAGE_DIGEST_NON_PE_INFO = 8;
enum CERT_SECTION_TYPE_ANY = 255;
enum {
CHECKSUM_SUCCESS = 0,
CHECKSUM_OPEN_FAILURE,
CHECKSUM_MAP_FAILURE,
CHECKSUM_MAPVIEW_FAILURE,
CHECKSUM_UNICODE_FAILURE
}
enum IMAGE_SEPARATION = 65536;
enum SPLITSYM_REMOVE_PRIVATE = 1;
enum SPLITSYM_EXTRACT_ALL = 2;
enum SPLITSYM_SYMBOLPATH_IS_SRC = 4;
enum SYMF_OMAP_GENERATED = 1;
enum SYMF_OMAP_MODIFIED = 2;
enum SYMOPT_CASE_INSENSITIVE = 1;
enum SYMOPT_UNDNAME = 2;
enum SYMOPT_DEFERRED_LOADS = 4;
enum SYMOPT_NO_CPP = 8;
//const SYMOPT_LOAD_LINES = 16;
//const SYMOPT_OMAP_FIND_NEAREST = 32;
public import core.sys.windows.dbghelp_types :
SYMOPT_DEFERRED_LOAD,
SYMOPT_FAIL_CRITICAL_ERRORS,
SYMOPT_LOAD_LINES,
SYMOPT_DEBUG;
enum UNDNAME_COMPLETE = 0;
enum UNDNAME_NO_LEADING_UNDERSCORES = 1;
enum UNDNAME_NO_MS_KEYWORDS = 2;
enum UNDNAME_NO_FUNCTION_RETURNS = 4;
enum UNDNAME_NO_ALLOCATION_MODEL = 8;
enum UNDNAME_NO_ALLOCATION_LANGUAGE = 16;
enum UNDNAME_NO_MS_THISTYPE = 32;
enum UNDNAME_NO_CV_THISTYPE = 64;
enum UNDNAME_NO_THISTYPE = 96;
enum UNDNAME_NO_ACCESS_SPECIFIERS = 128;
enum UNDNAME_NO_THROW_SIGNATURES = 256;
enum UNDNAME_NO_MEMBER_TYPE = 512;
enum UNDNAME_NO_RETURN_UDT_MODEL = 1024;
enum UNDNAME_32_BIT_DECODE = 2048;
enum UNDNAME_NAME_ONLY = 4096;
enum UNDNAME_NO_ARGUMENTS = 8192;
enum UNDNAME_NO_SPECIAL_SYMS = 16384;
enum IMAGEHLP_STATUS_REASON {
BindOutOfMemory,
BindRvaToVaFailed,
BindNoRoomInImage,
BindImportModuleFailed,
BindImportProcedureFailed,
BindImportModule,
BindImportProcedure,
BindForwarder,
BindForwarderNOT,
BindImageModified,
BindExpandFileHeaders,
BindImageComplete,
BindMismatchedSymbols,
BindSymbolsNotUpdated
}
struct LOADED_IMAGE {
LPSTR ModuleName;
HANDLE hFile;
PUCHAR MappedAddress;
PIMAGE_NT_HEADERS FileHeader;
PIMAGE_SECTION_HEADER LastRvaSection;
ULONG NumberOfSections;
PIMAGE_SECTION_HEADER Sections;
ULONG Characteristics;
BOOLEAN fSystemImage;
BOOLEAN fDOSImage;
LIST_ENTRY Links;
ULONG SizeOfImage;
}
alias LOADED_IMAGE* PLOADED_IMAGE;
struct IMAGE_DEBUG_INFORMATION {
LIST_ENTRY List;
DWORD Size;
PVOID MappedBase;
USHORT Machine;
USHORT Characteristics;
DWORD CheckSum;
DWORD ImageBase;
DWORD SizeOfImage;
DWORD NumberOfSections;
PIMAGE_SECTION_HEADER Sections;
DWORD ExportedNamesSize;
LPSTR ExportedNames;
DWORD NumberOfFunctionTableEntries;
PIMAGE_FUNCTION_ENTRY FunctionTableEntries;
DWORD LowestFunctionStartingAddress;
DWORD HighestFunctionEndingAddress;
DWORD NumberOfFpoTableEntries;
PFPO_DATA FpoTableEntries;
DWORD SizeOfCoffSymbols;
PIMAGE_COFF_SYMBOLS_HEADER CoffSymbols;
DWORD SizeOfCodeViewSymbols;
PVOID CodeViewSymbols;
LPSTR ImageFilePath;
LPSTR ImageFileName;
LPSTR DebugFilePath;
DWORD TimeDateStamp;
BOOL RomImage;
PIMAGE_DEBUG_DIRECTORY DebugDirectory;
DWORD NumberOfDebugDirectories;
DWORD[3] Reserved;
}
alias IMAGE_DEBUG_INFORMATION* PIMAGE_DEBUG_INFORMATION;
enum ADDRESS_MODE {
AddrMode1616,
AddrMode1632,
AddrModeReal,
AddrModeFlat
}
struct ADDRESS {
DWORD Offset;
WORD Segment;
ADDRESS_MODE Mode;
}
alias ADDRESS* LPADDRESS;
struct KDHELP {
DWORD Thread;
DWORD ThCallbackStack;
DWORD NextCallback;
DWORD FramePointer;
DWORD KiCallUserMode;
DWORD KeUserCallbackDispatcher;
DWORD SystemRangeStart;
DWORD ThCallbackBStore;
DWORD KiUserExceptionDispatcher;
DWORD StackBase;
DWORD StackLimit;
DWORD[5] Reserved;
}
alias KDHELP* PKDHELP;
struct STACKFRAME {
ADDRESS AddrPC;
ADDRESS AddrReturn;
ADDRESS AddrFrame;
ADDRESS AddrStack;
LPVOID FuncTableEntry;
DWORD[4] Params;
BOOL Far;
BOOL Virtual;
DWORD[3] Reserved;
KDHELP KdHelp;
ADDRESS AddrBStore;
}
alias STACKFRAME* LPSTACKFRAME;
/*
struct API_VERSION {
USHORT MajorVersion;
USHORT MinorVersion;
USHORT Revision;
USHORT Reserved;
}
*/
public import core.sys.windows.dbghelp_types : API_VERSION;
alias API_VERSION* LPAPI_VERSION;
enum SYM_TYPE {
SymNone,
SymCoff,
SymCv,
SymPdb,
SymExport,
SymDeferred,
SymSym
}
struct IMAGEHLP_SYMBOL {
DWORD SizeOfStruct;
DWORD Address;
DWORD Size;
DWORD Flags;
DWORD MaxNameLength;
CHAR[1] Name = 0;
}
alias IMAGEHLP_SYMBOL* PIMAGEHLP_SYMBOL;
struct IMAGEHLP_MODULE {
DWORD SizeOfStruct;
DWORD BaseOfImage;
DWORD ImageSize;
DWORD TimeDateStamp;
DWORD CheckSum;
DWORD NumSyms;
SYM_TYPE SymType;
CHAR[32] ModuleName = 0;
CHAR[256] ImageName = 0;
CHAR[256] LoadedImageName = 0;
}
alias IMAGEHLP_MODULE* PIMAGEHLP_MODULE;
struct IMAGEHLP_LINE {
DWORD SizeOfStruct;
DWORD Key;
DWORD LineNumber;
PCHAR FileName;
DWORD Address;
}
alias IMAGEHLP_LINE* PIMAGEHLP_LINE;
struct IMAGEHLP_DEFERRED_SYMBOL_LOAD {
DWORD SizeOfStruct;
DWORD BaseOfImage;
DWORD CheckSum;
DWORD TimeDateStamp;
CHAR[MAX_PATH] FileName = 0;
BOOLEAN Reparse;
}
alias IMAGEHLP_DEFERRED_SYMBOL_LOAD* PIMAGEHLP_DEFERRED_SYMBOL_LOAD;
struct IMAGEHLP_DUPLICATE_SYMBOL {
DWORD SizeOfStruct;
DWORD NumberOfDups;
PIMAGEHLP_SYMBOL Symbol;
ULONG SelectedSymbol;
}
alias IMAGEHLP_DUPLICATE_SYMBOL* PIMAGEHLP_DUPLICATE_SYMBOL;
mixin DECLARE_HANDLE!("DIGEST_HANDLE");
extern (Windows) {
alias BOOL function(IMAGEHLP_STATUS_REASON, LPSTR, LPSTR, ULONG_PTR, ULONG_PTR)
PIMAGEHLP_STATUS_ROUTINE;
alias BOOL function(HANDLE , LPCVOID, LPVOID, DWORD, LPDWORD)
PREAD_PROCESS_MEMORY_ROUTINE;
alias LPVOID function(HANDLE, DWORD) PFUNCTION_TABLE_ACCESS_ROUTINE;
alias DWORD function(HANDLE, DWORD) PGET_MODULE_BASE_ROUTINE;
alias DWORD function(HANDLE, HANDLE, LPADDRESS)
PTRANSLATE_ADDRESS_ROUTINE;
alias BOOL function(LPSTR, ULONG, PVOID) PSYM_ENUMMODULES_CALLBACK;
alias BOOL function(LPSTR, ULONG, ULONG, PVOID) PSYM_ENUMSYMBOLS_CALLBACK;
alias BOOL function(LPSTR, ULONG, ULONG, PVOID)
PENUMLOADED_MODULES_CALLBACK;
alias BOOL function(HANDLE, ULONG, PVOID, PVOID)
PSYMBOL_REGISTERED_CALLBACK;
alias BOOL function(DIGEST_HANDLE refdata, PBYTE pData, DWORD dwLength)
DIGEST_FUNCTION;
PIMAGE_NT_HEADERS CheckSumMappedFile(LPVOID, DWORD, LPDWORD, LPDWORD);
DWORD MapFileAndCheckSumA(LPSTR, LPDWORD, LPDWORD);
DWORD MapFileAndCheckSumW(PWSTR, LPDWORD, LPDWORD);
BOOL TouchFileTimes(HANDLE, LPSYSTEMTIME);
BOOL SplitSymbols(LPSTR, LPSTR, LPSTR, DWORD);
HANDLE FindDebugInfoFile(LPSTR, LPSTR, LPSTR);
HANDLE FindExecutableImage(LPSTR, LPSTR, LPSTR);
BOOL UpdateDebugInfoFile(LPSTR, LPSTR, LPSTR, PIMAGE_NT_HEADERS);
BOOL UpdateDebugInfoFileEx(LPSTR, LPSTR, LPSTR, PIMAGE_NT_HEADERS, DWORD);
BOOL BindImage(LPSTR, LPSTR, LPSTR);
BOOL BindImageEx(DWORD, LPSTR, LPSTR, LPSTR, PIMAGEHLP_STATUS_ROUTINE);
BOOL ReBaseImage(LPSTR, LPSTR, BOOL, BOOL, BOOL, ULONG, ULONG*, ULONG_PTR*,
ULONG*, ULONG_PTR*, ULONG);
PLOADED_IMAGE ImageLoad(LPSTR, LPSTR);
BOOL ImageUnload(PLOADED_IMAGE);
PIMAGE_NT_HEADERS ImageNtHeader(PVOID);
PVOID ImageDirectoryEntryToData(PVOID, BOOLEAN, USHORT, PULONG);
PIMAGE_SECTION_HEADER ImageRvaToSection(PIMAGE_NT_HEADERS, PVOID, ULONG);
PVOID ImageRvaToVa(PIMAGE_NT_HEADERS, PVOID, ULONG,
PIMAGE_SECTION_HEADER*);
BOOL MapAndLoad(LPSTR, LPSTR, PLOADED_IMAGE, BOOL, BOOL);
BOOL GetImageConfigInformation(PLOADED_IMAGE,
PIMAGE_LOAD_CONFIG_DIRECTORY);
DWORD GetImageUnusedHeaderBytes(PLOADED_IMAGE, LPDWORD);
BOOL SetImageConfigInformation(PLOADED_IMAGE,
PIMAGE_LOAD_CONFIG_DIRECTORY);
BOOL UnMapAndLoad(PLOADED_IMAGE);
PIMAGE_DEBUG_INFORMATION MapDebugInformation(HANDLE, LPSTR, LPSTR, DWORD);
BOOL UnmapDebugInformation(PIMAGE_DEBUG_INFORMATION);
HANDLE FindExecutableImage(LPSTR, LPSTR, LPSTR);
BOOL SearchTreeForFile(LPSTR, LPSTR, LPSTR);
BOOL MakeSureDirectoryPathExists(LPCSTR);
DWORD UnDecorateSymbolName(LPCSTR, LPSTR, DWORD, DWORD);
BOOL StackWalk(DWORD, HANDLE, HANDLE, LPSTACKFRAME, LPVOID,
PREAD_PROCESS_MEMORY_ROUTINE, PFUNCTION_TABLE_ACCESS_ROUTINE,
PGET_MODULE_BASE_ROUTINE, PTRANSLATE_ADDRESS_ROUTINE);
LPAPI_VERSION ImagehlpApiVersion();
LPAPI_VERSION ImagehlpApiVersionEx(LPAPI_VERSION);
DWORD GetTimestampForLoadedLibrary(HMODULE);
BOOL RemovePrivateCvSymbolic(PCHAR, PCHAR*, ULONG*);
VOID RemoveRelocations(PCHAR);
DWORD SymSetOptions(DWORD);
DWORD SymGetOptions();
BOOL SymCleanup(HANDLE);
BOOL SymEnumerateModules(HANDLE, PSYM_ENUMMODULES_CALLBACK, PVOID);
BOOL SymEnumerateSymbols(HANDLE, DWORD, PSYM_ENUMSYMBOLS_CALLBACK, PVOID);
BOOL EnumerateLoadedModules(HANDLE, PENUMLOADED_MODULES_CALLBACK, PVOID);
LPVOID SymFunctionTableAccess(HANDLE, DWORD);
BOOL SymGetModuleInfo(HANDLE, DWORD, PIMAGEHLP_MODULE);
DWORD SymGetModuleBase(HANDLE, DWORD);
BOOL SymGetSymFromAddr(HANDLE, DWORD, PDWORD, PIMAGEHLP_SYMBOL);
BOOL SymGetSymFromName(HANDLE, LPSTR, PIMAGEHLP_SYMBOL);
BOOL SymGetSymNext(HANDLE, PIMAGEHLP_SYMBOL);
BOOL SymGetSymPrev(HANDLE, PIMAGEHLP_SYMBOL);
BOOL SymGetLineFromAddr(HANDLE, DWORD, PDWORD, PIMAGEHLP_LINE);
BOOL SymGetLineFromName(HANDLE, LPSTR, LPSTR, DWORD, PLONG,
PIMAGEHLP_LINE);
BOOL SymGetLineNext(HANDLE, PIMAGEHLP_LINE);
BOOL SymGetLinePrev(HANDLE, PIMAGEHLP_LINE);
BOOL SymMatchFileName(LPSTR, LPSTR, LPSTR*, LPSTR*);
BOOL SymInitialize(HANDLE, LPSTR, BOOL);
BOOL SymGetSearchPath(HANDLE, LPSTR, DWORD);
BOOL SymSetSearchPath(HANDLE, LPSTR);
BOOL SymLoadModule(HANDLE, HANDLE, PSTR, PSTR, DWORD, DWORD);
BOOL SymUnloadModule(HANDLE, DWORD);
BOOL SymUnDName(PIMAGEHLP_SYMBOL, LPSTR, DWORD);
BOOL SymRegisterCallback(HANDLE, PSYMBOL_REGISTERED_CALLBACK, PVOID);
BOOL ImageGetDigestStream(HANDLE, DWORD, DIGEST_FUNCTION, DIGEST_HANDLE);
BOOL ImageAddCertificate(HANDLE, LPWIN_CERTIFICATE, PDWORD);
BOOL ImageRemoveCertificate(HANDLE, DWORD);
BOOL ImageEnumerateCertificates(HANDLE, WORD, PDWORD, PDWORD, DWORD);
BOOL ImageGetCertificateData(HANDLE, DWORD, LPWIN_CERTIFICATE, PDWORD);
BOOL ImageGetCertificateHeader(HANDLE, DWORD, LPWIN_CERTIFICATE);
BOOL CopyPdb(CHAR*, CHAR*, BOOL);
BOOL RemovePrivateCvSymbolicEx(PCHAR, ULONG, PCHAR*, ULONG*);
}
version (Unicode) {
alias MapFileAndCheckSumW MapFileAndCheckSum;
} else {
alias MapFileAndCheckSumA MapFileAndCheckSum;
}