Index: third_party/crashpad/crashpad/util/win/nt_internals.cc |
diff --git a/third_party/crashpad/crashpad/util/win/nt_internals.cc b/third_party/crashpad/crashpad/util/win/nt_internals.cc |
index 46192b353c6432240f4ca847e00e86289e73460c..6fc0999d9e1d0febcf5e048d1e668e6c34e98adb 100644 |
--- a/third_party/crashpad/crashpad/util/win/nt_internals.cc |
+++ b/third_party/crashpad/crashpad/util/win/nt_internals.cc |
@@ -26,6 +26,8 @@ NTSTATUS NTAPI NtOpenThread(HANDLE* ThreadHandle, |
OBJECT_ATTRIBUTES* ObjectAttributes, |
CLIENT_ID* ClientId); |
+void* NTAPI RtlGetUnloadEventTrace(); |
+ |
namespace crashpad { |
NTSTATUS NtQuerySystemInformation( |
@@ -83,6 +85,14 @@ NTSTATUS NtQueryObject(HANDLE handle, |
return_length); |
} |
+template <class Traits> |
+RTL_UNLOAD_EVENT_TRACE<Traits>* RtlGetUnloadEventTrace() { |
+ static const auto rtl_get_unload_event_trace = |
+ GET_FUNCTION_REQUIRED(L"ntdll.dll", ::RtlGetUnloadEventTrace); |
+ return reinterpret_cast<RTL_UNLOAD_EVENT_TRACE<Traits>*>( |
+ rtl_get_unload_event_trace()); |
+} |
+ |
// Explicit instantiations with the only 2 valid template arguments to avoid |
// putting the body of the function in the header. |
template NTSTATUS NtOpenThread<process_types::internal::Traits32>( |
@@ -99,4 +109,10 @@ template NTSTATUS NtOpenThread<process_types::internal::Traits64>( |
const process_types::CLIENT_ID<process_types::internal::Traits64>* |
client_id); |
+template RTL_UNLOAD_EVENT_TRACE<process_types::internal::Traits32>* |
+RtlGetUnloadEventTrace<process_types::internal::Traits32>(); |
+ |
+template RTL_UNLOAD_EVENT_TRACE<process_types::internal::Traits64>* |
+RtlGetUnloadEventTrace<process_types::internal::Traits64>(); |
+ |
} // namespace crashpad |