Index: util/win/process_structs.h |
diff --git a/util/win/process_structs.h b/util/win/process_structs.h |
index ece6089601ce08d4afa3af9057e46d3a32b47e2b..d88b33d135ca60886ec7de454484ef91f64a30a7 100644 |
--- a/util/win/process_structs.h |
+++ b/util/win/process_structs.h |
@@ -281,6 +281,107 @@ struct PEB { |
DWORD FlsHighIndex; |
}; |
+template <class Traits> |
+struct NT_TIB { |
+ typename Traits::Pointer ExceptionList; |
+ typename Traits::Pointer StackBase; |
+ typename Traits::Pointer StackLimit; |
+ typename Traits::Pointer SubSystemTib; |
+ union { |
+ typename Traits::Pointer FiberData; |
+ BYTE Version[4]; |
+ }; |
+ typename Traits::Pointer ArbitraryUserPointer; |
+ typename Traits::Pointer Self; |
+}; |
+ |
+// See https://msdn.microsoft.com/en-us/library/gg750647.aspx. |
+template <class Traits> |
+struct CLIENT_ID { |
+ typename Traits::Pointer UniqueProcess; |
+ typename Traits::Pointer UniqueThread; |
+}; |
+ |
+// See https://msdn.microsoft.com/en-us/library/gg750724.aspx for the base |
+// structure, and |
+// http://processhacker.sourceforge.net/doc/struct___s_y_s_t_e_m___e_x_t_e_n_d_e_d___t_h_r_e_a_d___i_n_f_o_r_m_a_t_i_o_n.html |
+// for the extension part. |
+template <class Traits> |
+struct SYSTEM_EXTENDED_THREAD_INFORMATION { |
+ LARGE_INTEGER KernelTime; |
+ LARGE_INTEGER UserTime; |
+ LARGE_INTEGER CreateTime; |
+ union { |
+ ULONG WaitTime; |
+ typename Traits::Pad padding_for_x64_0; |
+ }; |
+ typename Traits::Pointer StartAddress; |
+ CLIENT_ID<Traits> ClientId; |
+ LONG Priority; |
+ LONG BasePriority; |
+ ULONG ContextSwitches; |
+ ULONG ThreadState; |
+ union { |
+ ULONG WaitReason; |
+ typename Traits::Pad padding_for_x64_1; |
+ }; |
+ typename Traits::Pointer StackBase; // These don't appear to be correct. |
+ typename Traits::Pointer StackLimit; |
+ typename Traits::Pointer Win32StartAddress; |
+ typename Traits::Pointer TebBase; |
+ typename Traits::Pointer Reserved; |
+ typename Traits::Pointer Reserved2; |
+ typename Traits::Pointer Reserved3; |
+}; |
+ |
+// See http://undocumented.ntinternals.net/source/usermode/undocumented%20functions/system%20information/structures/system_process_information.html |
+template <class Traits> |
+struct SYSTEM_PROCESS_INFORMATION { |
+ ULONG NextEntryOffset; |
+ ULONG NumberOfThreads; |
+ LARGE_INTEGER Reserved[3]; |
+ LARGE_INTEGER CreateTime; |
+ LARGE_INTEGER UserTime; |
+ LARGE_INTEGER KernelTime; |
+ UNICODE_STRING<Traits> ImageName; |
+ union { |
+ LONG BasePriority; |
+ typename Traits::Pad padding_for_x64_0; |
+ }; |
+ union { |
+ DWORD UniqueProcessId; |
+ typename Traits::Pad padding_for_x64_1; |
+ }; |
+ union { |
+ DWORD InheritedFromUniqueProcessId; |
+ typename Traits::Pad padding_for_x64_2; |
+ }; |
+ ULONG HandleCount; |
+ ULONG Reserved2[3]; |
+ SIZE_T PeakVirtualSize; |
+ SIZE_T VirtualSize; |
+ union { |
+ ULONG PageFaultCount; |
+ typename Traits::Pad padding_for_x64_3; |
+ }; |
+ SIZE_T PeakWorkingSetSize; |
+ SIZE_T WorkingSetSize; |
+ SIZE_T QuotaPeakPagedPoolUsage; |
+ SIZE_T QuotaPagedPoolUsage; |
+ SIZE_T QuotaPeakNonPagedPoolUsage; |
+ SIZE_T QuotaNonPagedPoolUsage; |
+ SIZE_T PagefileUsage; |
+ SIZE_T PeakPagefileUsage; |
+ SIZE_T PrivatePageCount; |
+ LARGE_INTEGER ReadOperationCount; |
+ LARGE_INTEGER WriteOperationCount; |
+ LARGE_INTEGER OtherOperationCount; |
+ LARGE_INTEGER ReadTransferCount; |
+ LARGE_INTEGER WriteTransferCount; |
+ LARGE_INTEGER OtherTransferCount; |
+ SYSTEM_EXTENDED_THREAD_INFORMATION<Traits> Threads[1]; |
+}; |
+ |
#pragma pack(pop) |
//! \} |