Source code of Windows XP (NT5)
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.

391 lines
9.8 KiB

  1. //----------------------------------------------------------------------------
  2. //
  3. // Low-level debugging service interface implementations.
  4. //
  5. // Copyright (C) Microsoft Corporation, 2000.
  6. //
  7. //----------------------------------------------------------------------------
  8. #ifndef __DBGSVC_HPP__
  9. #define __DBGSVC_HPP__
  10. //----------------------------------------------------------------------------
  11. //
  12. // UserDebugServices.
  13. //
  14. //----------------------------------------------------------------------------
  15. class UserDebugServices
  16. : public IUserDebugServices,
  17. public DbgRpcClientObject
  18. {
  19. public:
  20. UserDebugServices(void);
  21. virtual ~UserDebugServices(void);
  22. // IUnknown.
  23. STDMETHOD(QueryInterface)(
  24. THIS_
  25. IN REFIID InterfaceId,
  26. OUT PVOID* Interface
  27. );
  28. STDMETHOD_(ULONG, AddRef)(
  29. THIS
  30. );
  31. STDMETHOD_(ULONG, Release)(
  32. THIS
  33. );
  34. // IUserDebugServices.
  35. STDMETHOD(Initialize)(
  36. THIS_
  37. OUT PULONG Flags
  38. );
  39. STDMETHOD(Uninitialize)(
  40. THIS_
  41. IN BOOL Global
  42. );
  43. // DbgRpcClientObject.
  44. virtual HRESULT Initialize(PSTR Identity, PVOID* Interface);
  45. virtual void Finalize(void);
  46. virtual void Uninitialize(void);
  47. // UserDebugServices.
  48. ULONG m_Refs;
  49. BOOL m_Initialized;
  50. };
  51. //----------------------------------------------------------------------------
  52. //
  53. // LiveUserDebugServices.
  54. //
  55. //----------------------------------------------------------------------------
  56. class LiveUserDebugServices
  57. : public UserDebugServices
  58. {
  59. public:
  60. LiveUserDebugServices(BOOL Remote);
  61. virtual ~LiveUserDebugServices(void);
  62. // IUserDebugServices.
  63. STDMETHOD(Initialize)(
  64. THIS_
  65. OUT PULONG Flags
  66. );
  67. STDMETHOD(Uninitialize)(
  68. THIS_
  69. IN BOOL Global
  70. );
  71. STDMETHOD(GetTargetInfo)(
  72. THIS_
  73. OUT PULONG MachineType,
  74. OUT PULONG NumberProcessors,
  75. OUT PULONG PlatformId,
  76. OUT PULONG BuildNumber,
  77. OUT PULONG CheckedBuild,
  78. OUT PSTR CsdString,
  79. IN ULONG CsdStringSize,
  80. OUT PSTR BuildString,
  81. IN ULONG BuildStringSize
  82. );
  83. STDMETHOD(GetProcessorId)(
  84. THIS_
  85. OUT PVOID Buffer,
  86. IN ULONG BufferSize,
  87. OUT PULONG BufferUsed
  88. );
  89. STDMETHOD(GetFileVersionInformation)(
  90. THIS_
  91. IN PCSTR File,
  92. IN PCSTR Item,
  93. OUT OPTIONAL PVOID Buffer,
  94. IN ULONG BufferSize,
  95. OUT OPTIONAL PULONG VerInfoSize
  96. );
  97. STDMETHOD(GetProcessIds)(
  98. THIS_
  99. OUT OPTIONAL /* size_is(Count) */ PULONG Ids,
  100. IN ULONG Count,
  101. OUT OPTIONAL PULONG ActualCount
  102. );
  103. STDMETHOD(GetProcessIdByExecutableName)(
  104. THIS_
  105. IN PCSTR ExeName,
  106. IN ULONG Flags,
  107. OUT PULONG Id
  108. );
  109. STDMETHOD(GetProcessDescription)(
  110. THIS_
  111. IN ULONG ProcessId,
  112. IN ULONG Flags,
  113. OUT OPTIONAL PSTR ExeName,
  114. IN ULONG ExeNameSize,
  115. OUT OPTIONAL PULONG ActualExeNameSize,
  116. OUT OPTIONAL PSTR Description,
  117. IN ULONG DescriptionSize,
  118. OUT OPTIONAL PULONG ActualDescriptionSize
  119. );
  120. STDMETHOD(GetProcessInfo)(
  121. THIS_
  122. IN ULONG ProcessId,
  123. OUT OPTIONAL PULONG64 Handle,
  124. OUT OPTIONAL /* size_is(InfoCount) */ PUSER_THREAD_INFO Threads,
  125. IN ULONG InfoCount,
  126. OUT OPTIONAL PULONG ThreadCount
  127. );
  128. STDMETHOD(AttachProcess)(
  129. THIS_
  130. IN ULONG ProcessId,
  131. IN ULONG AttachFlags,
  132. OUT PULONG64 ProcessHandle,
  133. OUT PULONG ProcessOptions
  134. );
  135. STDMETHOD(DetachProcess)(
  136. THIS_
  137. IN ULONG ProcessId
  138. );
  139. STDMETHOD(CreateProcess)(
  140. THIS_
  141. IN PSTR CommandLine,
  142. IN ULONG CreateFlags,
  143. OUT PULONG ProcessId,
  144. OUT PULONG ThreadId,
  145. OUT PULONG64 ProcessHandle,
  146. OUT PULONG64 ThreadHandle
  147. );
  148. STDMETHOD(TerminateProcess)(
  149. THIS_
  150. IN ULONG64 Process,
  151. IN ULONG ExitCode
  152. );
  153. STDMETHOD(AbandonProcess)(
  154. THIS_
  155. IN ULONG64 Process
  156. );
  157. STDMETHOD(GetProcessExitCode)(
  158. THIS_
  159. IN ULONG64 Process,
  160. OUT PULONG ExitCode
  161. );
  162. STDMETHOD(CloseHandle)(
  163. THIS_
  164. IN ULONG64 Handle
  165. );
  166. STDMETHOD(SetProcessOptions)(
  167. THIS_
  168. IN ULONG64 Process,
  169. IN ULONG Options
  170. );
  171. STDMETHOD(SetDebugObjectOptions)(
  172. THIS_
  173. IN ULONG64 DebugObject,
  174. IN ULONG Options
  175. );
  176. STDMETHOD(GetProcessDebugObject)(
  177. THIS_
  178. IN ULONG64 Process,
  179. OUT PULONG64 DebugObject
  180. );
  181. STDMETHOD(DuplicateHandle)(
  182. THIS_
  183. IN ULONG64 InProcess,
  184. IN ULONG64 InHandle,
  185. IN ULONG64 OutProcess,
  186. IN ULONG DesiredAccess,
  187. IN ULONG Inherit,
  188. IN ULONG Options,
  189. OUT PULONG64 OutHandle
  190. );
  191. STDMETHOD(ReadVirtual)(
  192. THIS_
  193. IN ULONG64 Process,
  194. IN ULONG64 Offset,
  195. OUT PVOID Buffer,
  196. IN ULONG BufferSize,
  197. OUT OPTIONAL PULONG BytesRead
  198. );
  199. STDMETHOD(WriteVirtual)(
  200. THIS_
  201. IN ULONG64 Process,
  202. IN ULONG64 Offset,
  203. IN PVOID Buffer,
  204. IN ULONG BufferSize,
  205. OUT OPTIONAL PULONG BytesWritten
  206. );
  207. STDMETHOD(QueryVirtual)(
  208. THIS_
  209. IN ULONG64 Process,
  210. IN ULONG64 Offset,
  211. OUT PVOID Buffer,
  212. IN ULONG BufferSize,
  213. OUT OPTIONAL PULONG BufferUsed
  214. );
  215. STDMETHOD(ProtectVirtual)(
  216. THIS_
  217. IN ULONG64 Process,
  218. IN ULONG64 Offset,
  219. IN ULONG64 Size,
  220. IN ULONG NewProtect,
  221. OUT PULONG OldProtect
  222. );
  223. STDMETHOD(AllocVirtual)(
  224. THIS_
  225. IN ULONG64 Process,
  226. IN ULONG64 Offset,
  227. IN ULONG64 Size,
  228. IN ULONG Type,
  229. IN ULONG Protect,
  230. OUT PULONG64 AllocOffset
  231. );
  232. STDMETHOD(FreeVirtual)(
  233. THIS_
  234. IN ULONG64 Process,
  235. IN ULONG64 Offset,
  236. IN ULONG64 Size,
  237. IN ULONG Type
  238. );
  239. STDMETHOD(ReadHandleData)(
  240. THIS_
  241. IN ULONG64 Process,
  242. IN ULONG64 Handle,
  243. IN ULONG DataType,
  244. OUT OPTIONAL PVOID Buffer,
  245. IN ULONG BufferSize,
  246. OUT OPTIONAL PULONG DataSize
  247. );
  248. STDMETHOD(SuspendThreads)(
  249. THIS_
  250. IN ULONG Count,
  251. IN /* size_is(Count) */ PULONG64 Threads,
  252. OUT OPTIONAL /* size_is(Count) */ PULONG SuspendCounts
  253. );
  254. STDMETHOD(ResumeThreads)(
  255. THIS_
  256. IN ULONG Count,
  257. IN /* size_is(Count) */ PULONG64 Threads,
  258. OUT OPTIONAL /* size_is(Count) */ PULONG SuspendCounts
  259. );
  260. STDMETHOD(GetContext)(
  261. THIS_
  262. IN ULONG64 Thread,
  263. IN ULONG Flags,
  264. IN ULONG FlagsOffset,
  265. OUT PVOID Context,
  266. IN ULONG ContextSize,
  267. OUT OPTIONAL PULONG ContextUsed
  268. );
  269. STDMETHOD(SetContext)(
  270. THIS_
  271. IN ULONG64 Thread,
  272. IN PVOID Context,
  273. IN ULONG ContextSize,
  274. OUT OPTIONAL PULONG ContextUsed
  275. );
  276. STDMETHOD(GetProcessDataOffset)(
  277. THIS_
  278. IN ULONG64 Process,
  279. OUT PULONG64 Offset
  280. );
  281. STDMETHOD(GetThreadDataOffset)(
  282. THIS_
  283. IN ULONG64 Thread,
  284. OUT PULONG64 Offset
  285. );
  286. STDMETHOD(DescribeSelector)(
  287. THIS_
  288. IN ULONG64 Thread,
  289. IN ULONG Selector,
  290. OUT PVOID Buffer,
  291. IN ULONG BufferSize,
  292. OUT OPTIONAL PULONG BufferUsed
  293. );
  294. STDMETHOD(GetCurrentTimeDateN)(
  295. THIS_
  296. OUT PULONG64 TimeDate
  297. );
  298. STDMETHOD(GetCurrentSystemUpTimeN)(
  299. THIS_
  300. OUT PULONG64 UpTime
  301. );
  302. STDMETHOD(GetProcessUpTimeN)(
  303. THIS_
  304. IN ULONG64 Process,
  305. OUT PULONG64 UpTime
  306. );
  307. STDMETHOD(RequestBreakIn)(
  308. THIS_
  309. IN ULONG64 Process
  310. );
  311. STDMETHOD(WaitForEvent)(
  312. THIS_
  313. IN ULONG Timeout,
  314. OUT PVOID Buffer,
  315. IN ULONG BufferSize,
  316. OUT OPTIONAL PULONG BufferUsed
  317. );
  318. STDMETHOD(ContinueEvent)(
  319. THIS_
  320. IN ULONG ContinueStatus
  321. );
  322. STDMETHOD(InsertCodeBreakpoint)(
  323. THIS_
  324. IN ULONG64 Process,
  325. IN ULONG64 Offset,
  326. IN ULONG MachineType,
  327. OUT PVOID Storage,
  328. IN ULONG StorageSize
  329. );
  330. STDMETHOD(RemoveCodeBreakpoint)(
  331. THIS_
  332. IN ULONG64 Process,
  333. IN ULONG64 Offset,
  334. IN ULONG MachineType,
  335. IN PVOID Storage,
  336. IN ULONG StorageSize
  337. );
  338. STDMETHOD(GetFunctionTableListHead)(
  339. THIS_
  340. IN ULONG64 Process,
  341. OUT PULONG64 Offset
  342. );
  343. STDMETHOD(GetOutOfProcessFunctionTable)(
  344. THIS_
  345. IN ULONG64 Process,
  346. IN PSTR Dll,
  347. IN ULONG64 Table,
  348. IN OPTIONAL PVOID Buffer,
  349. IN ULONG BufferSize,
  350. OUT OPTIONAL PULONG TableSize
  351. );
  352. // LiveUserDebugServices.
  353. ULONG m_ContextSize;
  354. ULONG m_SysProcInfoSize;
  355. BOOL m_Remote;
  356. ULONG m_EventProcessId;
  357. ULONG m_EventThreadId;
  358. ULONG m_PlatformId;
  359. HANDLE m_DebugObject;
  360. BOOL m_UseDebugObject;
  361. HRESULT SysGetProcessOptions(HANDLE Process, PULONG Options);
  362. HRESULT OpenDebugActiveProcess(ULONG ProcessId, HANDLE Process);
  363. HRESULT CreateDebugActiveProcess(ULONG ProcessId, HANDLE Process);
  364. };
  365. // This global instance is intended for direct use only
  366. // by routines which need a temporary local service instance.
  367. extern LiveUserDebugServices g_LiveUserDebugServices;
  368. #define SERVER_SERVICES(Server) \
  369. ((Server) != 0 ? (PUSER_DEBUG_SERVICES)(Server) : &g_LiveUserDebugServices)
  370. // A client of the services can watch this variable to
  371. // see if any instance has received an Uninitialize request.
  372. extern ULONG g_UserServicesUninitialized;
  373. #endif // #ifndef __DBGSVC_HPP__