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.

480 lines
13 KiB

  1. //----------------------------------------------------------------------------
  2. //
  3. // Low-level debugging service interfaces.
  4. //
  5. // Copyright (C) Microsoft Corporation, 1999-2002.
  6. //
  7. //----------------------------------------------------------------------------
  8. #ifndef __DBGSVC_H__
  9. #define __DBGSVC_H__
  10. #include <stdarg.h>
  11. #include <objbase.h>
  12. #ifdef __cplusplus
  13. extern "C" {
  14. #endif
  15. //----------------------------------------------------------------------------
  16. //
  17. // GUIDs and interface forward declarations.
  18. //
  19. //----------------------------------------------------------------------------
  20. /* a7ba24c4-e4fb-4625-a8fc-b1cb1fd51f53 */
  21. DEFINE_GUID(IID_IUserDebugServices, 0xa7ba24c4, 0xe4fb, 0x4625,
  22. 0xa8, 0xfc, 0xb1, 0xcb, 0x1f, 0xd5, 0x1f, 0x53);
  23. typedef interface DECLSPEC_UUID("a7ba24c4-e4fb-4625-a8fc-b1cb1fd51f53")
  24. IUserDebugServices* PUSER_DEBUG_SERVICES;
  25. //----------------------------------------------------------------------------
  26. //
  27. // IUserDebugServices.
  28. //
  29. //----------------------------------------------------------------------------
  30. // The service implementation does not implement Insert/RemoveCodeBreakpoints
  31. // directly, instead it is the caller's responsibility to handle them
  32. // via break instruction insertion and removal.
  33. #define DBGSVC_GENERIC_CODE_BREAKPOINTS 0x00000001
  34. // Handles returned in create process and create thread events
  35. // are not automatically closed. Instead it is the responsibility
  36. // of the caller to close them when they are no longer needed.
  37. #define DBGSVC_CLOSE_PROC_THREAD_HANDLES 0x00000002
  38. // The service implementation does not implement Insert/RemoveDataBreakpoints
  39. // directly, instead it is the caller's responsibility to handle them
  40. // via process register manipulation.
  41. #define DBGSVC_GENERIC_DATA_BREAKPOINTS 0x00000004
  42. // GetProcessInfo flags.
  43. #define DBGSVC_PROC_INFO_NO_SUSPEND 0x00000001
  44. // Handle to ULONG64 and back.
  45. #define SERVICE_HANDLE(OsHandle) ((ULONG64)(OsHandle))
  46. #define OS_HANDLE(SvcHandle) ((HANDLE)(ULONG_PTR)(SvcHandle))
  47. typedef struct _USER_THREAD_INFO
  48. {
  49. ULONG64 Handle;
  50. ULONG Id;
  51. ULONG Reserved;
  52. } USER_THREAD_INFO, *PUSER_THREAD_INFO;
  53. #undef INTERFACE
  54. #define INTERFACE IUserDebugServices
  55. DECLARE_INTERFACE_(IUserDebugServices, IUnknown)
  56. {
  57. // IUnknown.
  58. STDMETHOD(QueryInterface)(
  59. THIS_
  60. IN REFIID InterfaceId,
  61. OUT PVOID* Interface
  62. ) PURE;
  63. STDMETHOD_(ULONG, AddRef)(
  64. THIS
  65. ) PURE;
  66. STDMETHOD_(ULONG, Release)(
  67. THIS
  68. ) PURE;
  69. // IUserDebugServices.
  70. STDMETHOD(Initialize)(
  71. THIS_
  72. OUT PULONG Flags
  73. ) PURE;
  74. STDMETHOD(Uninitialize)(
  75. THIS_
  76. IN BOOL Global
  77. ) PURE;
  78. STDMETHOD(GetTargetInfo)(
  79. THIS_
  80. OUT PULONG MachineType,
  81. OUT PULONG NumberProcessors,
  82. OUT PULONG PlatformId,
  83. OUT PULONG BuildNumber,
  84. OUT PULONG CheckedBuild,
  85. OUT PSTR CsdString,
  86. IN ULONG CsdStringSize,
  87. OUT PSTR BuildString,
  88. IN ULONG BuildStringSize,
  89. OUT PULONG ProductType,
  90. OUT PULONG SuiteMask
  91. ) PURE;
  92. STDMETHOD(GetConnectionInfo)(
  93. THIS_
  94. OUT OPTIONAL PSTR MachineName,
  95. IN ULONG MachineNameSize,
  96. OUT OPTIONAL PSTR ClientIdentity,
  97. IN ULONG ClientIdentitySize,
  98. OUT OPTIONAL PSTR TransportIdentity,
  99. IN ULONG TransportIdentitySize
  100. ) PURE;
  101. STDMETHOD(GetProcessorId)(
  102. THIS_
  103. OUT PVOID Buffer,
  104. IN ULONG BufferSize,
  105. OUT PULONG BufferUsed
  106. ) PURE;
  107. STDMETHOD(GetGenericProcessorFeatures)(
  108. THIS_
  109. OUT OPTIONAL /* size_is(FeaturesSize) */ PULONG64 Features,
  110. IN ULONG FeaturesSize,
  111. OUT OPTIONAL PULONG Used
  112. ) PURE;
  113. STDMETHOD(GetSpecificProcessorFeatures)(
  114. THIS_
  115. OUT OPTIONAL /* size_is(FeaturesSize) */ PULONG64 Features,
  116. IN ULONG FeaturesSize,
  117. OUT OPTIONAL PULONG Used
  118. ) PURE;
  119. STDMETHOD(GetFileVersionInformationA)(
  120. THIS_
  121. IN PCWSTR File,
  122. IN PCSTR Item,
  123. OUT OPTIONAL PVOID Buffer,
  124. IN ULONG BufferSize,
  125. OUT OPTIONAL PULONG VerInfoSize
  126. ) PURE;
  127. STDMETHOD(GetProcessIds)(
  128. THIS_
  129. OUT OPTIONAL /* size_is(Count) */ PULONG Ids,
  130. IN ULONG Count,
  131. OUT OPTIONAL PULONG ActualCount
  132. ) PURE;
  133. STDMETHOD(GetProcessIdByExecutableNameW)(
  134. THIS_
  135. IN PCWSTR ExeName,
  136. IN ULONG Flags,
  137. OUT PULONG Id
  138. ) PURE;
  139. STDMETHOD(GetProcessDescriptionW)(
  140. THIS_
  141. IN ULONG ProcessId,
  142. IN ULONG Flags,
  143. OUT OPTIONAL PWSTR ExeName,
  144. IN ULONG ExeNameSize,
  145. OUT OPTIONAL PULONG ActualExeNameSize,
  146. OUT OPTIONAL PWSTR Description,
  147. IN ULONG DescriptionSize,
  148. OUT OPTIONAL PULONG ActualDescriptionSize
  149. ) PURE;
  150. STDMETHOD(GetProcessInfo)(
  151. THIS_
  152. IN ULONG ProcessId,
  153. IN ULONG Flags,
  154. OUT OPTIONAL PULONG64 Handle,
  155. OUT OPTIONAL /* size_is(InfoCount) */ PUSER_THREAD_INFO Threads,
  156. IN ULONG InfoCount,
  157. OUT OPTIONAL PULONG ThreadCount
  158. ) PURE;
  159. STDMETHOD(AttachProcess)(
  160. THIS_
  161. IN ULONG ProcessId,
  162. IN ULONG AttachFlags,
  163. OUT PULONG64 ProcessHandle,
  164. OUT PULONG ProcessOptions
  165. ) PURE;
  166. STDMETHOD(DetachProcess)(
  167. THIS_
  168. IN ULONG ProcessId
  169. ) PURE;
  170. STDMETHOD(CreateProcessW)(
  171. THIS_
  172. IN PWSTR CommandLine,
  173. IN ULONG CreateFlags,
  174. IN BOOL InheritHandles,
  175. IN OPTIONAL PWSTR CurrentDir,
  176. OUT PULONG ProcessId,
  177. OUT PULONG ThreadId,
  178. OUT PULONG64 ProcessHandle,
  179. OUT PULONG64 ThreadHandle
  180. ) PURE;
  181. STDMETHOD(TerminateProcess)(
  182. THIS_
  183. IN ULONG64 Process,
  184. IN ULONG ExitCode
  185. ) PURE;
  186. STDMETHOD(AbandonProcess)(
  187. THIS_
  188. IN ULONG64 Process
  189. ) PURE;
  190. STDMETHOD(GetProcessExitCode)(
  191. THIS_
  192. IN ULONG64 Process,
  193. OUT PULONG ExitCode
  194. ) PURE;
  195. STDMETHOD(CloseHandle)(
  196. THIS_
  197. IN ULONG64 Handle
  198. ) PURE;
  199. STDMETHOD(SetProcessOptions)(
  200. THIS_
  201. IN ULONG64 Process,
  202. IN ULONG Options
  203. ) PURE;
  204. STDMETHOD(SetDebugObjectOptions)(
  205. THIS_
  206. IN ULONG64 DebugObject,
  207. IN ULONG Options
  208. ) PURE;
  209. STDMETHOD(GetProcessDebugObject)(
  210. THIS_
  211. IN ULONG64 Process,
  212. OUT PULONG64 DebugObject
  213. ) PURE;
  214. STDMETHOD(DuplicateHandle)(
  215. THIS_
  216. IN ULONG64 InProcess,
  217. IN ULONG64 InHandle,
  218. IN ULONG64 OutProcess,
  219. IN ULONG DesiredAccess,
  220. IN ULONG Inherit,
  221. IN ULONG Options,
  222. OUT PULONG64 OutHandle
  223. ) PURE;
  224. STDMETHOD(ReadVirtual)(
  225. THIS_
  226. IN ULONG64 Process,
  227. IN ULONG64 Offset,
  228. OUT PVOID Buffer,
  229. IN ULONG BufferSize,
  230. OUT OPTIONAL PULONG BytesRead
  231. ) PURE;
  232. STDMETHOD(WriteVirtual)(
  233. THIS_
  234. IN ULONG64 Process,
  235. IN ULONG64 Offset,
  236. IN PVOID Buffer,
  237. IN ULONG BufferSize,
  238. OUT OPTIONAL PULONG BytesWritten
  239. ) PURE;
  240. STDMETHOD(QueryVirtual)(
  241. THIS_
  242. IN ULONG64 Process,
  243. IN ULONG64 Offset,
  244. OUT PVOID Buffer,
  245. IN ULONG BufferSize,
  246. OUT OPTIONAL PULONG BufferUsed
  247. ) PURE;
  248. STDMETHOD(ProtectVirtual)(
  249. THIS_
  250. IN ULONG64 Process,
  251. IN ULONG64 Offset,
  252. IN ULONG64 Size,
  253. IN ULONG NewProtect,
  254. OUT PULONG OldProtect
  255. ) PURE;
  256. STDMETHOD(AllocVirtual)(
  257. THIS_
  258. IN ULONG64 Process,
  259. IN ULONG64 Offset,
  260. IN ULONG64 Size,
  261. IN ULONG Type,
  262. IN ULONG Protect,
  263. OUT PULONG64 AllocOffset
  264. ) PURE;
  265. STDMETHOD(FreeVirtual)(
  266. THIS_
  267. IN ULONG64 Process,
  268. IN ULONG64 Offset,
  269. IN ULONG64 Size,
  270. IN ULONG Type
  271. ) PURE;
  272. STDMETHOD(ReadHandleData)(
  273. THIS_
  274. IN ULONG64 Process,
  275. IN ULONG64 Handle,
  276. IN ULONG DataType,
  277. OUT OPTIONAL PVOID Buffer,
  278. IN ULONG BufferSize,
  279. OUT OPTIONAL PULONG DataSize
  280. ) PURE;
  281. STDMETHOD(SuspendThreads)(
  282. THIS_
  283. IN ULONG Count,
  284. IN /* size_is(Count) */ PULONG64 Threads,
  285. OUT OPTIONAL /* size_is(Count) */ PULONG SuspendCounts
  286. ) PURE;
  287. STDMETHOD(ResumeThreads)(
  288. THIS_
  289. IN ULONG Count,
  290. IN /* size_is(Count) */ PULONG64 Threads,
  291. OUT OPTIONAL /* size_is(Count) */ PULONG SuspendCounts
  292. ) PURE;
  293. STDMETHOD(GetThreadStartAddress)(
  294. THIS_
  295. IN ULONG64 Thread,
  296. OUT PULONG64 Offset
  297. ) PURE;
  298. STDMETHOD(GetContext)(
  299. THIS_
  300. IN ULONG64 Thread,
  301. IN ULONG Flags,
  302. IN ULONG FlagsOffset,
  303. OUT PVOID Context,
  304. IN ULONG ContextSize,
  305. OUT OPTIONAL PULONG ContextUsed
  306. ) PURE;
  307. STDMETHOD(SetContext)(
  308. THIS_
  309. IN ULONG64 Thread,
  310. IN PVOID Context,
  311. IN ULONG ContextSize,
  312. OUT OPTIONAL PULONG ContextUsed
  313. ) PURE;
  314. STDMETHOD(GetProcessDataOffset)(
  315. THIS_
  316. IN ULONG64 Process,
  317. OUT PULONG64 Offset
  318. ) PURE;
  319. STDMETHOD(GetThreadDataOffset)(
  320. THIS_
  321. IN ULONG64 Thread,
  322. OUT PULONG64 Offset
  323. ) PURE;
  324. STDMETHOD(DescribeSelector)(
  325. THIS_
  326. IN ULONG64 Thread,
  327. IN ULONG Selector,
  328. OUT PVOID Buffer,
  329. IN ULONG BufferSize,
  330. OUT OPTIONAL PULONG BufferUsed
  331. ) PURE;
  332. STDMETHOD(GetCurrentTimeDateN)(
  333. THIS_
  334. OUT PULONG64 TimeDate
  335. ) PURE;
  336. STDMETHOD(GetCurrentSystemUpTimeN)(
  337. THIS_
  338. OUT PULONG64 UpTime
  339. ) PURE;
  340. STDMETHOD(GetProcessUpTimeN)(
  341. THIS_
  342. IN ULONG64 Process,
  343. OUT PULONG64 UpTime
  344. ) PURE;
  345. STDMETHOD(GetProcessTimes)(
  346. THIS_
  347. IN ULONG64 Process,
  348. OUT PULONG64 Create,
  349. OUT PULONG64 Exit,
  350. OUT PULONG64 Kernel,
  351. OUT PULONG64 User
  352. ) PURE;
  353. STDMETHOD(GetThreadTimes)(
  354. THIS_
  355. IN ULONG64 Thread,
  356. OUT PULONG64 Create,
  357. OUT PULONG64 Exit,
  358. OUT PULONG64 Kernel,
  359. OUT PULONG64 User
  360. ) PURE;
  361. STDMETHOD(RequestBreakIn)(
  362. THIS_
  363. IN ULONG64 Process
  364. ) PURE;
  365. STDMETHOD(WaitForEvent)(
  366. THIS_
  367. IN ULONG Timeout,
  368. OUT PVOID Buffer,
  369. IN ULONG BufferSize,
  370. OUT OPTIONAL PULONG BufferUsed
  371. ) PURE;
  372. STDMETHOD(ContinueEvent)(
  373. THIS_
  374. IN ULONG ContinueStatus
  375. ) PURE;
  376. STDMETHOD(InsertCodeBreakpoint)(
  377. THIS_
  378. IN ULONG64 Process,
  379. IN ULONG64 Offset,
  380. IN ULONG MachineType,
  381. OUT PVOID Storage,
  382. IN ULONG StorageSize
  383. ) PURE;
  384. STDMETHOD(RemoveCodeBreakpoint)(
  385. THIS_
  386. IN ULONG64 Process,
  387. IN ULONG64 Offset,
  388. IN ULONG MachineType,
  389. IN PVOID Storage,
  390. IN ULONG StorageSize
  391. ) PURE;
  392. STDMETHOD(InsertDataBreakpoint)(
  393. THIS_
  394. IN ULONG64 Process,
  395. IN ULONG64 Thread,
  396. IN ULONG64 Offset,
  397. IN ULONG AccessLength,
  398. IN ULONG AccessType,
  399. IN ULONG MachineType
  400. ) PURE;
  401. STDMETHOD(RemoveDataBreakpoint)(
  402. THIS_
  403. IN ULONG64 Process,
  404. IN ULONG64 Thread,
  405. IN ULONG64 Offset,
  406. IN ULONG AccessLength,
  407. IN ULONG AccessType,
  408. IN ULONG MachineType
  409. ) PURE;
  410. STDMETHOD(GetLastDataBreakpointHit)(
  411. THIS_
  412. IN ULONG64 Process,
  413. IN ULONG64 Thread,
  414. OUT PULONG64 Address,
  415. OUT PULONG AccessType
  416. ) PURE;
  417. STDMETHOD(GetFunctionTableListHead)(
  418. THIS_
  419. IN ULONG64 Process,
  420. OUT PULONG64 Offset
  421. ) PURE;
  422. STDMETHOD(GetOutOfProcessFunctionTableW)(
  423. THIS_
  424. IN ULONG64 Process,
  425. IN PWSTR Dll,
  426. IN ULONG64 LoadedDllHandle,
  427. IN ULONG64 Table,
  428. IN OPTIONAL PVOID Buffer,
  429. IN ULONG BufferSize,
  430. OUT OPTIONAL PULONG TableSize,
  431. OUT OPTIONAL PULONG64 UsedDllHandle
  432. ) PURE;
  433. STDMETHOD(GetUnloadedModuleListHead)(
  434. THIS_
  435. IN ULONG64 Process,
  436. OUT PULONG64 Offset
  437. ) PURE;
  438. STDMETHOD(LoadLibrary)(
  439. THIS_
  440. IN PWSTR Path,
  441. OUT PULONG64 Handle
  442. ) PURE;
  443. STDMETHOD(FreeLibrary)(
  444. THIS_
  445. IN ULONG64 Handle
  446. ) PURE;
  447. };
  448. #ifdef __cplusplus
  449. };
  450. #endif
  451. #endif // #ifndef __DBGSVC_H__