| 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 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 50 class ProcessSnapshotWin final : public ProcessSnapshot { | 50 class ProcessSnapshotWin final : public ProcessSnapshot { |
| 51 public: | 51 public: |
| 52 ProcessSnapshotWin(); | 52 ProcessSnapshotWin(); |
| 53 ~ProcessSnapshotWin() override; | 53 ~ProcessSnapshotWin() override; |
| 54 | 54 |
| 55 //! \brief Initializes the object. | 55 //! \brief Initializes the object. |
| 56 //! | 56 //! |
| 57 //! \param[in] process The handle to create a snapshot from. | 57 //! \param[in] process The handle to create a snapshot from. |
| 58 //! \param[in] suspension_state Whether \a process has been suspended by the | 58 //! \param[in] suspension_state Whether \a process has been suspended by the |
| 59 //! caller. | 59 //! caller. |
| 60 //! \param[in] debug_critical_section_address The address in the target |
| 61 //! process's address space of a `CRITICAL_SECTION` allocated with valid |
| 62 //! .DebugInfo. Used as a starting point to walk the process's locks. |
| 63 //! May be `0`. |
| 60 //! | 64 //! |
| 61 //! \return `true` if the snapshot could be created, `false` otherwise with | 65 //! \return `true` if the snapshot could be created, `false` otherwise with |
| 62 //! an appropriate message logged. | 66 //! an appropriate message logged. |
| 63 //! | 67 //! |
| 64 //! \sa ScopedProcessSuspend | 68 //! \sa ScopedProcessSuspend |
| 65 bool Initialize(HANDLE process, ProcessSuspensionState suspension_state); | 69 bool Initialize(HANDLE process, |
| 70 ProcessSuspensionState suspension_state, |
| 71 WinVMAddress debug_critical_section_address); |
| 66 | 72 |
| 67 //! \brief Initializes the object's exception. | 73 //! \brief Initializes the object's exception. |
| 68 //! | 74 //! |
| 69 //! This populates the data to be returned by Exception(). | 75 //! This populates the data to be returned by Exception(). |
| 70 //! | 76 //! |
| 71 //! This method must not be called until after a successful call to | 77 //! This method must not be called until after a successful call to |
| 72 //! Initialize(). | 78 //! Initialize(). |
| 73 //! | 79 //! |
| 74 //! \param[in] exception_information_address The address in the client | 80 //! \param[in] exception_information_address The address in the client |
| 75 //! process's address space of an ExceptionInformation structure. | 81 //! process's address space of an ExceptionInformation structure. |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 128 const ExceptionSnapshot* Exception() const override; | 134 const ExceptionSnapshot* Exception() const override; |
| 129 std::vector<const MemorySnapshot*> ExtraMemory() const override; | 135 std::vector<const MemorySnapshot*> ExtraMemory() const override; |
| 130 | 136 |
| 131 private: | 137 private: |
| 132 // Initializes threads_ on behalf of Initialize(). | 138 // Initializes threads_ on behalf of Initialize(). |
| 133 void InitializeThreads(); | 139 void InitializeThreads(); |
| 134 | 140 |
| 135 // Initializes modules_ on behalf of Initialize(). | 141 // Initializes modules_ on behalf of Initialize(). |
| 136 void InitializeModules(); | 142 void InitializeModules(); |
| 137 | 143 |
| 138 // Initializes peb_memory_ on behalf of Initialize(). | 144 // Initializes various memory blocks reachable from the PEB on behalf of |
| 145 // Initialize(). |
| 139 template <class Traits> | 146 template <class Traits> |
| 140 void InitializePebData(); | 147 void InitializePebData(WinVMAddress debug_critical_section_address); |
| 141 | 148 |
| 142 void AddMemorySnapshot(WinVMAddress address, | 149 void AddMemorySnapshot(WinVMAddress address, |
| 143 WinVMSize size, | 150 WinVMSize size, |
| 144 PointerVector<internal::MemorySnapshotWin>* into); | 151 PointerVector<internal::MemorySnapshotWin>* into); |
| 145 | 152 |
| 146 template <class Traits> | 153 template <class Traits> |
| 147 void AddMemorySnapshotForUNICODE_STRING( | 154 void AddMemorySnapshotForUNICODE_STRING( |
| 148 const process_types::UNICODE_STRING<Traits>& us, | 155 const process_types::UNICODE_STRING<Traits>& us, |
| 149 PointerVector<internal::MemorySnapshotWin>* into); | 156 PointerVector<internal::MemorySnapshotWin>* into); |
| 150 | 157 |
| 151 template <class Traits> | 158 template <class Traits> |
| 152 void AddMemorySnapshotForLdrLIST_ENTRY( | 159 void AddMemorySnapshotForLdrLIST_ENTRY( |
| 153 const process_types::LIST_ENTRY<Traits>& le, | 160 const process_types::LIST_ENTRY<Traits>& le, |
| 154 size_t offset_of_member, | 161 size_t offset_of_member, |
| 155 PointerVector<internal::MemorySnapshotWin>* into); | 162 PointerVector<internal::MemorySnapshotWin>* into); |
| 156 | 163 |
| 157 WinVMSize DetermineSizeOfEnvironmentBlock( | 164 WinVMSize DetermineSizeOfEnvironmentBlock( |
| 158 WinVMAddress start_of_environment_block); | 165 WinVMAddress start_of_environment_block); |
| 159 | 166 |
| 167 // Starting from the address of a CRITICAL_SECTION, walks the doubly-linked |
| 168 // list stored in RTL_CRITICAL_SECTION.DebugInfo.ProcessLocksList adding both |
| 169 // the RTL_CRITICAL_SECTION and the RTL_CRITICAL_SECTION_DEBUG memory blocks |
| 170 // to the snapshot. |
| 171 template <class Traits> |
| 172 void ReadLocks(WinVMAddress start, |
| 173 PointerVector<internal::MemorySnapshotWin>* into); |
| 174 |
| 160 internal::SystemSnapshotWin system_; | 175 internal::SystemSnapshotWin system_; |
| 161 PointerVector<internal::MemorySnapshotWin> peb_memory_; | 176 PointerVector<internal::MemorySnapshotWin> extra_memory_; |
| 162 PointerVector<internal::ThreadSnapshotWin> threads_; | 177 PointerVector<internal::ThreadSnapshotWin> threads_; |
| 163 PointerVector<internal::ModuleSnapshotWin> modules_; | 178 PointerVector<internal::ModuleSnapshotWin> modules_; |
| 164 scoped_ptr<internal::ExceptionSnapshotWin> exception_; | 179 scoped_ptr<internal::ExceptionSnapshotWin> exception_; |
| 165 ProcessReaderWin process_reader_; | 180 ProcessReaderWin process_reader_; |
| 166 UUID report_id_; | 181 UUID report_id_; |
| 167 UUID client_id_; | 182 UUID client_id_; |
| 168 std::map<std::string, std::string> annotations_simple_map_; | 183 std::map<std::string, std::string> annotations_simple_map_; |
| 169 timeval snapshot_time_; | 184 timeval snapshot_time_; |
| 170 InitializationStateDcheck initialized_; | 185 InitializationStateDcheck initialized_; |
| 171 | 186 |
| 172 DISALLOW_COPY_AND_ASSIGN(ProcessSnapshotWin); | 187 DISALLOW_COPY_AND_ASSIGN(ProcessSnapshotWin); |
| 173 }; | 188 }; |
| 174 | 189 |
| 175 } // namespace crashpad | 190 } // namespace crashpad |
| 176 | 191 |
| 177 #endif // CRASHPAD_SNAPSHOT_WIN_PROCESS_SNAPSHOT_WIN_H_ | 192 #endif // CRASHPAD_SNAPSHOT_WIN_PROCESS_SNAPSHOT_WIN_H_ |
| OLD | NEW |