Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright 2015 The Crashpad Authors. All rights reserved. | |
| 2 // | |
| 3 // Licensed under the Apache License, Version 2.0 (the "License"); | |
| 4 // you may not use this file except in compliance with the License. | |
| 5 // You may obtain a copy of the License at | |
| 6 // | |
| 7 // http://www.apache.org/licenses/LICENSE-2.0 | |
| 8 // | |
| 9 // Unless required by applicable law or agreed to in writing, software | |
| 10 // distributed under the License is distributed on an "AS IS" BASIS, | |
| 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| 12 // See the License for the specific language governing permissions and | |
| 13 // limitations under the License. | |
| 14 | |
| 15 #ifndef CRASHPAD_UTIL_WIN_PROCESS_STRUCTS_H_ | |
| 16 #define CRASHPAD_UTIL_WIN_PROCESS_STRUCTS_H_ | |
| 17 | |
| 18 #include <windows.h> | |
| 19 | |
| 20 namespace crashpad { | |
|
Mark Mentovai
2015/03/09 16:11:46
Although we rarely have subnamespaces inside “cras
scottmg
2015/03/09 21:16:37
Done.
| |
| 21 | |
| 22 //! \brief Selected structures from winternl.h, ntddk.h, and `dt ntdll!xxx`, | |
|
Mark Mentovai
2015/03/09 16:11:46
You should have a //! \{ before this, and a //! \}
scottmg
2015/03/09 21:16:36
Done.
| |
| 23 //! customized to have both x86 and x64 sizes available. | |
| 24 //! | |
| 25 //! The structure and field names follow the Windows names for clarity. We do, | |
| 26 //! however, use plain integral types rather than pointer types (DWORD/DWORD64, | |
| 27 //! rather than e.g. PVOID). This is both easier to define, and avoids | |
| 28 //! accidentally treating them as pointers into the current address space. | |
| 29 //! | |
| 30 //! In all cases, the `T` in the templates below must be either DWORD for | |
|
Mark Mentovai
2015/03/09 16:11:46
I think I’d like traits a little better, so that t
scottmg
2015/03/09 21:16:37
The user code does get better, but this gets prett
| |
| 31 //! targeting x86 or DWORD64 for targeting x64. | |
| 32 | |
| 33 #pragma pack(push, 1) | |
|
Mark Mentovai
2015/03/09 16:11:46
Is this true for the native structs too? Or are yo
scottmg
2015/03/09 21:16:37
Right, I set it to 1 so that it would explicitly m
| |
| 34 | |
| 35 template <class T> struct PROCESS_BASIC_INFORMATION_T { | |
| 36 union { | |
| 37 DWORD ExitStatus; | |
| 38 T padding_for_x64_0; | |
| 39 }; | |
| 40 T PebBaseAddress; | |
| 41 T AffinityMask; | |
| 42 union { | |
| 43 DWORD BasePriority; | |
| 44 T padding_for_x64_1; | |
| 45 }; | |
| 46 T UniqueProcessId; | |
| 47 T InheritedFromUniqueProcessId; | |
| 48 }; | |
| 49 | |
| 50 template <class T> struct LIST_ENTRY_T { | |
| 51 T Flink; | |
| 52 T Blink; | |
| 53 }; | |
| 54 | |
| 55 template <class T> struct UNICODE_STRING_T { | |
| 56 union { | |
| 57 struct { | |
| 58 USHORT Length; | |
| 59 USHORT MaximumLength; | |
| 60 }; | |
| 61 T padding_for_x64; | |
| 62 }; | |
| 63 T Buffer; | |
| 64 }; | |
| 65 | |
| 66 template <class T> struct PEB_LDR_DATA_T { | |
| 67 ULONG Length; | |
| 68 DWORD Initialized; | |
| 69 T SsHandle; | |
| 70 LIST_ENTRY_T<T> InLoadOrderModuleList; | |
| 71 LIST_ENTRY_T<T> InMemoryOrderModuleList; | |
| 72 LIST_ENTRY_T<T> InInitializationOrderModuleList; | |
| 73 }; | |
| 74 | |
| 75 template <class T> struct LDR_DATA_TABLE_ENTRY_T { | |
| 76 LIST_ENTRY_T<T> InLoadOrderLinks; | |
| 77 LIST_ENTRY_T<T> InMemoryOrderLinks; | |
| 78 LIST_ENTRY_T<T> InInitializationOrderLinks; | |
| 79 T DllBase; | |
| 80 T EntryPoint; | |
| 81 union { | |
| 82 ULONG SizeOfImage; | |
| 83 T padding_for_x86; | |
| 84 }; | |
| 85 UNICODE_STRING_T<T> FullDllName; | |
| 86 UNICODE_STRING_T<T> BaseDllName; | |
| 87 ULONG Flags; | |
| 88 USHORT ObsoleteLoadCount; | |
| 89 USHORT TlsIndex; | |
| 90 LIST_ENTRY_T<T> HashLinks; | |
| 91 ULONG TimeDateStamp; | |
| 92 }; | |
| 93 | |
| 94 template <class T> struct CURDIR_T { | |
| 95 UNICODE_STRING_T<T> DosPath; | |
| 96 T Handle; | |
| 97 }; | |
| 98 | |
| 99 template <class T> struct STRING_T { | |
| 100 union { | |
| 101 struct { | |
| 102 DWORD Length; | |
| 103 DWORD MaximumLength; | |
| 104 }; | |
| 105 T padding_for_x64; | |
| 106 }; | |
| 107 T Buffer; | |
| 108 }; | |
| 109 | |
| 110 template <class T> struct RTL_DRIVE_LETTER_CURDIR_T { | |
| 111 WORD Flags; | |
| 112 WORD Length; | |
| 113 DWORD TimeStamp; | |
| 114 STRING_T<T> DosPath; | |
| 115 }; | |
| 116 | |
| 117 template <class T> struct RTL_USER_PROCESS_PARAMETERS_T { | |
| 118 DWORD MaximumLength; | |
| 119 DWORD Length; | |
| 120 DWORD Flags; | |
| 121 DWORD DebugFlags; | |
| 122 T ConsoleHandle; | |
| 123 union { | |
| 124 DWORD ConsoleFlags; | |
| 125 T padding_for_x86; | |
| 126 }; | |
| 127 T StandardInput; | |
| 128 T StandardOutput; | |
| 129 T StandardError; | |
| 130 CURDIR_T<T> CurrentDirectory; | |
| 131 UNICODE_STRING_T<T> DllPath; | |
| 132 UNICODE_STRING_T<T> ImagePathName; | |
| 133 UNICODE_STRING_T<T> CommandLine; | |
| 134 T Environment; | |
| 135 DWORD StartingX; | |
| 136 DWORD StartingY; | |
| 137 DWORD CountX; | |
| 138 DWORD CountY; | |
| 139 DWORD CountCharsX; | |
| 140 DWORD CountCharsY; | |
| 141 DWORD FillAttribute; | |
| 142 DWORD WindowFlags; | |
| 143 DWORD ShowWindowFlags; | |
| 144 UNICODE_STRING_T<T> WindowTitle; | |
| 145 UNICODE_STRING_T<T> DesktopInfo; | |
| 146 UNICODE_STRING_T<T> ShellInfo; | |
| 147 UNICODE_STRING_T<T> RuntimeData; | |
| 148 RTL_DRIVE_LETTER_CURDIR_T<T> CurrentDirectores[32]; // sic. | |
|
Mark Mentovai
2015/03/09 16:11:46
Ha!
| |
| 149 }; | |
| 150 | |
| 151 template <class T> struct GdiHandleBufferCountForBitness; | |
| 152 template <> struct GdiHandleBufferCountForBitness<DWORD> { | |
| 153 enum { value = 34 }; | |
| 154 }; | |
| 155 template <> struct GdiHandleBufferCountForBitness<DWORD64> { | |
| 156 enum { value = 60 }; | |
| 157 }; | |
| 158 | |
| 159 template <class T> struct PEB_T { | |
| 160 union { | |
| 161 struct { | |
| 162 BYTE InheritedAddressSpace; | |
| 163 BYTE ReadImageFileExecOptions; | |
| 164 BYTE BeingDebugged; | |
| 165 BYTE BitField; | |
| 166 }; | |
| 167 T padding_for_x64_0; | |
| 168 }; | |
| 169 T Mutant; | |
| 170 T ImageBaseAddress; | |
| 171 T Ldr; | |
| 172 T ProcessParameters; | |
| 173 T SubSystemData; | |
| 174 T ProcessHeap; | |
| 175 T FastPebLock; | |
| 176 T AtlThunkSListPtr; | |
| 177 T IFEOKey; | |
| 178 T CrossProcessFlags; | |
| 179 T KernelCallbackTable; | |
| 180 DWORD SystemReserved; | |
| 181 DWORD AtlThunkSListPtr32; | |
| 182 T ApiSetMap; | |
| 183 union { | |
| 184 DWORD TlsExpansionCounter; | |
| 185 T padding_for_x64_1; | |
| 186 }; | |
| 187 T TlsBitmap; | |
| 188 DWORD TlsBitmapBits[2]; | |
| 189 T ReadOnlySharedMemoryBase; | |
| 190 T SparePvoid0; | |
| 191 T ReadOnlyStaticServerData; | |
| 192 T AnsiCodePageData; | |
| 193 T OemCodePageData; | |
| 194 T UnicodeCaseTableData; | |
| 195 DWORD NumberOfProcessors; | |
| 196 DWORD NtGlobalFlag; | |
| 197 LARGE_INTEGER CriticalSectionTimeout; | |
| 198 T HeapSegmentReserve; | |
| 199 T HeapSegmentCommit; | |
| 200 T HeapDeCommitTotalFreeThreshold; | |
| 201 T HeapDeCommitFreeBlockThreadhold; | |
| 202 DWORD NumberOfHeaps; | |
| 203 DWORD MaximumNumberOfHeaps; | |
| 204 T ProcessHeaps; | |
| 205 T GdiSharedHandleTable; | |
| 206 T ProcessStarterHelper; | |
| 207 DWORD GdiDCAttributeList; | |
| 208 T LoaderLock; | |
| 209 DWORD OSMajorVersion; | |
| 210 DWORD OSMinorVersion; | |
| 211 WORD OSBuildNumber; | |
| 212 WORD OSCSDVersion; | |
| 213 DWORD OSPlatformId; | |
| 214 DWORD ImageSubsystem; | |
| 215 DWORD ImageSubsystemMajorVersion; | |
| 216 union { | |
| 217 DWORD ImageSubsystemMinorVersion; | |
| 218 T padding_for_x64_2; | |
| 219 }; | |
| 220 T ActiveProcessAffinityMask; | |
| 221 DWORD GdiHandleBuffer[GdiHandleBufferCountForBitness<T>::value]; | |
| 222 T PostProcessInitRoutine; | |
| 223 T TlsExpansionBitmap; | |
| 224 DWORD TlsExpansionBitmapBits[32]; | |
| 225 union { | |
| 226 DWORD SessionId; | |
| 227 T padding_for_x64_3; | |
| 228 }; | |
| 229 ULARGE_INTEGER AppCompatFlags; | |
| 230 ULARGE_INTEGER AppCompatFlagsUser; | |
| 231 T pShimData; | |
| 232 T AppCompatInfo; | |
| 233 UNICODE_STRING_T<T> CSDVersion; | |
| 234 T ActivationContextData; | |
| 235 T ProcessAssemblyStorageMap; | |
| 236 T SystemDefaultActivationContextData; | |
| 237 T SystemAssemblyStorageMap; | |
| 238 T MinimumStackCommit; | |
| 239 T FlsCallback; | |
| 240 LIST_ENTRY_T<T> FlsListHead; | |
| 241 T FlsBitmap; | |
| 242 DWORD FlsBitmapBits[4]; | |
| 243 DWORD FlsHighIndex; | |
| 244 }; | |
| 245 | |
| 246 #pragma pack(pop) | |
| 247 | |
| 248 } // namespace crashpad | |
| 249 | |
| 250 #endif // CRASHPAD_UTIL_WIN_PROCESS_STRUCTS_H_ | |
| OLD | NEW |