Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

613 lines
16 KiB

  1. /*++
  2. Copyright (c) 1992-2001 Microsoft Corporation
  3. Module Name:
  4. extfns.h
  5. Abstract:
  6. This header file must be included after "windows.h", "dbgeng.h", and "wdbgexts.h".
  7. This file contains headers for various known extension functions defined in different
  8. extension dlls. To use these functions, the appropropriate extension dll must be loaded
  9. in the debugger. IDebugSymbols->GetExtension (declared in dbgeng.h) methood could be used
  10. to retrive these functions.
  11. Please see the Debugger documentation for specific information about
  12. how to write your own debugger extension DLL.
  13. Environment:
  14. Win32 only.
  15. Revision History:
  16. --*/
  17. #ifndef _EXTFNS_H
  18. #define _EXTFNS_H
  19. #ifndef _KDEXTSFN_H
  20. #define _KDEXTSFN_H
  21. /*
  22. * Extension functions defined in kdexts.dll
  23. */
  24. //
  25. // device.c
  26. //
  27. typedef struct _DEBUG_DEVICE_OBJECT_INFO {
  28. ULONG SizeOfStruct; // must be == sizeof(DEBUG_DEVICE_OBJECT_INFO)
  29. ULONG64 DevObjAddress;
  30. ULONG ReferenceCount;
  31. BOOL QBusy;
  32. ULONG64 DriverObject;
  33. ULONG64 CurrentIrp;
  34. ULONG64 DevExtension;
  35. ULONG64 DevObjExtension;
  36. } DEBUG_DEVICE_OBJECT_INFO, *PDEBUG_DEVICE_OBJECT_INFO;
  37. // GetDevObjInfo
  38. typedef HRESULT
  39. (WINAPI *PGET_DEVICE_OBJECT_INFO)(
  40. IN PDEBUG_CLIENT Client,
  41. IN ULONG64 DeviceObject,
  42. OUT PDEBUG_DEVICE_OBJECT_INFO pDevObjInfo);
  43. //
  44. // driver.c
  45. //
  46. typedef struct _DEBUG_DRIVER_OBJECT_INFO {
  47. ULONG SizeOfStruct; // must be == sizef(DEBUG_DRIVER_OBJECT_INFO)
  48. ULONG DriverSize;
  49. ULONG64 DriverObjAddress;
  50. ULONG64 DriverStart;
  51. ULONG64 DriverExtension;
  52. ULONG64 DeviceObject;
  53. struct {
  54. USHORT Length;
  55. USHORT MaximumLength;
  56. ULONG64 Buffer;
  57. } DriverName;
  58. } DEBUG_DRIVER_OBJECT_INFO, *PDEBUG_DRIVER_OBJECT_INFO;
  59. // GetDrvObjInfo
  60. typedef HRESULT
  61. (WINAPI *PGET_DRIVER_OBJECT_INFO)(
  62. IN PDEBUG_CLIENT Client,
  63. IN ULONG64 DriverObject,
  64. OUT PDEBUG_DRIVER_OBJECT_INFO pDrvObjInfo);
  65. //
  66. // irp.c
  67. //
  68. typedef struct _DEBUG_IRP_STACK_INFO {
  69. UCHAR Major;
  70. UCHAR Minor;
  71. ULONG64 DeviceObject;
  72. ULONG64 FileObject;
  73. ULONG64 CompletionRoutine;
  74. ULONG64 StackAddress;
  75. } DEBUG_IRP_STACK_INFO, *PDEBUG_IRP_STACK_INFO;
  76. typedef struct _DEBUG_IRP_INFO {
  77. ULONG SizeOfStruct; // Must be == sizeof(DEBUG_IRP_INFO)
  78. ULONG64 IrpAddress;
  79. ULONG StackCount;
  80. ULONG CurrentLocation;
  81. ULONG64 MdlAddress;
  82. ULONG64 Thread;
  83. ULONG64 CancelRoutine;
  84. DEBUG_IRP_STACK_INFO CurrentStack;
  85. } DEBUG_IRP_INFO, *PDEBUG_IRP_INFO;
  86. // GetIrpInfo
  87. typedef HRESULT
  88. (WINAPI * PGET_IRP_INFO)(
  89. IN PDEBUG_CLIENT Client,
  90. IN ULONG64 Irp,
  91. OUT PDEBUG_IRP_INFO IrpInfo
  92. );
  93. //
  94. // pool.c
  95. //
  96. typedef struct _DEBUG_POOL_DATA {
  97. ULONG SizeofStruct;
  98. ULONG64 PoolBlock;
  99. ULONG64 Pool;
  100. ULONG PreviousSize;
  101. ULONG Size;
  102. ULONG PoolTag;
  103. ULONG64 ProcessBilled;
  104. union {
  105. struct {
  106. ULONG Free:1;
  107. ULONG LargePool:1;
  108. ULONG SpecialPool:1;
  109. ULONG Pageable:1;
  110. ULONG Protected:1;
  111. ULONG Allocated:1;
  112. ULONG Reserved:26;
  113. };
  114. ULONG AsUlong;
  115. };
  116. ULONG64 Reserved2[4];
  117. CHAR PoolTagDescription[64];
  118. } DEBUG_POOL_DATA, *PDEBUG_POOL_DATA;
  119. // GetPoolData
  120. typedef HRESULT
  121. (WINAPI *PGET_POOL_DATA)(
  122. PDEBUG_CLIENT Client,
  123. ULONG64 Pool,
  124. PDEBUG_POOL_DATA PoolData
  125. );
  126. typedef enum _DEBUG_POOL_REGION {
  127. DbgPoolRegionUnknown,
  128. DbgPoolRegionSpecial,
  129. DbgPoolRegionPaged,
  130. DbgPoolRegionNonPaged,
  131. DbgPoolRegionCode,
  132. DbgPoolRegionNonPagedExpansion,
  133. DbgPoolRegionMax,
  134. } DEBUG_POOL_REGION;
  135. // GetPoolRegion
  136. typedef HRESULT
  137. (WINAPI *PGET_POOL_REGION)(
  138. PDEBUG_CLIENT Client,
  139. ULONG64 Pool,
  140. DEBUG_POOL_REGION *PoolRegion
  141. );
  142. #endif // _KDEXTSFN_H
  143. #ifndef _KEXTFN_H
  144. #define _KEXTFN_H
  145. /*
  146. * Extension functions defined in kext.dll
  147. */
  148. /*****************************************************************************
  149. PoolTag definitions
  150. *****************************************************************************/
  151. typedef struct _DEBUG_POOLTAG_DESCRIPTION {
  152. ULONG SizeOfStruct; // must be == sizeof(DEBUG_POOLTAG_DESCRIPTION)
  153. ULONG PoolTag;
  154. CHAR Description[MAX_PATH];
  155. CHAR Binary[32];
  156. CHAR Owner[32];
  157. } DEBUG_POOLTAG_DESCRIPTION, *PDEBUG_POOLTAG_DESCRIPTION;
  158. // GetPoolTagDescription
  159. typedef HRESULT
  160. (WINAPI *PGET_POOL_TAG_DESCRIPTION)(
  161. ULONG PoolTag,
  162. PDEBUG_POOLTAG_DESCRIPTION pDescription
  163. );
  164. #endif // _KEXTFN_H
  165. #ifndef _EXTAPIS_H
  166. #define _EXTAPIS_H
  167. /*
  168. * Extension functions defined in ext.dll
  169. */
  170. /*****************************************************************************
  171. Failure analysis definitions
  172. *****************************************************************************/
  173. typedef enum _DEBUG_FAILURE_TYPE {
  174. DEBUG_FLR_UNKNOWN,
  175. DEBUG_FLR_KERNEL,
  176. DEBUG_FLR_USER_CRASH,
  177. DEBUG_FLR_IE_CRASH,
  178. } DEBUG_FAILURE_TYPE;
  179. /*
  180. Each analysis entry can have associated data with it. The
  181. analyzer knows how to handle each of these entries.
  182. For example it could do a !driver on a DEBUG_FLR_DRIVER_OBJECT
  183. or it could do a .cxr and k on a DEBUG_FLR_CONTEXT.
  184. */
  185. typedef enum _DEBUG_FLR_PARAM_TYPE {
  186. DEBUG_FLR_INVALID = 0,
  187. DEBUG_FLR_RESERVED,
  188. DEBUG_FLR_DRIVER_OBJECT,
  189. DEBUG_FLR_DEVICE_OBJECT,
  190. DEBUG_FLR_INVALID_PFN,
  191. DEBUG_FLR_WORKER_ROUTINE,
  192. DEBUG_FLR_WORK_ITEM,
  193. DEBUG_FLR_INVALID_DPC_FOUND,
  194. DEBUG_FLR_PROCESS_OBJECT,
  195. // Address for which an instruction could not be executed,
  196. // such as invalid instructions or attempts to execute
  197. // non-instruction memory.
  198. DEBUG_FLR_FAILED_INSTRUCTION_ADDRESS,
  199. DEBUG_FLR_LAST_CONTROL_TRANSFER,
  200. DEBUG_FLR_ACPI_EXTENSION,
  201. DEBUG_FLR_ACPI_OBJECT,
  202. DEBUG_FLR_PROCESS_NAME,
  203. DEBUG_FLR_READ_ADDRESS,
  204. DEBUG_FLR_WRITE_ADDRESS,
  205. DEBUG_FLR_CRITICAL_SECTION,
  206. DEBUG_FLR_BAD_HANDLE,
  207. DEBUG_FLR_INVALID_HEAP_ADDRESS,
  208. DEBUG_FLR_IRP_ADDRESS = 0x100,
  209. DEBUG_FLR_IRP_MAJOR_FN,
  210. DEBUG_FLR_IRP_MINOR_FN,
  211. DEBUG_FLR_IRP_CANCEL_ROUTINE,
  212. DEBUG_FLR_IOSB_ADDRESS,
  213. DEBUG_FLR_INVALID_USEREVENT,
  214. // Previous mode 0 == KernelMode , 1 == UserMode
  215. DEBUG_FLR_PREVIOUS_MODE,
  216. // Irql
  217. DEBUG_FLR_CURRENT_IRQL = 0x200,
  218. DEBUG_FLR_PREVIOUS_IRQL,
  219. DEBUG_FLR_REQUESTED_IRQL,
  220. // Exceptions
  221. DEBUG_FLR_ASSERT_DATA = 0x300,
  222. DEBUG_FLR_ASSERT_FILE,
  223. DEBUG_FLR_EXCEPTION_PARAMETER1,
  224. DEBUG_FLR_EXCEPTION_PARAMETER2,
  225. DEBUG_FLR_EXCEPTION_PARAMETER3,
  226. DEBUG_FLR_EXCEPTION_PARAMETER4,
  227. DEBUG_FLR_EXCEPTION_RECORD,
  228. // Pool
  229. DEBUG_FLR_POOL_ADDRESS = 0x400,
  230. DEBUG_FLR_SPECIAL_POOL_CORRUPTION_TYPE,
  231. DEBUG_FLR_CORRUPTING_POOL_ADDRESS,
  232. DEBUG_FLR_CORRUPTING_POOL_TAG,
  233. DEBUG_FLR_FREED_POOL_TAG,
  234. // Filesystem
  235. DEBUG_FLR_FILE_ID = 0x500,
  236. DEBUG_FLR_FILE_LINE,
  237. // bugcheck data
  238. DEBUG_FLR_BUGCHECK_STR = 0x600,
  239. DEBUG_FLR_BUGCHECK_SPECIFIER,
  240. // Constant values / exception code / bugcheck subtypes etc
  241. DEBUG_FLR_DRIVER_VERIFIER_IO_VIOLATION_TYPE = 0x1000,
  242. DEBUG_FLR_EXCEPTION_CODE,
  243. DEBUG_FLR_SPARE2,
  244. DEBUG_FLR_IOCONTROL_CODE,
  245. DEBUG_FLR_MM_INTERNAL_CODE,
  246. DEBUG_FLR_DRVPOWERSTATE_SUBCODE,
  247. DEBUG_FLR_STATUS_CODE,
  248. // Notification IDs, values under it doesn't have significance
  249. DEBUG_FLR_CORRUPT_MODULE_LIST = 0x2000,
  250. DEBUG_FLR_BAD_STACK,
  251. DEBUG_FLR_ZEROED_STACK,
  252. DEBUG_FLR_WRONG_SYMBOLS,
  253. DEBUG_FLR_FOLLOWUP_DRIVER_ONLY, //bugcheckEA indicates a general driver failure
  254. DEBUG_FLR_UNUSED001, //bucket include timestamp, so each drive is tracked
  255. DEBUG_FLR_CPU_OVERCLOCKED,
  256. DEBUG_FLR_POSSIBLE_INVALID_CONTROL_TRANSFER,
  257. DEBUG_FLR_POISONED_TB,
  258. DEBUG_FLR_UNKNOWN_MODULE,
  259. DEBUG_FLR_ANALYZAABLE_POOL_CORRUPTION,
  260. DEBUG_FLR_SINGLE_BIT_ERROR,
  261. DEBUG_FLR_TWO_BIT_ERROR,
  262. DEBUG_FLR_INVALID_KERNEL_CONTEXT,
  263. DEBUG_FLR_DISK_HARDWARE_ERROR,
  264. DEBUG_FLR_SHOW_ERRORLOG,
  265. DEBUG_FLR_MANUAL_BREAKIN,
  266. // Known analyzed failure cause or problem that bucketing could be
  267. // applied against.
  268. DEBUG_FLR_POOL_CORRUPTOR = 0x3000,
  269. DEBUG_FLR_MEMORY_CORRUPTOR,
  270. DEBUG_FLR_UNALIGNED_STACK_POINTER,
  271. DEBUG_FLR_OLD_OS_VERSION,
  272. DEBUG_FLR_BUGCHECKING_DRIVER,
  273. DEBUG_FLR_SOLUTION_ID,
  274. DEBUG_FLR_DEFAULT_SOLUTION_ID,
  275. DEBUG_FLR_SOLUTION_TYPE,
  276. // Strings.
  277. DEBUG_FLR_BUCKET_ID = 0x10000,
  278. DEBUG_FLR_IMAGE_NAME,
  279. DEBUG_FLR_SYMBOL_NAME,
  280. DEBUG_FLR_FOLLOWUP_NAME,
  281. DEBUG_FLR_STACK_COMMAND,
  282. DEBUG_FLR_STACK_TEXT,
  283. DEBUG_FLR_INTERNAL_SOLUTION_TEXT,
  284. DEBUG_FLR_MODULE_NAME,
  285. DEBUG_FLR_INTERNAL_RAID_BUG,
  286. DEBUG_FLR_FIXED_IN_OSVERSION,
  287. DEBUG_FLR_DEFAULT_BUCKET_ID,
  288. // User-mode specific stuff
  289. DEBUG_FLR_USERMODE_DATA = 0x100000,
  290. // Culprit module
  291. DEBUG_FLR_FAULTING_IP = 0x80000000, // Instruction where failure occurred
  292. DEBUG_FLR_FAULTING_MODULE,
  293. DEBUG_FLR_IMAGE_TIMESTAMP,
  294. DEBUG_FLR_FOLLOWUP_IP,
  295. // To get faulting stack
  296. DEBUG_FLR_FAULTING_THREAD = 0xc0000000,
  297. DEBUG_FLR_CONTEXT,
  298. DEBUG_FLR_TRAP_FRAME,
  299. DEBUG_FLR_TSS,
  300. DEBUG_FLR_MASK_ALL = 0xFFFFFFFF
  301. } DEBUG_FLR_PARAM_TYPE;
  302. //----------------------------------------------------------------------------
  303. //
  304. // A failure analysis is a dynamic buffer of tagged blobs. Values
  305. // are accessed through the Get/Set methods.
  306. //
  307. // Entries are always fully aligned.
  308. //
  309. // Set methods throw E_OUTOFMEMORY exceptions when the data
  310. // buffer cannot be extended.
  311. //
  312. //----------------------------------------------------------------------------
  313. typedef DEBUG_FLR_PARAM_TYPE FA_TAG;
  314. typedef struct _FA_ENTRY
  315. {
  316. FA_TAG Tag;
  317. USHORT FullSize;
  318. USHORT DataSize;
  319. } FA_ENTRY, *PFA_ENTRY;
  320. #define FA_ENTRY_DATA(Type, Entry) ((Type)((Entry) + 1))
  321. /* ed0de363-451f-4943-820c-62dccdfa7e6d */
  322. DEFINE_GUID(IID_IDebugFailureAnalysis, 0xed0de363, 0x451f, 0x4943,
  323. 0x82, 0x0c, 0x62, 0xdc, 0xcd, 0xfa, 0x7e, 0x6d);
  324. typedef interface DECLSPEC_UUID("ed0de363-451f-4943-820c-62dccdfa7e6d")
  325. IDebugFailureAnalysis* PDEBUG_FAILURE_ANALYSIS;
  326. #undef INTERFACE
  327. #define INTERFACE IDebugFailureAnalysis
  328. DECLARE_INTERFACE_(IDebugFailureAnalysis, IUnknown)
  329. {
  330. // IUnknown.
  331. STDMETHOD(QueryInterface)(
  332. THIS_
  333. IN REFIID InterfaceId,
  334. OUT PVOID* Interface
  335. ) PURE;
  336. STDMETHOD_(ULONG, AddRef)(
  337. THIS
  338. ) PURE;
  339. STDMETHOD_(ULONG, Release)(
  340. THIS
  341. ) PURE;
  342. // IDebugFailureAnalysis.
  343. STDMETHOD_(ULONG, GetFailureClass)(
  344. THIS
  345. ) PURE;
  346. STDMETHOD_(DEBUG_FAILURE_TYPE, GetFailureType)(
  347. THIS
  348. ) PURE;
  349. STDMETHOD_(ULONG, GetFailureCode)(
  350. THIS
  351. ) PURE;
  352. STDMETHOD_(PFA_ENTRY, Get)(
  353. THIS_
  354. FA_TAG Tag
  355. ) PURE;
  356. STDMETHOD_(PFA_ENTRY, GetNext)(
  357. THIS_
  358. PFA_ENTRY Entry,
  359. FA_TAG Tag,
  360. FA_TAG TagMask
  361. ) PURE;
  362. STDMETHOD_(PFA_ENTRY, GetString)(
  363. THIS_
  364. FA_TAG Tag,
  365. PSTR Str,
  366. ULONG MaxSize
  367. ) PURE;
  368. STDMETHOD_(PFA_ENTRY, GetBuffer)(
  369. THIS_
  370. FA_TAG Tag,
  371. PVOID Buf,
  372. ULONG Size
  373. ) PURE;
  374. STDMETHOD_(PFA_ENTRY, GetUlong)(
  375. THIS_
  376. FA_TAG Tag,
  377. PULONG Value
  378. ) PURE;
  379. STDMETHOD_(PFA_ENTRY, GetUlong64)(
  380. THIS_
  381. FA_TAG Tag,
  382. PULONG64 Value
  383. ) PURE;
  384. STDMETHOD_(PFA_ENTRY, NextEntry)(
  385. THIS_
  386. PFA_ENTRY Entry
  387. ) PURE;
  388. };
  389. #define FAILURE_ANALYSIS_NO_DB_LOOKUP 0x0001
  390. #define FAILURE_ANALYSIS_VERBOSE 0x0002
  391. typedef HRESULT
  392. (WINAPI* EXT_GET_FAILURE_ANALYSIS)(
  393. IN PDEBUG_CLIENT Client,
  394. IN ULONG Flags,
  395. OUT PDEBUG_FAILURE_ANALYSIS* Analysis
  396. );
  397. /*****************************************************************************
  398. Target info
  399. *****************************************************************************/
  400. typedef enum _TARGET_MODE {
  401. NoTarget = DEBUG_CLASS_UNINITIALIZED,
  402. KernelModeTarget = DEBUG_CLASS_KERNEL,
  403. UserModeTarget = DEBUG_CLASS_USER_WINDOWS,
  404. NumModes,
  405. } TARGET_MODE;
  406. typedef enum _OS_TYPE {
  407. WIN_95,
  408. WIN_98,
  409. WIN_ME,
  410. WIN_NT4,
  411. WIN_NT5,
  412. WIN_NT5_1,
  413. NUM_WIN,
  414. } OS_TYPE;
  415. //
  416. // Info about OS installed
  417. //
  418. typedef struct _OS_INFO {
  419. OS_TYPE Type; // OS type such as NT4, NT5 etc.
  420. union {
  421. struct {
  422. ULONG Major;
  423. ULONG Minor;
  424. } Version; // 64 bit OS version number
  425. ULONG64 Ver64;
  426. };
  427. ULONG ProductType; // NT, LanMan or Server
  428. ULONG Suite; // OS flavour - per, SmallBuisness etc.
  429. struct {
  430. ULONG Checked:1; // If its a checked build
  431. ULONG Pae:1; // True for Pae systems
  432. ULONG MultiProc:1; // True for multiproc enabled OS
  433. ULONG Reserved:29;
  434. } s;
  435. ULONG SrvPackNumber; // Service pack number of OS
  436. TCHAR Language[30]; // OS language
  437. TCHAR OsString[64]; // Build string
  438. TCHAR ServicePackString[64];
  439. // Service pack string
  440. } OS_INFO, *POS_INFO;
  441. typedef struct _CPU_INFO {
  442. ULONG Type; // Processor type as in IMAGE_FILE_MACHINE types
  443. ULONG NumCPUs; // Actual number of Processors
  444. ULONG CurrentProc; // Current processor
  445. DEBUG_PROCESSOR_IDENTIFICATION_ALL ProcInfo[32];
  446. } CPU_INFO, *PCPU_INFO;
  447. typedef enum _DATA_SOURCE {
  448. Debugger,
  449. Stress,
  450. } DATA_SOURCE;
  451. #define MAX_STACK_IN_BYTES 4096
  452. typedef struct _TARGET_DEBUG_INFO {
  453. ULONG SizeOfStruct;
  454. ULONG64 Id; // ID unique to this debug info
  455. DATA_SOURCE Source; // Source where this came from
  456. ULONG64 EntryDate; // Date created
  457. ULONG64 SysUpTime; // System Up time
  458. ULONG64 AppUpTime; // Application up time
  459. ULONG64 CrashTime; // Time system / app crashed
  460. TARGET_MODE Mode; // Kernel / User mode
  461. OS_INFO OsInfo; // OS details
  462. CPU_INFO Cpu; // Processor details
  463. TCHAR DumpFile[MAX_PATH]; // Dump file name if its a dump
  464. PVOID FailureData; // Failure data collected by debugger
  465. CHAR StackTr[MAX_STACK_IN_BYTES];
  466. // Contains stacks, with frames separated by newline
  467. } TARGET_DEBUG_INFO, *PTARGET_DEBUG_INFO;
  468. // GetTargetInfo
  469. typedef HRESULT
  470. (WINAPI* EXT_TARGET_INFO)(
  471. PDEBUG_CLIENT Client,
  472. PTARGET_DEBUG_INFO pTargetInfo
  473. );
  474. typedef struct _DEBUG_DECODE_ERROR {
  475. ULONG SizeOfStruct; // Must be == sizeof(DEBUG_DECODE_ERROR)
  476. ULONG Code; // Error code to be decoded
  477. BOOL TreatAsStatus; // True if code is to be treated as Status
  478. CHAR Source[64]; // Source from where we got decoded message
  479. CHAR Message[MAX_PATH]; // Message string for error code
  480. } DEBUG_DECODE_ERROR, *PDEBUG_DECODE_ERROR;
  481. /*
  482. Decodes and prints the given error code - DecodeError
  483. */
  484. typedef VOID
  485. (WINAPI *EXT_DECODE_ERROR)(
  486. PDEBUG_DECODE_ERROR pDecodeError
  487. );
  488. //
  489. // ext.dll: GetTriageFollowupFromSymbol
  490. //
  491. // This returns owner info from a given symbol name
  492. //
  493. typedef struct _DEBUG_TRIAGE_FOLLOWUP_INFO {
  494. ULONG SizeOfStruct; // Must be == sizeof (DEBUG_TRIAGE_FOLLOWUP_INFO)
  495. ULONG OwnerNameSize; // Size of allocated buffer
  496. PCHAR OwnerName; // Followup owner name returned in this
  497. // Caller should initialize the name buffer
  498. } DEBUG_TRIAGE_FOLLOWUP_INFO, *PDEBUG_TRIAGE_FOLLOWUP_INFO;
  499. #define TRIAGE_FOLLOWUP_FAIL 0
  500. #define TRIAGE_FOLLOWUP_IGNORE 1
  501. #define TRIAGE_FOLLOWUP_DEFAULT 2
  502. #define TRIAGE_FOLLOWUP_SUCCESS 3
  503. typedef DWORD
  504. (WINAPI *EXT_TRIAGE_FOLLOWUP)(
  505. IN PDEBUG_CLIENT Client,
  506. IN PSTR SymbolName,
  507. OUT PDEBUG_TRIAGE_FOLLOWUP_INFO OwnerInfo
  508. );
  509. #endif // _EXTAPIS_H
  510. //
  511. // Function exported fron ntsdexts.dll
  512. //
  513. typedef HRESULT
  514. (WINAPI *EXT_GET_HANDLE_TRACE)(
  515. PDEBUG_CLIENT Client,
  516. ULONG TraceType,
  517. ULONG StartIndex,
  518. PULONG64 HandleValue,
  519. PULONG64 StackFunctions,
  520. ULONG StackTraceSize
  521. );
  522. #endif // _EXTFNS_H