Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1156)

Unified Diff: util/win/process_structs.h

Issue 1336823002: win x86: Grab bag of restructuring to get tests working on x86-on-x86 (Closed) Base URL: https://chromium.googlesource.com/crashpad/crashpad@master
Patch Set: fixes2 Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« snapshot/win/process_reader_win.cc ('K') | « util/win/process_info.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: util/win/process_structs.h
diff --git a/util/win/process_structs.h b/util/win/process_structs.h
index 65f0aac01109c38b4de2d302abcd007f745f8324..7f4e4f59e77e7f3561f37aa091f7ab365f89194e 100644
--- a/util/win/process_structs.h
+++ b/util/win/process_structs.h
@@ -311,36 +311,70 @@ struct TEB {
CLIENT_ID<Traits> ClientId;
};
-// 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.
+// See https://msdn.microsoft.com/en-us/library/gg750724.aspx.
template <class Traits>
-struct SYSTEM_EXTENDED_THREAD_INFORMATION {
- LARGE_INTEGER KernelTime;
- LARGE_INTEGER UserTime;
- LARGE_INTEGER CreateTime;
+struct SYSTEM_THREAD_INFORMATION {
union {
- ULONG WaitTime;
- typename Traits::Pad padding_for_x64_0;
+ struct {
+ 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;
+ };
+ };
+ LARGE_INTEGER alignment_for_x86[8];
};
- typename Traits::Pointer StartAddress;
- CLIENT_ID<Traits> ClientId;
- LONG Priority;
- LONG BasePriority;
- ULONG ContextSwitches;
- ULONG ThreadState;
+};
+
+// There's an extra field in the x64 VM_COUNTERS (or maybe it's VM_COUNTERS_EX,
+// it's not clear), so we just make separate specializations for 32/64.
+template <class Traits>
+class VM_COUNTERS {};
+
+template <>
+class VM_COUNTERS<internal::Traits32> {
+ SIZE_T PeakVirtualSize;
+ SIZE_T VirtualSize;
+ ULONG PageFaultCount;
+ SIZE_T PeakWorkingSetSize;
+ SIZE_T WorkingSetSize;
+ SIZE_T QuotaPeakPagedPoolUsage;
+ SIZE_T QuotaPagedPoolUsage;
+ SIZE_T QuotaPeakNonPagedPoolUsage;
+ SIZE_T QuotaNonPagedPoolUsage;
+ SIZE_T PagefileUsage;
+ SIZE_T PeakPagefileUsage;
+};
+
+template <>
+class VM_COUNTERS<internal::Traits64> {
+ SIZE_T PeakVirtualSize;
+ SIZE_T VirtualSize;
union {
- ULONG WaitReason;
- typename Traits::Pad padding_for_x64_1;
+ ULONG PageFaultCount;
+ internal::Traits64::Pad padding_for_x64;
};
- 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;
+ 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 PrivateUsage;
};
// See http://undocumented.ntinternals.net/source/usermode/undocumented%20functions/system%20information/structures/system_process_information.html
@@ -348,7 +382,10 @@ template <class Traits>
struct SYSTEM_PROCESS_INFORMATION {
ULONG NextEntryOffset;
ULONG NumberOfThreads;
- LARGE_INTEGER Reserved[3];
+ LARGE_INTEGER WorkingSetPrivateSize;
+ ULONG HardFaultCount;
+ ULONG NumberOfThreadsHighWatermark;
+ ULONGLONG CycleTime;
LARGE_INTEGER CreateTime;
LARGE_INTEGER UserTime;
LARGE_INTEGER KernelTime;
@@ -366,29 +403,28 @@ struct SYSTEM_PROCESS_INFORMATION {
typename Traits::Pad padding_for_x64_2;
};
ULONG HandleCount;
- ULONG Reserved2[3];
- SIZE_T PeakVirtualSize;
- SIZE_T VirtualSize;
+ ULONG SessionId;
+ typename Traits::Pointer UniqueProcessKey;
union {
- ULONG PageFaultCount;
- typename Traits::Pad padding_for_x64_3;
+ VM_COUNTERS<Traits> VirtualMemoryCounters;
+ LARGE_INTEGER alignment_for_x86[6];
};
- 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];
+ IO_COUNTERS IoCounters;
+ SYSTEM_THREAD_INFORMATION<Traits> Threads[1];
+};
+
+// http://undocumented.ntinternals.net/source/usermode/structures/thread_basic_information.html
+template <class Traits>
+struct THREAD_BASIC_INFORMATION {
+ union {
+ NTSTATUS ExitStatus;
+ typename Traits::Pad padding_for_x64_0;
+ };
+ typename Traits::Pointer TebBaseAddress;
+ CLIENT_ID<Traits> ClientId;
+ typename Traits::Pointer AffinityMask;
+ ULONG Priority;
+ LONG BasePriority;
};
#pragma pack(pop)
« snapshot/win/process_reader_win.cc ('K') | « util/win/process_info.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698