ReXGlue SDK
Loading...
Searching...
No Matches
status.h
Go to the documentation of this file.
1
10
11#pragma once
12
13#include <rex/types.h>
14#include <rex/platform.h>
15#include <rex/result.h>
16
17namespace rex::kernel {
18
19using X_HANDLE = u32;
20inline constexpr X_HANDLE kXInvalidHandleValue = static_cast<X_HANDLE>(-1);
21
23using X_STATUS = u32;
29[[nodiscard]] constexpr bool XSUCCEEDED(X_STATUS s) {
30 return (s & 0x80000000) == 0;
31}
32
37[[nodiscard]] constexpr bool XFAILED(X_STATUS s) {
38 return !XSUCCEEDED(s);
39}
40inline constexpr X_STATUS X_STATUS_SUCCESS = 0x00000000;
41inline constexpr X_STATUS X_STATUS_ABANDONED_WAIT_0 = 0x00000080;
42inline constexpr X_STATUS X_STATUS_USER_APC = 0x000000C0;
43inline constexpr X_STATUS X_STATUS_ALERTED = 0x00000101;
44inline constexpr X_STATUS X_STATUS_TIMEOUT = 0x00000102;
45inline constexpr X_STATUS X_STATUS_PENDING = 0x00000103;
46inline constexpr X_STATUS X_STATUS_OBJECT_NAME_EXISTS = 0x40000000;
47inline constexpr X_STATUS X_STATUS_TIMER_RESUME_IGNORED = 0x40000025;
48inline constexpr X_STATUS X_STATUS_BUFFER_OVERFLOW = 0x80000005;
49inline constexpr X_STATUS X_STATUS_NO_MORE_FILES = 0x80000006;
50inline constexpr X_STATUS X_STATUS_UNSUCCESSFUL = 0xC0000001;
51inline constexpr X_STATUS X_STATUS_NOT_IMPLEMENTED = 0xC0000002;
52inline constexpr X_STATUS X_STATUS_INVALID_INFO_CLASS = 0xC0000003;
53inline constexpr X_STATUS X_STATUS_INFO_LENGTH_MISMATCH = 0xC0000004;
54inline constexpr X_STATUS X_STATUS_ACCESS_VIOLATION = 0xC0000005;
55inline constexpr X_STATUS X_STATUS_INVALID_HANDLE = 0xC0000008;
56inline constexpr X_STATUS X_STATUS_INVALID_PARAMETER = 0xC000000D;
57inline constexpr X_STATUS X_STATUS_NO_SUCH_FILE = 0xC000000F;
58inline constexpr X_STATUS X_STATUS_END_OF_FILE = 0xC0000011;
59inline constexpr X_STATUS X_STATUS_NO_MEMORY = 0xC0000017;
60inline constexpr X_STATUS X_STATUS_ALREADY_COMMITTED = 0xC0000021;
61inline constexpr X_STATUS X_STATUS_ACCESS_DENIED = 0xC0000022;
62inline constexpr X_STATUS X_STATUS_BUFFER_TOO_SMALL = 0xC0000023;
63inline constexpr X_STATUS X_STATUS_OBJECT_TYPE_MISMATCH = 0xC0000024;
64inline constexpr X_STATUS X_STATUS_OBJECT_NAME_INVALID = 0xC0000033;
65inline constexpr X_STATUS X_STATUS_OBJECT_NAME_NOT_FOUND = 0xC0000034;
66inline constexpr X_STATUS X_STATUS_OBJECT_NAME_COLLISION = 0xC0000035;
67inline constexpr X_STATUS X_STATUS_OBJECT_PATH_NOT_FOUND = 0xC000003A;
68inline constexpr X_STATUS X_STATUS_SHARING_VIOLATION = 0xC0000043;
69inline constexpr X_STATUS X_STATUS_INVALID_PAGE_PROTECTION = 0xC0000045;
70inline constexpr X_STATUS X_STATUS_MUTANT_NOT_OWNED = 0xC0000046;
71inline constexpr X_STATUS X_STATUS_THREAD_IS_TERMINATING = 0xC000004B;
72inline constexpr X_STATUS X_STATUS_PROCESS_IS_TERMINATING = 0xC000010A;
73inline constexpr X_STATUS X_STATUS_PROCEDURE_NOT_FOUND = 0xC000007A;
74inline constexpr X_STATUS X_STATUS_INSUFFICIENT_RESOURCES = 0xC000009A;
75inline constexpr X_STATUS X_STATUS_NOT_SAME_DEVICE = 0xC00000D4;
76inline constexpr X_STATUS X_STATUS_MEMORY_NOT_ALLOCATED = 0xC00000A0;
77inline constexpr X_STATUS X_STATUS_FILE_IS_A_DIRECTORY = 0xC00000BA;
78inline constexpr X_STATUS X_STATUS_NOT_SUPPORTED = 0xC00000BB;
79inline constexpr X_STATUS X_STATUS_NOT_A_DIRECTORY = 0xC0000103;
80inline constexpr X_STATUS X_STATUS_INVALID_PARAMETER_1 = 0xC00000EF;
81inline constexpr X_STATUS X_STATUS_INVALID_PARAMETER_2 = 0xC00000F0;
82inline constexpr X_STATUS X_STATUS_INVALID_PARAMETER_3 = 0xC00000F1;
83inline constexpr X_STATUS X_STATUS_DLL_NOT_FOUND = 0xC0000135;
84inline constexpr X_STATUS X_STATUS_ENTRYPOINT_NOT_FOUND = 0xC0000139;
85inline constexpr X_STATUS X_STATUS_SEMAPHORE_LIMIT_EXCEEDED = 0xC000012B;
86inline constexpr X_STATUS X_STATUS_MAPPED_ALIGNMENT = 0xC0000220;
87inline constexpr X_STATUS X_STATUS_NOT_FOUND = 0xC0000225;
88inline constexpr X_STATUS X_STATUS_DRIVER_ORDINAL_NOT_FOUND = 0xC0000262;
89inline constexpr X_STATUS X_STATUS_DRIVER_ENTRYPOINT_NOT_FOUND = 0xC0000263;
90
92using X_RESULT = u32;
93inline constexpr i32 kFacilityWin32 = 0x0007;
95[[nodiscard]] constexpr X_RESULT XResultFromWin32(u32 x) {
96 return x;
97}
98
99inline constexpr X_RESULT X_ERROR_SUCCESS = XResultFromWin32(0x00000000);
100inline constexpr X_RESULT X_ERROR_FILE_NOT_FOUND = XResultFromWin32(0x00000002);
101inline constexpr X_RESULT X_ERROR_PATH_NOT_FOUND = XResultFromWin32(0x00000003);
102inline constexpr X_RESULT X_ERROR_ACCESS_DENIED = XResultFromWin32(0x00000005);
103inline constexpr X_RESULT X_ERROR_INVALID_HANDLE = XResultFromWin32(0x00000006);
104inline constexpr X_RESULT X_ERROR_NOT_ENOUGH_MEMORY = XResultFromWin32(0x00000008);
105inline constexpr X_RESULT X_ERROR_NO_MORE_FILES = XResultFromWin32(0x00000012);
106inline constexpr X_RESULT X_ERROR_INVALID_PARAMETER = XResultFromWin32(0x00000057);
107inline constexpr X_RESULT X_ERROR_INSUFFICIENT_BUFFER = XResultFromWin32(0x0000007A);
108inline constexpr X_RESULT X_ERROR_INVALID_NAME = XResultFromWin32(0x0000007B);
109inline constexpr X_RESULT X_ERROR_BAD_ARGUMENTS = XResultFromWin32(0x000000A0);
110inline constexpr X_RESULT X_ERROR_BUSY = XResultFromWin32(0x000000AA);
111inline constexpr X_RESULT X_ERROR_ALREADY_EXISTS = XResultFromWin32(0x000000B7);
112inline constexpr X_RESULT X_ERROR_IO_INCOMPLETE = XResultFromWin32(0x000003E4);
113inline constexpr X_RESULT X_ERROR_IO_PENDING = XResultFromWin32(0x000003E5);
114inline constexpr X_RESULT X_ERROR_DEVICE_NOT_CONNECTED = XResultFromWin32(0x0000048F);
115inline constexpr X_RESULT X_ERROR_NOT_FOUND = XResultFromWin32(0x00000490);
116inline constexpr X_RESULT X_ERROR_CANCELLED = XResultFromWin32(0x000004C7);
117inline constexpr X_RESULT X_ERROR_NOT_LOGGED_ON = XResultFromWin32(0x000004DD);
118inline constexpr X_RESULT X_ERROR_NO_SUCH_USER = XResultFromWin32(0x00000525);
119inline constexpr X_RESULT X_ERROR_FUNCTION_FAILED = XResultFromWin32(0x0000065B);
120inline constexpr X_RESULT X_ERROR_EMPTY = XResultFromWin32(0x000010D2);
121
122using X_HRESULT = u32;
128[[nodiscard]] constexpr X_HRESULT XHRESULTFromWin32(u32 x) {
129 return static_cast<i32>(x) <= 0 ? x : ((x & 0xFFFF) | (kFacilityWin32 << 16) | 0x80000000);
130}
131
132inline constexpr X_HRESULT X_E_FALSE = 0x80000000;
133inline constexpr X_HRESULT X_E_SUCCESS = XHRESULTFromWin32(X_ERROR_SUCCESS);
134inline constexpr X_HRESULT X_E_FAIL = 0x80004005;
135inline constexpr X_HRESULT kXEUnexpected = 0x8000FFFF;
136inline constexpr X_HRESULT kXEOutOfMemory = 0x8007000E;
137inline constexpr X_HRESULT X_E_NO_MORE_FILES = XHRESULTFromWin32(X_ERROR_NO_MORE_FILES);
138inline constexpr X_HRESULT X_E_INVALIDARG = XHRESULTFromWin32(X_ERROR_INVALID_PARAMETER);
139inline constexpr X_HRESULT X_E_DEVICE_NOT_CONNECTED =
140 XHRESULTFromWin32(X_ERROR_DEVICE_NOT_CONNECTED);
141inline constexpr X_HRESULT X_E_NOTFOUND = XHRESULTFromWin32(X_ERROR_NOT_FOUND);
142inline constexpr X_HRESULT X_E_NO_SUCH_USER = XHRESULTFromWin32(X_ERROR_NO_SUCH_USER);
143
144} // namespace rex::kernel
145
146namespace rex::kernel {
147
155
163
171[[nodiscard]] REX_API X_STATUS ToXStatus(const rex::Error& error,
172 X_STATUS unsupported = X_STATUS_NOT_IMPLEMENTED);
173
181[[nodiscard]] REX_API X_RESULT ToXResult(const rex::Error& error,
182 X_RESULT unsupported = X_ERROR_FUNCTION_FAILED);
183
189template <typename T>
190[[nodiscard]] X_STATUS ToXStatus(const Result<T>& result) {
191 return result ? X_STATUS_SUCCESS : ToXStatus(result.error());
192}
193
199template <typename T>
200[[nodiscard]] X_RESULT ToXResult(const Result<T>& result) {
201 return result ? X_ERROR_SUCCESS : ToXResult(result.error());
202}
203
204namespace xboxkrnl {
205
212REX_API u32 RtlNtStatusToDosError(u32 source_status);
213
214} // namespace xboxkrnl
215
216} // namespace rex::kernel
Definition export.h:24
rex::Error StatusError(X_STATUS status)
rex::Error XResultError(X_RESULT result)
u32 X_STATUS
Definition status.h:23
constexpr X_HRESULT XHRESULTFromWin32(u32 x)
Definition status.h:128
X_RESULT ToXResult(const rex::Error &error, X_RESULT unsupported=X_ERROR_FUNCTION_FAILED)
constexpr bool XFAILED(X_STATUS s)
Definition status.h:37
X_STATUS ToXStatus(const rex::Error &error, X_STATUS unsupported=X_STATUS_NOT_IMPLEMENTED)
u32 X_RESULT
Definition status.h:92
constexpr X_RESULT XResultFromWin32(u32 x)
Definition status.h:95
constexpr bool XSUCCEEDED(X_STATUS s)
Definition status.h:29
std::expected< T, Error > Result
Definition result.h:98
Platform flags, packing macros and export markers.
#define REX_API
Definition platform.h:177
u32 RtlNtStatusToDosError(u32 source_status)
Definition result.h:43
Integer types, byte order wrappers and size literals.