| 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, | 
| 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
| 12 // See the License for the specific language governing permissions and | 12 // See the License for the specific language governing permissions and | 
| 13 // limitations under the License. | 13 // limitations under the License. | 
| 14 | 14 | 
| 15 #include "snapshot/win/process_reader_win.h" | 15 #include "snapshot/win/process_reader_win.h" | 
| 16 | 16 | 
| 17 #include <winternl.h> | 17 #include <winternl.h> | 
| 18 | 18 | 
| 19 #include "base/memory/scoped_ptr.h" | 19 #include "base/memory/scoped_ptr.h" | 
| 20 #include "base/numerics/safe_conversions.h" | 20 #include "base/numerics/safe_conversions.h" | 
|  | 21 #include "util/win/capture_context.h" | 
| 21 #include "util/win/nt_internals.h" | 22 #include "util/win/nt_internals.h" | 
| 22 #include "util/win/ntstatus_logging.h" | 23 #include "util/win/ntstatus_logging.h" | 
| 23 #include "util/win/process_structs.h" | 24 #include "util/win/process_structs.h" | 
| 24 #include "util/win/scoped_handle.h" | 25 #include "util/win/scoped_handle.h" | 
| 25 #include "util/win/time.h" | 26 #include "util/win/time.h" | 
| 26 | 27 | 
| 27 namespace crashpad { | 28 namespace crashpad { | 
| 28 | 29 | 
| 29 namespace { | 30 namespace { | 
| 30 | 31 | 
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 121   // Don't suspend the thread if it's this thread. This is really only for test | 122   // Don't suspend the thread if it's this thread. This is really only for test | 
| 122   // binaries, as we won't be walking ourselves, in general. | 123   // binaries, as we won't be walking ourselves, in general. | 
| 123   bool is_current_thread = thread->id == | 124   bool is_current_thread = thread->id == | 
| 124                            reinterpret_cast<process_types::TEB<Traits>*>( | 125                            reinterpret_cast<process_types::TEB<Traits>*>( | 
| 125                                NtCurrentTeb())->ClientId.UniqueThread; | 126                                NtCurrentTeb())->ClientId.UniqueThread; | 
| 126 | 127 | 
| 127   if (is_current_thread) { | 128   if (is_current_thread) { | 
| 128     DCHECK(suspension_state == ProcessSuspensionState::kRunning); | 129     DCHECK(suspension_state == ProcessSuspensionState::kRunning); | 
| 129     thread->suspend_count = 0; | 130     thread->suspend_count = 0; | 
| 130     DCHECK(!is_64_reading_32); | 131     DCHECK(!is_64_reading_32); | 
| 131     RtlCaptureContext(&thread->context.native); | 132     CaptureContext(&thread->context.native); | 
| 132   } else { | 133   } else { | 
| 133     DWORD previous_suspend_count = SuspendThread(thread_handle); | 134     DWORD previous_suspend_count = SuspendThread(thread_handle); | 
| 134     if (previous_suspend_count == -1) { | 135     if (previous_suspend_count == -1) { | 
| 135       PLOG(ERROR) << "SuspendThread"; | 136       PLOG(ERROR) << "SuspendThread"; | 
| 136       return false; | 137       return false; | 
| 137     } | 138     } | 
| 138     DCHECK(previous_suspend_count > 0 || | 139     DCHECK(previous_suspend_count > 0 || | 
| 139            suspension_state == ProcessSuspensionState::kRunning); | 140            suspension_state == ProcessSuspensionState::kRunning); | 
| 140     thread->suspend_count = | 141     thread->suspend_count = | 
| 141         previous_suspend_count - | 142         previous_suspend_count - | 
| (...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 357         thread.stack_region_size = 0; | 358         thread.stack_region_size = 0; | 
| 358       } else { | 359       } else { | 
| 359         thread.stack_region_size = base - limit; | 360         thread.stack_region_size = base - limit; | 
| 360       } | 361       } | 
| 361     } | 362     } | 
| 362     threads_.push_back(thread); | 363     threads_.push_back(thread); | 
| 363   } | 364   } | 
| 364 } | 365 } | 
| 365 | 366 | 
| 366 }  // namespace crashpad | 367 }  // namespace crashpad | 
| OLD | NEW | 
|---|