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.

118 lines
3.3 KiB

  1. //----------------------------------------------------------------------------
  2. //
  3. // Thread abstraction.
  4. //
  5. // Copyright (C) Microsoft Corporation, 2001-2002.
  6. //
  7. //----------------------------------------------------------------------------
  8. #ifndef __THREAD_HPP__
  9. #define __THREAD_HPP__
  10. // In kernel mode the index is a processor index. In user
  11. // dumps it's the thread index in the dump.
  12. #define VIRTUAL_THREAD_HANDLE(Index) ((ULONG64)((Index) + 1))
  13. #define VIRTUAL_THREAD_INDEX(Handle) ((ULONG)((Handle) - 1))
  14. #define VIRTUAL_THREAD_ID(Index) ((Index) + 1)
  15. #define CURRENT_PROC \
  16. (g_Thread ? VIRTUAL_THREAD_INDEX(g_Thread->m_Handle) : (ULONG)-1)
  17. extern ThreadInfo* g_SelectedThread;
  18. enum SELECT_EXECUTION_THREAD
  19. {
  20. SELTHREAD_ANY,
  21. SELTHREAD_THREAD,
  22. SELTHREAD_INTERNAL_THREAD,
  23. };
  24. extern SELECT_EXECUTION_THREAD g_SelectExecutionThread;
  25. struct EventString
  26. {
  27. EventString* Next;
  28. char String[1];
  29. };
  30. //----------------------------------------------------------------------------
  31. //
  32. // ThreadInfo.
  33. //
  34. //----------------------------------------------------------------------------
  35. #define MAX_DATA_BREAKS 4
  36. class ThreadInfo
  37. {
  38. public:
  39. ThreadInfo(class ProcessInfo* Process,
  40. ULONG SystemId,
  41. ULONG64 DataOffset,
  42. ULONG64 Handle,
  43. ULONG Flags,
  44. ULONG64 StartOffset);
  45. ~ThreadInfo(void);
  46. class ProcessInfo* m_Process;
  47. // Generic information.
  48. ThreadInfo* m_Next;
  49. ULONG m_UserId;
  50. ULONG m_SystemId;
  51. BOOL m_Exited;
  52. ULONG64 m_DataOffset;
  53. // For kernel mode and dumps the thread handle is
  54. // a virtual handle.
  55. ULONG64 m_Handle;
  56. ULONG m_Flags;
  57. // Only set by VCPP exceptions.
  58. char m_Name[MAX_THREAD_NAME];
  59. class Breakpoint* m_DataBreakBps[MAX_DATA_BREAKS];
  60. ULONG m_NumDataBreaks;
  61. EventString* m_EventStrings;
  62. // Only partially-implemented in kd.
  63. ULONG64 m_StartOffset;
  64. BOOL m_Frozen;
  65. ULONG m_SuspendCount;
  66. ULONG m_FreezeCount;
  67. ULONG m_InternalFreezeCount;
  68. EventString* AllocEventString(ULONG Len);
  69. void AppendEventString(EventString* EventStr);
  70. HRESULT AddEventString(PSTR String);
  71. void ClearEventStrings(void);
  72. void OutputEventStrings(void);
  73. void OutputTimes(void);
  74. void PrepareForExecution(void);
  75. HRESULT GetTlsSlotAddress(ULONG Index, PULONG64 Addr);
  76. };
  77. ThreadInfo* FindAnyThreadByUserId(ULONG Id);
  78. void SetCurrentThread(ThreadInfo* Thread, BOOL Hidden);
  79. void SetCurrentProcessorThread(TargetInfo* Target,
  80. ULONG Processor, BOOL Hidden);
  81. void SaveSetCurrentProcessorThread(TargetInfo* Target,
  82. ULONG Processor);
  83. void RestoreCurrentProcessorThread(TargetInfo* Target);
  84. #define SPT_DEFAULT_OCI_FLAGS \
  85. (OCI_SYMBOL | OCI_DISASM | OCI_FORCE_EA | OCI_ALLOW_SOURCE | \
  86. OCI_ALLOW_REG)
  87. void SetPromptThread(ThreadInfo* pThread, ULONG uOciFlags);
  88. void ParseThreadCmds(DebugClient* Client);
  89. BOOL IsSelectedExecutionThread(ThreadInfo* Thread,
  90. SELECT_EXECUTION_THREAD Type);
  91. void SelectExecutionThread(ThreadInfo* Thread,
  92. SELECT_EXECUTION_THREAD Type);
  93. BOOL ThreadWillResume(ThreadInfo* Thread);
  94. #endif // #ifndef __THREAD_HPP__