]> git.proxmox.com Git - rustc.git/blame - vendor/winapi/src/um/dbghelp.rs
New upstream version 1.46.0~beta.2+dfsg1
[rustc.git] / vendor / winapi / src / um / dbghelp.rs
CommitLineData
ff7c6d11
XL
1// Licensed under the Apache License, Version 2.0
2// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
3// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
4// All files in the project carrying such notice may not be copied, modified, or distributed
5// except according to those terms.
6//! DbgHelp include file
7use shared::basetsd::{DWORD64, PDWORD64, ULONG64};
8use shared::guiddef::GUID;
9use shared::minwindef::{
f035d41b 10 BOOL, DWORD, HMODULE, LPDWORD, MAX_PATH, PDWORD, PUCHAR, PULONG, UCHAR, ULONG, USHORT, WORD,
ff7c6d11
XL
11};
12use um::winnt::{
13 BOOLEAN, CHAR, HANDLE, LIST_ENTRY, PCSTR, PCWSTR, PIMAGE_NT_HEADERS, PIMAGE_SECTION_HEADER,
14 PSTR, PVOID, PWSTR, WCHAR,
15};
60c5eb7d 16#[cfg(target_pointer_width = "32")]
ff7c6d11
XL
17use um::winnt::{
18 PFPO_DATA, PIMAGE_COFF_SYMBOLS_HEADER, PIMAGE_DEBUG_DIRECTORY, PIMAGE_FUNCTION_ENTRY,
19 PIMAGE_NT_HEADERS32,
20};
60c5eb7d 21#[cfg(target_pointer_width = "64")]
ff7c6d11
XL
22use um::winnt::PIMAGE_NT_HEADERS64;
23use vc::vcruntime::size_t;
60c5eb7d 24#[cfg(target_pointer_width = "64")]
ff7c6d11
XL
25STRUCT!{struct LOADED_IMAGE {
26 ModuleName: PSTR,
27 hFile: HANDLE,
28 MappedAddress: PUCHAR,
29 FileHeader: PIMAGE_NT_HEADERS64,
30 LastRvaSection: PIMAGE_SECTION_HEADER,
31 NumberOfSections: ULONG,
32 Sections: PIMAGE_SECTION_HEADER,
33 Characteristics: ULONG,
34 fSystemImage: BOOLEAN,
35 fDOSImage: BOOLEAN,
36 fReadOnly: BOOLEAN,
37 Version: UCHAR,
38 Links: LIST_ENTRY,
39 SizeOfImage: ULONG,
40}}
60c5eb7d 41#[cfg(target_pointer_width = "32")]
ff7c6d11
XL
42STRUCT!{struct LOADED_IMAGE {
43 ModuleName: PSTR,
44 hFile: HANDLE,
45 MappedAddress: PUCHAR,
46 FileHeader: PIMAGE_NT_HEADERS32,
47 LastRvaSection: PIMAGE_SECTION_HEADER,
48 NumberOfSections: ULONG,
49 Sections: PIMAGE_SECTION_HEADER,
50 Characteristics: ULONG,
51 fSystemImage: BOOLEAN,
52 fDOSImage: BOOLEAN,
53 fReadOnly: BOOLEAN,
54 Version: UCHAR,
55 Links: LIST_ENTRY,
56 SizeOfImage: ULONG,
57}}
58pub const MAX_SYM_NAME: usize = 2000;
59pub const ERROR_IMAGE_NOT_STRIPPED: DWORD = 0x8800;
60pub const ERROR_NO_DBG_POINTER: DWORD = 0x8801;
61pub const ERROR_NO_PDB_POINTER: DWORD = 0x8802;
62FN!{stdcall PFIND_DEBUG_FILE_CALLBACK(
63 FileHandle: HANDLE,
64 FileName: PCSTR,
65 CallerData: PVOID,
66) -> BOOL}
67FN!{stdcall PFIND_DEBUG_FILE_CALLBACKW(
68 FileHandle: HANDLE,
69 FileName: PCWSTR,
70 CallerData: PVOID,
71) -> BOOL}
72FN!{stdcall PFINDFILEINPATHCALLBACK(
73 filename: PCSTR,
74 context: PVOID,
75) -> BOOL}
76FN!{stdcall PFINDFILEINPATHCALLBACKW(
77 filename: PCWSTR,
78 context: PVOID,
79) -> BOOL}
80FN!{stdcall PFIND_EXE_FILE_CALLBACK(
81 FileHandle: HANDLE,
82 FileName: PCSTR,
83 CallerData: PVOID,
84) -> BOOL}
85FN!{stdcall PFIND_EXE_FILE_CALLBACKW(
86 FileHandle: HANDLE,
87 FileName: PCWSTR,
88 CallerData: PVOID,
89) -> BOOL}
0bf4aa26
XL
90FN!{stdcall PSYM_ENUMERATESYMBOLS_CALLBACKW(
91 pSymInfo: PSYMBOL_INFOW,
92 SymbolSize: ULONG,
93 CallerData: PVOID,
94) -> BOOL}
60c5eb7d 95#[cfg(target_pointer_width = "32")]
ff7c6d11
XL
96STRUCT!{struct IMAGE_DEBUG_INFORMATION {
97 List: LIST_ENTRY,
98 ReservedSize: DWORD,
99 ReservedMappedBase: PVOID,
100 ReservedMachine: USHORT,
101 ReservedCharacteristics: USHORT,
102 ReservedCheckSum: DWORD,
103 ImageBase: DWORD,
104 SizeOfImage: DWORD,
105 ReservedNumberOfSections: DWORD,
106 ReservedSections: PIMAGE_SECTION_HEADER,
107 ReservedExportedNamesSize: DWORD,
108 ReservedExportedNames: PSTR,
109 ReservedNumberOfFunctionTableEntries: DWORD,
110 ReservedFunctionTableEntries: PIMAGE_FUNCTION_ENTRY,
111 ReservedLowestFunctionStartingAddress: DWORD,
112 ReservedHighestFunctionEndingAddress: DWORD,
113 ReservedNumberOfFpoTableEntries: DWORD,
114 ReservedFpoTableEntries: PFPO_DATA,
115 SizeOfCoffSymbols: DWORD,
116 CoffSymbols: PIMAGE_COFF_SYMBOLS_HEADER,
117 ReservedSizeOfCodeViewSymbols: DWORD,
118 ReservedCodeViewSymbols: PVOID,
119 ImageFilePath: PSTR,
120 ImageFileName: PSTR,
121 ReservedDebugFilePath: PSTR,
122 ReservedTimeDateStamp: DWORD,
123 ReservedRomImage: BOOL,
124 ReservedDebugDirectory: PIMAGE_DEBUG_DIRECTORY,
125 ReservedNumberOfDebugDirectories: DWORD,
126 ReservedOriginalFunctionTableBaseAddress: DWORD,
127 Reserved: [DWORD; 2],
128}}
60c5eb7d 129#[cfg(target_pointer_width = "32")]
ff7c6d11
XL
130pub type PIMAGE_DEBUG_INFORMATION = *mut IMAGE_DEBUG_INFORMATION;
131FN!{stdcall PENUMDIRTREE_CALLBACK(
132 FilePath: PCSTR,
133 CallerData: PVOID,
134) -> BOOL}
135FN!{stdcall PENUMDIRTREE_CALLBACKW(
136 FilePath: PCWSTR,
137 CallerData: PVOID,
138) -> BOOL}
139pub const UNDNAME_COMPLETE: DWORD = 0x0000;
140pub const UNDNAME_NO_LEADING_UNDERSCORES: DWORD = 0x0001;
141pub const UNDNAME_NO_MS_KEYWORDS: DWORD = 0x0002;
142pub const UNDNAME_NO_FUNCTION_RETURNS: DWORD = 0x0004;
143pub const UNDNAME_NO_ALLOCATION_MODEL: DWORD = 0x0008;
144pub const UNDNAME_NO_ALLOCATION_LANGUAGE: DWORD = 0x0010;
145pub const UNDNAME_NO_MS_THISTYPE: DWORD = 0x0020;
146pub const UNDNAME_NO_CV_THISTYPE: DWORD = 0x0040;
147pub const UNDNAME_NO_THISTYPE: DWORD = 0x0060;
148pub const UNDNAME_NO_ACCESS_SPECIFIERS: DWORD = 0x0080;
149pub const UNDNAME_NO_THROW_SIGNATURES: DWORD = 0x0100;
150pub const UNDNAME_NO_MEMBER_TYPE: DWORD = 0x0200;
151pub const UNDNAME_NO_RETURN_UDT_MODEL: DWORD = 0x0400;
152pub const UNDNAME_32_BIT_DECODE: DWORD = 0x0800;
153pub const UNDNAME_NAME_ONLY: DWORD = 0x1000;
154pub const UNDNAME_NO_ARGUMENTS: DWORD = 0x2000;
155pub const UNDNAME_NO_SPECIAL_SYMS: DWORD = 0x4000;
156pub const DBHHEADER_DEBUGDIRS: DWORD = 0x1;
157pub const DBHHEADER_CVMISC: DWORD = 0x2;
158pub const DBHHEADER_PDBGUID: DWORD = 0x3;
159STRUCT!{struct MODLOAD_DATA {
160 ssize: DWORD,
161 ssig: DWORD,
162 data: PVOID,
163 size: DWORD,
164 flags: DWORD,
165}}
166pub type PMODLOAD_DATA = *mut MODLOAD_DATA;
167STRUCT!{struct MODLOAD_CVMISC {
168 oCV: DWORD,
169 cCV: size_t,
170 oMisc: DWORD,
171 cMisc: size_t,
172 dtImage: DWORD,
173 cImage: DWORD,
174}}
175pub type PMODLOAD_CVMISC = *mut MODLOAD_CVMISC;
176STRUCT!{struct MODLOAD_PDBGUID_PDBAGE {
177 PdbGuid: GUID,
178 PdbAge: DWORD,
179}}
180pub type PMODLOAD_PDBGUID_PDBAGE = *mut MODLOAD_PDBGUID_PDBAGE;
181ENUM!{enum ADDRESS_MODE {
182 AddrMode1616,
183 AddrMode1632,
184 AddrModeReal,
185 AddrModeFlat,
186}}
187STRUCT!{struct ADDRESS64 {
188 Offset: DWORD64,
189 Segment: WORD,
190 Mode: ADDRESS_MODE,
191}}
192pub type LPADDRESS64 = *mut ADDRESS64;
60c5eb7d 193#[cfg(target_pointer_width = "64")]
ff7c6d11 194pub type ADDRESS = ADDRESS64;
60c5eb7d 195#[cfg(target_pointer_width = "64")]
ff7c6d11 196pub type LPADDRESS = LPADDRESS64;
60c5eb7d 197#[cfg(target_pointer_width = "32")]
ff7c6d11
XL
198STRUCT!{struct ADDRESS {
199 Offset: DWORD,
200 Segment: WORD,
201 Mode: ADDRESS_MODE,
202}}
60c5eb7d 203#[cfg(target_pointer_width = "32")]
ff7c6d11
XL
204pub type LPADDRESS = *mut ADDRESS;
205STRUCT!{struct KDHELP64 {
206 Thread: DWORD64,
207 ThCallbackStack: DWORD,
208 ThCallbackBStore: DWORD,
209 NextCallback: DWORD,
210 FramePointer: DWORD,
211 KiCallUserMode: DWORD64,
212 KeUserCallbackDispatcher: DWORD64,
213 SystemRangeStart: DWORD64,
214 KiUserExceptionDispatcher: DWORD64,
215 StackBase: DWORD64,
216 StackLimit: DWORD64,
217 BuildVersion: DWORD,
218 Reserved0: DWORD,
219 Reserved1: [DWORD64; 4],
220}}
221pub type PKDHELP64 = *mut KDHELP64;
60c5eb7d 222#[cfg(target_pointer_width = "64")]
ff7c6d11 223pub type KDHELP = KDHELP64;
60c5eb7d 224#[cfg(target_pointer_width = "64")]
ff7c6d11 225pub type PKDHELP = PKDHELP64;
60c5eb7d 226#[cfg(target_pointer_width = "32")]
ff7c6d11
XL
227STRUCT!{struct KDHELP {
228 Thread: DWORD,
229 ThCallbackStack: DWORD,
230 NextCallback: DWORD,
231 FramePointer: DWORD,
232 KiCallUserMode: DWORD,
233 KeUserCallbackDispatcher: DWORD,
234 SystemRangeStart: DWORD,
235 ThCallbackBStore: DWORD,
236 KiUserExceptionDispatcher: DWORD,
237 StackBase: DWORD,
238 StackLimit: DWORD,
239 Reserved: [DWORD; 5],
240}}
60c5eb7d 241#[cfg(target_pointer_width = "32")]
ff7c6d11
XL
242pub type PKDHELP = *mut KDHELP;
243STRUCT!{struct STACKFRAME64 {
244 AddrPC: ADDRESS64,
245 AddrReturn: ADDRESS64,
246 AddrFrame: ADDRESS64,
247 AddrStack: ADDRESS64,
248 AddrBStore: ADDRESS64,
249 FuncTableEntry: PVOID,
250 Params: [DWORD64; 4],
251 Far: BOOL,
252 Virtual: BOOL,
253 Reserved: [DWORD64; 3],
254 KdHelp: KDHELP64,
255}}
256pub type LPSTACKFRAME64 = *mut STACKFRAME64;
257pub const INLINE_FRAME_CONTEXT_INIT: DWORD = 0;
258pub const INLINE_FRAME_CONTEXT_IGNORE: DWORD = 0xFFFFFFFF;
259STRUCT!{struct STACKFRAME_EX {
260 AddrPC: ADDRESS64,
261 AddrReturn: ADDRESS64,
262 AddrFrame: ADDRESS64,
263 AddrStack: ADDRESS64,
264 AddrBStore: ADDRESS64,
265 FuncTableEntry: PVOID,
266 Params: [DWORD64; 4],
267 Far: BOOL,
268 Virtual: BOOL,
269 Reserved: [DWORD64; 3],
270 KdHelp: KDHELP64,
271 StackFrameSize: DWORD,
272 InlineFrameContext: DWORD,
273}}
274pub type LPSTACKFRAME_EX = *mut STACKFRAME_EX;
60c5eb7d 275#[cfg(target_pointer_width = "64")]
ff7c6d11 276pub type STACKFRAME = STACKFRAME64;
60c5eb7d 277#[cfg(target_pointer_width = "64")]
ff7c6d11 278pub type LPSTACKFRAME = LPSTACKFRAME64;
60c5eb7d 279#[cfg(target_pointer_width = "32")]
ff7c6d11
XL
280STRUCT!{struct STACKFRAME {
281 AddrPC: ADDRESS,
282 AddrReturn: ADDRESS,
283 AddrFrame: ADDRESS,
284 AddrStack: ADDRESS,
285 FuncTableEntry: PVOID,
286 Params: [DWORD; 4],
287 Far: BOOL,
288 Virtual: BOOL,
289 Reserved: [DWORD; 3],
290 KdHelp: KDHELP,
291 AddrBStore: ADDRESS,
292}}
60c5eb7d 293#[cfg(target_pointer_width = "32")]
ff7c6d11
XL
294pub type LPSTACKFRAME = *mut STACKFRAME;
295FN!{stdcall PREAD_PROCESS_MEMORY_ROUTINE64(
296 hProcess: HANDLE,
297 qwBaseAddress: DWORD64,
298 lpBuffer: PVOID,
299 nSize: DWORD,
300 lpNumberOfBytesRead: LPDWORD,
301) -> BOOL}
302FN!{stdcall PFUNCTION_TABLE_ACCESS_ROUTINE64(
303 ahProcess: HANDLE,
304 AddrBase: DWORD64,
305) -> PVOID}
306FN!{stdcall PGET_MODULE_BASE_ROUTINE64(
307 hProcess: HANDLE,
308 Address: DWORD64,
309) -> DWORD64}
310FN!{stdcall PTRANSLATE_ADDRESS_ROUTINE64(
311 hProcess: HANDLE,
312 hThread: HANDLE,
313 lpaddr: LPADDRESS64,
314) -> DWORD64}
315pub const SYM_STKWALK_DEFAULT: DWORD = 0x00000000;
316pub const SYM_STKWALK_FORCE_FRAMEPTR: DWORD = 0x00000001;
60c5eb7d 317#[cfg(target_pointer_width = "64")]
ff7c6d11 318pub type PREAD_PROCESS_MEMORY_ROUTINE = PREAD_PROCESS_MEMORY_ROUTINE64;
60c5eb7d 319#[cfg(target_pointer_width = "64")]
ff7c6d11 320pub type PFUNCTION_TABLE_ACCESS_ROUTINE = PFUNCTION_TABLE_ACCESS_ROUTINE64;
60c5eb7d 321#[cfg(target_pointer_width = "64")]
ff7c6d11 322pub type PGET_MODULE_BASE_ROUTINE = PGET_MODULE_BASE_ROUTINE64;
60c5eb7d 323#[cfg(target_pointer_width = "64")]
ff7c6d11 324pub type PTRANSLATE_ADDRESS_ROUTINE = PTRANSLATE_ADDRESS_ROUTINE64;
60c5eb7d 325#[cfg(target_pointer_width = "32")]
ff7c6d11
XL
326FN!{stdcall PREAD_PROCESS_MEMORY_ROUTINE(
327 hProcess: HANDLE,
328 qwBaseAddress: DWORD,
329 lpBuffer: PVOID,
330 nSize: DWORD,
331 lpNumberOfBytesRead: PDWORD,
332) -> BOOL}
60c5eb7d 333#[cfg(target_pointer_width = "32")]
ff7c6d11
XL
334FN!{stdcall PFUNCTION_TABLE_ACCESS_ROUTINE(
335 ahProcess: HANDLE,
336 AddrBase: DWORD,
337) -> PVOID}
60c5eb7d 338#[cfg(target_pointer_width = "32")]
ff7c6d11
XL
339FN!{stdcall PGET_MODULE_BASE_ROUTINE(
340 hProcess: HANDLE,
341 Address: DWORD,
342) -> DWORD}
60c5eb7d 343#[cfg(target_pointer_width = "32")]
ff7c6d11
XL
344FN!{stdcall PTRANSLATE_ADDRESS_ROUTINE(
345 hProcess: HANDLE,
346 hThread: HANDLE,
347 lpaddr: LPADDRESS,
348) -> DWORD}
349pub const API_VERSION_NUMBER: USHORT = 12;
350STRUCT!{struct API_VERSION {
351 MajorVersion: USHORT,
352 MinorVersion: USHORT,
353 Revision: USHORT,
354 Reserved: USHORT,
355}}
356pub type LPAPI_VERSION = *mut API_VERSION;
357STRUCT!{struct SYMBOL_INFOW {
358 SizeOfStruct: ULONG,
359 TypeIndex: ULONG,
360 Reserved: [ULONG64; 2],
361 Index: ULONG,
362 Size: ULONG,
363 ModBase: ULONG64,
364 Flags: ULONG,
365 Value: ULONG64,
366 Address: ULONG64,
367 Register: ULONG,
368 Scope: ULONG,
369 Tag: ULONG,
370 NameLen: ULONG,
371 MaxNameLen: ULONG,
372 Name: [WCHAR; 1],
373}}
374pub type PSYMBOL_INFOW = *mut SYMBOL_INFOW;
f035d41b
XL
375ENUM!{enum SYM_TYPE {
376 SymNone = 0,
377 SymCoff,
378 SymCv,
379 SymPdb,
380 SymExport,
381 SymDeferred,
382 SymSym,
383 SymDia,
384 SymVirtual,
385 NumSymTypes,
386}}
ff7c6d11
XL
387STRUCT!{struct IMAGEHLP_SYMBOL64 {
388 SizeOfStruct: DWORD,
389 Address: DWORD64,
390 Size: DWORD,
391 Flags: DWORD,
392 MaxNameLength: DWORD,
393 Name: [CHAR; 1],
394}}
395pub type PIMAGEHLP_SYMBOL64 = *mut IMAGEHLP_SYMBOL64;
f035d41b
XL
396STRUCT!{struct IMAGEHLP_MODULEW64 {
397 SizeOfStruct: DWORD,
398 BaseOfImage: DWORD64,
399 ImageSize: DWORD,
400 TimeDateStamp: DWORD,
401 CheckSum: DWORD,
402 NumSyms: DWORD,
403 SymType: SYM_TYPE,
404 ModuleName: [WCHAR; 32],
405 ImageName: [WCHAR; 256],
406 LoadedImageName: [WCHAR; 256],
407 LoadedPdbName: [WCHAR; 256],
408 CVSig: DWORD,
409 CVData: [WCHAR; MAX_PATH * 3],
410 PdbSig: DWORD,
411 PdbSig70: GUID,
412 PdbAge: DWORD,
413 PdbUnmatched: BOOL,
414 DbgUnmatched: BOOL,
415 LineNumbers: BOOL,
416 GlobalSymbols: BOOL,
417 TypeInfo: BOOL,
418 SourceIndexed: BOOL,
419 Publics: BOOL,
420 MachineType: DWORD,
421 Reserved: DWORD,
422}}
423pub type PIMAGEHLP_MODULEW64 = *mut IMAGEHLP_MODULEW64;
ff7c6d11
XL
424STRUCT!{struct IMAGEHLP_LINEW64 {
425 SizeOfStruct: DWORD,
426 Key: PVOID,
427 LineNumber: DWORD,
428 FileName: PWSTR,
429 Address: DWORD64,
430}}
431pub type PIMAGEHLP_LINEW64 = *mut IMAGEHLP_LINEW64;
432extern "system" {
433 pub fn EnumDirTree(
434 hProcess: HANDLE,
435 RootPath: PCSTR,
436 InputPathName: PCSTR,
437 OutputPathBuffer: PSTR,
438 cb: PENUMDIRTREE_CALLBACK,
439 data: PVOID,
440 ) -> BOOL;
441 pub fn EnumDirTreeW(
442 hProcess: HANDLE,
443 RootPath: PCWSTR,
444 InputPathName: PCWSTR,
445 OutputPathBuffer: PWSTR,
446 cb: PENUMDIRTREE_CALLBACKW,
447 data: PVOID,
448 ) -> BOOL;
449 pub fn ImagehlpApiVersion() -> LPAPI_VERSION;
450 pub fn ImagehlpApiVersionEx(
451 AppVersion: LPAPI_VERSION,
452 ) -> LPAPI_VERSION;
453 pub fn MakeSureDirectoryPathExists(
454 DirPath: PCSTR,
455 ) -> BOOL;
456 pub fn SearchTreeForFile(
457 RootPath: PCSTR,
458 InputPathName: PCSTR,
459 OutputPathBuffer: PSTR,
460 ) -> BOOL;
461 pub fn SearchTreeForFileW(
462 RootPath: PCWSTR,
463 InputPathName: PCWSTR,
464 OutputPathBuffer: PWSTR,
465 ) -> BOOL;
466 pub fn FindDebugInfoFile(
467 FileName: PCSTR,
468 SymbolPath: PCSTR,
60c5eb7d 469 DebugFilePath: PSTR,
ff7c6d11
XL
470 ) -> HANDLE;
471 pub fn FindDebugInfoFileEx(
472 FileName: PCSTR,
473 SymbolPath: PCSTR,
474 DebugFilePath: PSTR,
475 Callback: PFIND_DEBUG_FILE_CALLBACK,
476 CallerData: PVOID,
477 ) -> HANDLE;
478 pub fn FindDebugInfoFileExW(
479 FileName: PCWSTR,
480 SymbolPath: PCWSTR,
481 DebugFilePath: PWSTR,
482 Callback: PFIND_DEBUG_FILE_CALLBACKW,
483 CallerData: PVOID,
484 ) -> HANDLE;
485 pub fn FindExecutableImage(
486 FileName: PCSTR,
487 SymbolPath: PCSTR,
60c5eb7d 488 ImageFilePath: PSTR,
ff7c6d11
XL
489 ) -> HANDLE;
490 pub fn FindExecutableImageEx(
491 FileName: PCSTR,
492 SymbolPath: PCSTR,
493 ImageFilePath: PSTR,
494 Callback: PFIND_EXE_FILE_CALLBACK,
495 CallerData: PVOID,
496 ) -> HANDLE;
497 pub fn FindExecutableImageExW(
498 FileName: PCWSTR,
499 SymbolPath: PCWSTR,
500 ImageFilePath: PWSTR,
501 Callback: PFIND_EXE_FILE_CALLBACKW,
502 CallerData: PVOID,
503 ) -> HANDLE;
504 pub fn StackWalk(
505 MachineType: DWORD,
506 hProcess: HANDLE,
507 hThread: HANDLE,
508 StackFrame: LPSTACKFRAME,
509 ContextRecord: PVOID,
510 ReadMemoryRoutine: PREAD_PROCESS_MEMORY_ROUTINE,
511 FunctionTableAccessRoutine: PFUNCTION_TABLE_ACCESS_ROUTINE,
512 GetModuleBaseRoutine: PGET_MODULE_BASE_ROUTINE,
513 TranslateAddress: PTRANSLATE_ADDRESS_ROUTINE,
514 ) -> BOOL;
515 pub fn StackWalkEx(
516 MachineType: DWORD,
517 hProcess: HANDLE,
518 hThread: HANDLE,
60c5eb7d 519 StackFrame: LPSTACKFRAME_EX,
ff7c6d11
XL
520 ContextRecord: PVOID,
521 ReadMemoryRoutine: PREAD_PROCESS_MEMORY_ROUTINE64,
522 FunctionTableAccessRoutine: PFUNCTION_TABLE_ACCESS_ROUTINE64,
523 GetModuleBaseRoutine: PGET_MODULE_BASE_ROUTINE64,
524 TranslateAddress: PTRANSLATE_ADDRESS_ROUTINE64,
525 Flags: DWORD,
526 ) -> BOOL;
527 pub fn StackWalk64(
528 MachineType: DWORD,
529 hProcess: HANDLE,
530 hThread: HANDLE,
531 StackFrame: LPSTACKFRAME64,
532 ContextRecord: PVOID,
533 ReadMemoryRoutine: PREAD_PROCESS_MEMORY_ROUTINE64,
534 FunctionTableAccessRoutine: PFUNCTION_TABLE_ACCESS_ROUTINE64,
535 GetModuleBaseRoutine: PGET_MODULE_BASE_ROUTINE64,
536 TranslateAddress: PTRANSLATE_ADDRESS_ROUTINE64,
537 ) -> BOOL;
538 pub fn UnDecorateSymbolName(
539 name: PCSTR,
540 outputString: PSTR,
541 maxStringLength: DWORD,
542 flags: DWORD,
543 ) -> DWORD;
544 pub fn UnDecorateSymbolNameW(
545 name: PCWSTR,
546 outputString: PWSTR,
547 maxStringLength: DWORD,
548 flags: DWORD,
549 ) -> DWORD;
550 pub fn GetTimestampForLoadedLibrary(
551 Module: HMODULE,
552 ) -> DWORD;
553 pub fn ImageDirectoryEntryToData(
554 Base: PVOID,
555 MappedAsImage: BOOLEAN,
556 DirectoryEntry: USHORT,
557 Size: PULONG,
558 ) -> PVOID;
559 pub fn ImageDirectoryEntryToDataEx(
560 Base: PVOID,
561 MappedAsImage: BOOLEAN,
562 DirectoryEntry: USHORT,
563 Size: PULONG,
564 FoundHeader: *mut PIMAGE_SECTION_HEADER,
565 ) -> PVOID;
566 pub fn ImageNtHeader(
567 Base: PVOID,
568 ) -> PIMAGE_NT_HEADERS;
569 pub fn ImageRvaToSection(
570 NtHeaders: PIMAGE_NT_HEADERS,
571 Base: PVOID,
572 Rva: ULONG,
573 ) -> PIMAGE_SECTION_HEADER;
574 pub fn ImageRvaToVa(
575 NtHeaders: PIMAGE_NT_HEADERS,
576 Base: PVOID,
577 Rva: ULONG,
578 LastRvaSection: *mut PIMAGE_SECTION_HEADER,
579 ) -> PVOID;
f035d41b
XL
580}
581pub const SYMOPT_CASE_INSENSITIVE: DWORD = 0x00000001;
582pub const SYMOPT_UNDNAME: DWORD = 0x00000002;
583pub const SYMOPT_DEFERRED_LOADS: DWORD = 0x00000004;
584pub const SYMOPT_NO_CPP: DWORD = 0x00000008;
585pub const SYMOPT_LOAD_LINES: DWORD = 0x00000010;
586pub const SYMOPT_OMAP_FIND_NEAREST: DWORD = 0x00000020;
587pub const SYMOPT_LOAD_ANYTHING: DWORD = 0x00000040;
588pub const SYMOPT_IGNORE_CVREC: DWORD = 0x00000080;
589pub const SYMOPT_NO_UNQUALIFIED_LOADS: DWORD = 0x00000100;
590pub const SYMOPT_FAIL_CRITICAL_ERRORS: DWORD = 0x00000200;
591pub const SYMOPT_EXACT_SYMBOLS: DWORD = 0x00000400;
592pub const SYMOPT_ALLOW_ABSOLUTE_SYMBOLS: DWORD = 0x00000800;
593pub const SYMOPT_IGNORE_NT_SYMPATH: DWORD = 0x00001000;
594pub const SYMOPT_INCLUDE_32BIT_MODULES: DWORD = 0x00002000;
595pub const SYMOPT_PUBLICS_ONLY: DWORD = 0x00004000;
596pub const SYMOPT_NO_PUBLICS: DWORD = 0x00008000;
597pub const SYMOPT_AUTO_PUBLICS: DWORD = 0x00010000;
598pub const SYMOPT_NO_IMAGE_SEARCH: DWORD = 0x00020000;
599pub const SYMOPT_SECURE: DWORD = 0x00040000;
600pub const SYMOPT_NO_PROMPTS: DWORD = 0x00080000;
601pub const SYMOPT_OVERWRITE: DWORD = 0x00100000;
602pub const SYMOPT_IGNORE_IMAGEDIR: DWORD = 0x00200000;
603pub const SYMOPT_FLAT_DIRECTORY: DWORD = 0x00400000;
604pub const SYMOPT_FAVOR_COMPRESSED: DWORD = 0x00800000;
605pub const SYMOPT_ALLOW_ZERO_ADDRESS: DWORD = 0x01000000;
606pub const SYMOPT_DISABLE_SYMSRV_AUTODETECT: DWORD = 0x02000000;
607pub const SYMOPT_READONLY_CACHE: DWORD = 0x04000000;
608pub const SYMOPT_SYMPATH_LAST: DWORD = 0x08000000;
609pub const SYMOPT_DISABLE_FAST_SYMBOLS: DWORD = 0x10000000;
610pub const SYMOPT_DISABLE_SYMSRV_TIMEOUT: DWORD = 0x20000000;
611pub const SYMOPT_DISABLE_SRVSTAR_ON_STARTUP: DWORD = 0x40000000;
612pub const SYMOPT_DEBUG: DWORD = 0x80000000;
613extern "system" {
614 pub fn SymSetOptions(
615 SymOptions: DWORD,
616 ) -> DWORD;
617 pub fn SymGetOptions() -> DWORD;
ff7c6d11 618 pub fn SymCleanup(
60c5eb7d 619 hProcess: HANDLE,
ff7c6d11 620 ) -> BOOL;
0bf4aa26
XL
621 pub fn SymEnumSymbolsW(
622 hProcess: HANDLE,
623 BaseOfDll: ULONG64,
624 Mask: PCWSTR,
625 EnumSymbolsCallback: PSYM_ENUMERATESYMBOLS_CALLBACKW,
60c5eb7d 626 CallerData: PVOID,
0bf4aa26 627 ) -> BOOL;
ff7c6d11
XL
628 pub fn SymFindDebugInfoFile(
629 hProcess: HANDLE,
630 FileName: PCSTR,
631 DebugFilePath: PSTR,
632 Callback: PFIND_DEBUG_FILE_CALLBACK,
633 CallerData: PVOID,
634 ) -> HANDLE;
635 pub fn SymFindDebugInfoFileW(
636 hProcess: HANDLE,
637 FileName: PCWSTR,
638 DebugFilePath: PWSTR,
639 Callback: PFIND_DEBUG_FILE_CALLBACKW,
640 CallerData: PVOID,
641 ) -> HANDLE;
642 pub fn SymFindExecutableImage(
643 hProcess: HANDLE,
644 FileName: PCSTR,
645 ImageFilePath: PSTR,
646 Callback: PFIND_EXE_FILE_CALLBACK,
647 CallerData: PVOID,
648 ) -> HANDLE;
649 pub fn SymFindExecutableImageW(
650 hProcess: HANDLE,
651 FileName: PCWSTR,
652 ImageFilePath: PWSTR,
653 Callback: PFIND_EXE_FILE_CALLBACKW,
654 CallerData: PVOID,
655 ) -> HANDLE;
656 pub fn SymFindFileInPath(
657 hprocess: HANDLE,
658 SearchPath: PCSTR,
659 FileName: PCSTR,
660 id: PVOID,
661 two: DWORD,
662 three: DWORD,
663 flags: DWORD,
664 FoundFile: PSTR,
665 callback: PFINDFILEINPATHCALLBACK,
666 context: PVOID,
667 ) -> BOOL;
668 pub fn SymFindFileInPathW(
669 hprocess: HANDLE,
670 SearchPath: PCWSTR,
671 FileName: PCWSTR,
672 id: PVOID,
673 two: DWORD,
674 three: DWORD,
675 flags: DWORD,
676 FoundFile: PWSTR,
677 callback: PFINDFILEINPATHCALLBACKW,
678 context: PVOID,
679 ) -> BOOL;
680 pub fn SymFromAddrW(
681 hProcess: HANDLE,
682 Address: DWORD64,
683 Displacement: PDWORD64,
684 Symbol: PSYMBOL_INFOW,
685 ) -> BOOL;
0bf4aa26
XL
686 pub fn SymFromNameW(
687 hProcess: HANDLE,
688 Name: PCWSTR,
60c5eb7d 689 Symbol: PSYMBOL_INFOW,
0bf4aa26 690 ) -> BOOL;
ff7c6d11
XL
691 pub fn SymFunctionTableAccess64(
692 hProcess: HANDLE,
693 AddrBase: DWORD64,
694 ) -> PVOID;
695 pub fn SymGetLineFromAddrW64(
696 hProcess: HANDLE,
697 dwAddr: DWORD64,
698 pdwDisplacement: PDWORD,
699 Line: PIMAGEHLP_LINEW64,
700 ) -> BOOL;
f035d41b
XL
701 pub fn SymGetModuleInfoW64(
702 hProcess: HANDLE,
703 qwAddr: DWORD64,
704 ModuleInfo: PIMAGEHLP_MODULEW64,
705 ) -> BOOL;
ff7c6d11
XL
706 pub fn SymGetModuleBase64(
707 hProcess: HANDLE,
708 AddrBase: DWORD64,
709 ) -> DWORD64;
710 pub fn SymGetSymFromAddr64(
711 hProcess: HANDLE,
712 Address: DWORD64,
713 Displacement: PDWORD64,
714 Symbol: PIMAGEHLP_SYMBOL64,
715 ) -> BOOL;
716 pub fn SymInitializeW(
717 hProcess: HANDLE,
718 UserSearchPath: PCWSTR,
719 fInvadeProcess: BOOL,
720 ) -> BOOL;
0bf4aa26
XL
721 pub fn SymLoadModuleExW(
722 hProcess: HANDLE,
723 hFile: HANDLE,
724 ImageName: PCWSTR,
725 ModuleName: PCWSTR,
726 BaseOfDll: DWORD64,
727 SizeOfDll: DWORD,
728 Data: PMODLOAD_DATA,
60c5eb7d 729 Flags: DWORD,
0bf4aa26
XL
730 ) -> DWORD64;
731 pub fn SymUnloadModule(
732 hProcess: HANDLE,
60c5eb7d 733 BaseOfDll: DWORD,
0bf4aa26
XL
734 ) -> BOOL;
735 pub fn SymUnloadModule64(
736 hProcess: HANDLE,
60c5eb7d 737 BaseOfDll: DWORD64,
0bf4aa26 738 ) -> BOOL;
60c5eb7d 739 #[cfg(target_pointer_width = "32")]
ff7c6d11
XL
740 pub fn MapDebugInformation(
741 FileHandle: HANDLE,
742 FileName: PCSTR,
743 SymbolPath: PCSTR,
744 ImageBase: ULONG,
745 ) -> PIMAGE_DEBUG_INFORMATION;
60c5eb7d 746 #[cfg(target_pointer_width = "32")]
ff7c6d11
XL
747 pub fn UnmapDebugInformation(
748 DebugInfo: PIMAGE_DEBUG_INFORMATION,
749 ) -> BOOL;
750}