OLD | NEW |
1 // Copyright 2015 The Crashpad Authors. All rights reserved. | 1 // Copyright 2015 The Crashpad Authors. All rights reserved. |
2 // | 2 // |
3 // Licensed under the Apache License, Version 2.0 (the "License"); | 3 // Licensed under the Apache License, Version 2.0 (the "License"); |
4 // you may not use this file except in compliance with 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 | 5 // You may obtain a copy of the License at |
6 // | 6 // |
7 // http://www.apache.org/licenses/LICENSE-2.0 | 7 // http://www.apache.org/licenses/LICENSE-2.0 |
8 // | 8 // |
9 // Unless required by applicable law or agreed to in writing, software | 9 // Unless required by applicable law or agreed to in writing, software |
10 // distributed under the License is distributed on an "AS IS" BASIS, | 10 // distributed under the License is distributed on an "AS IS" BASIS, |
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
276 typename Traits::UnsignedIntegral MinimumStackCommit; | 276 typename Traits::UnsignedIntegral MinimumStackCommit; |
277 typename Traits::Pointer FlsCallback; | 277 typename Traits::Pointer FlsCallback; |
278 LIST_ENTRY<Traits> FlsListHead; | 278 LIST_ENTRY<Traits> FlsListHead; |
279 typename Traits::Pointer FlsBitmap; | 279 typename Traits::Pointer FlsBitmap; |
280 DWORD FlsBitmapBits[4]; | 280 DWORD FlsBitmapBits[4]; |
281 DWORD FlsHighIndex; | 281 DWORD FlsHighIndex; |
282 }; | 282 }; |
283 | 283 |
284 template <class Traits> | 284 template <class Traits> |
285 struct NT_TIB { | 285 struct NT_TIB { |
286 typename Traits::Pointer ExceptionList; | |
287 typename Traits::Pointer StackBase; | |
288 typename Traits::Pointer StackLimit; | |
289 typename Traits::Pointer SubSystemTib; | |
290 union { | 286 union { |
291 typename Traits::Pointer FiberData; | 287 // See https://msdn.microsoft.com/en-us/library/dn424783.aspx. |
292 BYTE Version[4]; | 288 typename Traits::Pointer Wow64Teb; |
| 289 struct { |
| 290 typename Traits::Pointer ExceptionList; |
| 291 typename Traits::Pointer StackBase; |
| 292 typename Traits::Pointer StackLimit; |
| 293 typename Traits::Pointer SubSystemTib; |
| 294 union { |
| 295 typename Traits::Pointer FiberData; |
| 296 BYTE Version[4]; |
| 297 }; |
| 298 typename Traits::Pointer ArbitraryUserPointer; |
| 299 typename Traits::Pointer Self; |
| 300 }; |
293 }; | 301 }; |
294 typename Traits::Pointer ArbitraryUserPointer; | |
295 typename Traits::Pointer Self; | |
296 }; | 302 }; |
297 | 303 |
298 // See https://msdn.microsoft.com/en-us/library/gg750647.aspx. | 304 // See https://msdn.microsoft.com/en-us/library/gg750647.aspx. |
299 template <class Traits> | 305 template <class Traits> |
300 struct CLIENT_ID { | 306 struct CLIENT_ID { |
301 typename Traits::Pointer UniqueProcess; | 307 typename Traits::Pointer UniqueProcess; |
302 typename Traits::Pointer UniqueThread; | 308 typename Traits::Pointer UniqueThread; |
303 }; | 309 }; |
304 | 310 |
305 // This is a partial definition of the TEB, as we do not currently use many | 311 // This is a partial definition of the TEB, as we do not currently use many |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
410 LARGE_INTEGER alignment_for_x86[6]; | 416 LARGE_INTEGER alignment_for_x86[6]; |
411 }; | 417 }; |
412 IO_COUNTERS IoCounters; | 418 IO_COUNTERS IoCounters; |
413 SYSTEM_THREAD_INFORMATION<Traits> Threads[1]; | 419 SYSTEM_THREAD_INFORMATION<Traits> Threads[1]; |
414 }; | 420 }; |
415 | 421 |
416 // http://undocumented.ntinternals.net/source/usermode/structures/thread_basic_i
nformation.html | 422 // http://undocumented.ntinternals.net/source/usermode/structures/thread_basic_i
nformation.html |
417 template <class Traits> | 423 template <class Traits> |
418 struct THREAD_BASIC_INFORMATION { | 424 struct THREAD_BASIC_INFORMATION { |
419 union { | 425 union { |
420 NTSTATUS ExitStatus; | 426 LONG ExitStatus; |
421 typename Traits::Pad padding_for_x64_0; | 427 typename Traits::Pad padding_for_x64_0; |
422 }; | 428 }; |
423 typename Traits::Pointer TebBaseAddress; | 429 typename Traits::Pointer TebBaseAddress; |
424 CLIENT_ID<Traits> ClientId; | 430 CLIENT_ID<Traits> ClientId; |
425 typename Traits::Pointer AffinityMask; | 431 typename Traits::Pointer AffinityMask; |
426 ULONG Priority; | 432 ULONG Priority; |
427 LONG BasePriority; | 433 LONG BasePriority; |
428 }; | 434 }; |
429 | 435 |
| 436 template <class Traits> |
| 437 struct EXCEPTION_POINTERS { |
| 438 typename Traits::Pointer ExceptionRecord; |
| 439 typename Traits::Pointer ContextRecord; |
| 440 }; |
| 441 |
| 442 using EXCEPTION_POINTERS32 = EXCEPTION_POINTERS<internal::Traits32>; |
| 443 using EXCEPTION_POINTERS64 = EXCEPTION_POINTERS<internal::Traits64>; |
| 444 |
430 #pragma pack(pop) | 445 #pragma pack(pop) |
431 | 446 |
432 //! \} | 447 //! \} |
433 | 448 |
434 } // namespace process_types | 449 } // namespace process_types |
435 } // namespace crashpad | 450 } // namespace crashpad |
436 | 451 |
437 #endif // CRASHPAD_UTIL_WIN_PROCESS_STRUCTS_H_ | 452 #endif // CRASHPAD_UTIL_WIN_PROCESS_STRUCTS_H_ |
OLD | NEW |