xref: /aosp_15_r20/external/cronet/base/win/nt_status.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2021 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker #include "base/win/nt_status.h"
6*6777b538SAndroid Build Coastguard Worker 
7*6777b538SAndroid Build Coastguard Worker #include <windows.h>
8*6777b538SAndroid Build Coastguard Worker 
9*6777b538SAndroid Build Coastguard Worker extern "C" NTSTATUS WINAPI RtlGetLastNtStatus();
10*6777b538SAndroid Build Coastguard Worker 
11*6777b538SAndroid Build Coastguard Worker namespace base {
12*6777b538SAndroid Build Coastguard Worker namespace win {
13*6777b538SAndroid Build Coastguard Worker 
GetLastNtStatus()14*6777b538SAndroid Build Coastguard Worker NTSTATUS GetLastNtStatus() {
15*6777b538SAndroid Build Coastguard Worker   // This is equivalent to calling NtCurrentTeb() and extracting
16*6777b538SAndroid Build Coastguard Worker   // LastStatusValue from the returned _TEB structure, except that the public
17*6777b538SAndroid Build Coastguard Worker   // _TEB struct definition does not actually specify the location of the
18*6777b538SAndroid Build Coastguard Worker   // LastStatusValue field. We avoid depending on such a definition by
19*6777b538SAndroid Build Coastguard Worker   // internally using RtlGetLastNtStatus() from ntdll.dll instead.
20*6777b538SAndroid Build Coastguard Worker   return ::RtlGetLastNtStatus();
21*6777b538SAndroid Build Coastguard Worker }
22*6777b538SAndroid Build Coastguard Worker 
23*6777b538SAndroid Build Coastguard Worker }  // namespace win
24*6777b538SAndroid Build Coastguard Worker }  // namespace base
25