/** ****************************************************************************** * Xenia : Xbox 360 Emulator Research Project * ****************************************************************************** * Copyright 2013 Ben Vanik. All rights reserved. * * Released under the BSD license - see LICENSE in the root for more details. * ****************************************************************************** */ #include #include "xenia/base/atomic.h" #include "xenia/base/logging.h" #include "xenia/base/string.h" #include "xenia/kernel/kernel_state.h" #include "xenia/kernel/xboxkrnl_private.h" #include "xenia/kernel/objects/xthread.h" #include "xenia/kernel/objects/xuser_module.h" #include "xenia/kernel/util/shim_utils.h" #include "xenia/kernel/util/xex2.h" namespace xe { namespace kernel { struct error_lookup_table { uint32_t base_code; size_t count; const uint32_t* entries; }; // TODO(gibbed): replace these with named error codes const uint32_t error_table_0x00000103[] = { 0x000003E5, // 0x00000103 0, // 0x000000EA, // 0x00000105 0x00000514, // 0x00000106 0x00000515, // 0x00000107 0, // 0, // 0, // 0, // 0x000003FE, // 0x0000010C 0x00000516, // 0x0000010D }; const uint32_t error_table_0x40000002[] = { 0x00000057, // 0x40000002 0, // 0, // 0, // 0x00000517, // 0x40000006 0, // 0x00000460, // 0x40000008 0x000003F6, // 0x40000009 0, // 0, // 0x00000461, // 0x4000000C 0x00000518, // 0x4000000D }; const uint32_t error_table_0x40020056[] = { 0x00000720, // 0x40020056 }; const uint32_t error_table_0x400200AF[] = { 0x00000779, // 0x400200AF }; const uint32_t error_table_0x80000001[] = { 0x80000001, // 0x80000001 0x000003E6, // 0x80000002 0x80000003, // 0x80000003 0x80000004, // 0x80000004 0x000000EA, // 0x80000005 0x00000012, // 0x80000006 0, // 0, // 0, // 0, // 0x0000056F, // 0x8000000B 0, // 0x0000012B, // 0x8000000D 0x0000001C, // 0x8000000E 0x00000015, // 0x8000000F 0x00000015, // 0x80000010 0x000000AA, // 0x80000011 0x00000103, // 0x80000012 0x000000FE, // 0x80000013 0x000000FF, // 0x80000014 0x000000FF, // 0x80000015 0x00000456, // 0x80000016 0, // 0, // 0, // 0x00000103, // 0x8000001A 0x0000044D, // 0x8000001B 0x00000456, // 0x8000001C 0x00000457, // 0x8000001D 0x0000044C, // 0x8000001E 0x0000044E, // 0x8000001F 0, // 0x0000044F, // 0x80000021 0x00000450, // 0x80000022 0, // 0, // 0x00000962, // 0x80000025 }; const uint32_t error_table_0x80000288[] = { 0x0000048D, // 0x80000288 0x0000048E, // 0x80000289 }; const uint32_t error_table_0x80090300[] = { 0x000005AA, // 0x80090300 0x00000006, // 0x80090301 0x00000001, // 0x80090302 0x00000035, // 0x80090303 0x0000054F, // 0x80090304 0x00000554, // 0x80090305 0x00000120, // 0x80090306 0x00000554, // 0x80090307 0x00000057, // 0x80090308 0x00000057, // 0x80090309 0x00000032, // 0x8009030A 0x00000558, // 0x8009030B 0x0000052E, // 0x8009030C 0x00000057, // 0x8009030D 0x00000520, // 0x8009030E 0x00000005, // 0x8009030F 0x00000005, // 0x80090310 0x0000051F, // 0x80090311 0, // 0, // 0, // 0, // 0x00000554, // 0x80090316 0, // 0x000006F8, // 0x80090318 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0x00000057, // 0x80090320 0x0000007A, // 0x80090321 0x00000574, // 0x80090322 0, // 0, // 0x000006FE, // 0x80090325 0x00000057, // 0x80090326 0x00000057, // 0x80090327 0x00000532, // 0x80090328 0x00001770, // 0x80090329 0, // 0, // 0, // 0, // 0, // 0, // 0x00001771, // 0x80090330 0x00000001, // 0x80090331 }; const uint32_t error_table_0xC0000001[] = { 0x0000001F, // 0xC0000001 0x00000001, // 0xC0000002 0x00000057, // 0xC0000003 0x00000018, // 0xC0000004 0x000003E6, // 0xC0000005 0x000003E7, // 0xC0000006 0x000005AE, // 0xC0000007 0x00000006, // 0xC0000008 0x000003E9, // 0xC0000009 0x000000C1, // 0xC000000A 0x00000057, // 0xC000000B 0, // 0x00000057, // 0xC000000D 0x00000002, // 0xC000000E 0x00000002, // 0xC000000F 0x00000001, // 0xC0000010 0x00000026, // 0xC0000011 0x00000022, // 0xC0000012 0x00000015, // 0xC0000013 0x000006F9, // 0xC0000014 0x0000001B, // 0xC0000015 0x000000EA, // 0xC0000016 0x00000008, // 0xC0000017 0x000001E7, // 0xC0000018 0x000001E7, // 0xC0000019 0x00000057, // 0xC000001A 0x00000057, // 0xC000001B 0x00000001, // 0xC000001C 0xC000001D, // 0xC000001D 0x00000005, // 0xC000001E 0x00000005, // 0xC000001F 0x000000C1, // 0xC0000020 0x00000005, // 0xC0000021 0x00000005, // 0xC0000022 0x0000007A, // 0xC0000023 0x00000006, // 0xC0000024 0xC0000025, // 0xC0000025 0xC0000026, // 0xC0000026 0, // 0, // 0, // 0x0000009E, // 0xC000002A 0xC000002B, // 0xC000002B 0x000001E7, // 0xC000002C 0x000001E7, // 0xC000002D 0, // 0, // 0x00000057, // 0xC0000030 0, // 0x00000571, // 0xC0000032 0x0000007B, // 0xC0000033 0x00000002, // 0xC0000034 0x000000B7, // 0xC0000035 0, // 0x00000006, // 0xC0000037 0, // 0x000000A1, // 0xC0000039 0x00000003, // 0xC000003A 0x000000A1, // 0xC000003B 0x0000045D, // 0xC000003C 0x0000045D, // 0xC000003D 0x00000017, // 0xC000003E 0x00000017, // 0xC000003F 0x00000008, // 0xC0000040 0x00000005, // 0xC0000041 0x00000006, // 0xC0000042 0x00000020, // 0xC0000043 0x00000718, // 0xC0000044 0x00000057, // 0xC0000045 0x00000120, // 0xC0000046 0x0000012A, // 0xC0000047 0x00000057, // 0xC0000048 0x00000057, // 0xC0000049 0x0000009C, // 0xC000004A 0x00000005, // 0xC000004B 0x00000057, // 0xC000004C 0x00000057, // 0xC000004D 0x00000057, // 0xC000004E 0x0000011A, // 0xC000004F 0x000000FF, // 0xC0000050 0x00000570, // 0xC0000051 0x00000570, // 0xC0000052 0x00000570, // 0xC0000053 0x00000021, // 0xC0000054 0x00000021, // 0xC0000055 0x00000005, // 0xC0000056 0x00000032, // 0xC0000057 0x00000519, // 0xC0000058 0x0000051A, // 0xC0000059 0x0000051B, // 0xC000005A 0x0000051C, // 0xC000005B 0x0000051D, // 0xC000005C 0x0000051E, // 0xC000005D 0x0000051F, // 0xC000005E 0x00000520, // 0xC000005F 0x00000521, // 0xC0000060 0x00000522, // 0xC0000061 0x00000523, // 0xC0000062 0x00000524, // 0xC0000063 0x00000525, // 0xC0000064 0x00000526, // 0xC0000065 0x00000527, // 0xC0000066 0x00000528, // 0xC0000067 0x00000529, // 0xC0000068 0x0000052A, // 0xC0000069 0x00000056, // 0xC000006A 0x0000052C, // 0xC000006B 0x0000052D, // 0xC000006C 0x0000052E, // 0xC000006D 0x0000052F, // 0xC000006E 0x00000530, // 0xC000006F 0x00000531, // 0xC0000070 0x00000532, // 0xC0000071 0x00000533, // 0xC0000072 0x00000534, // 0xC0000073 0x00000535, // 0xC0000074 0x00000536, // 0xC0000075 0x00000537, // 0xC0000076 0x00000538, // 0xC0000077 0x00000539, // 0xC0000078 0x0000053A, // 0xC0000079 0x0000007F, // 0xC000007A 0x000000C1, // 0xC000007B 0x000003F0, // 0xC000007C 0x0000053C, // 0xC000007D 0x0000009E, // 0xC000007E 0x00000070, // 0xC000007F 0x0000053D, // 0xC0000080 0x0000053E, // 0xC0000081 0x00000044, // 0xC0000082 0x00000103, // 0xC0000083 0x0000053F, // 0xC0000084 0x00000103, // 0xC0000085 0x0000009A, // 0xC0000086 0x0000000E, // 0xC0000087 0x000001E7, // 0xC0000088 0x00000714, // 0xC0000089 0x00000715, // 0xC000008A 0x00000716, // 0xC000008B 0xC000008C, // 0xC000008C 0xC000008D, // 0xC000008D 0xC000008E, // 0xC000008E 0xC000008F, // 0xC000008F 0xC0000090, // 0xC0000090 0xC0000091, // 0xC0000091 0xC0000092, // 0xC0000092 0xC0000093, // 0xC0000093 0xC0000094, // 0xC0000094 0x00000216, // 0xC0000095 0xC0000096, // 0xC0000096 0x00000008, // 0xC0000097 0x000003EE, // 0xC0000098 0x00000540, // 0xC0000099 0x000005AA, // 0xC000009A 0x00000003, // 0xC000009B 0x00000017, // 0xC000009C 0x0000048F, // 0xC000009D 0x00000015, // 0xC000009E 0x000001E7, // 0xC000009F 0x000001E7, // 0xC00000A0 0x000005AD, // 0xC00000A1 0x00000013, // 0xC00000A2 0x00000015, // 0xC00000A3 0x00000541, // 0xC00000A4 0x00000542, // 0xC00000A5 0x00000543, // 0xC00000A6 0x00000544, // 0xC00000A7 0x00000545, // 0xC00000A8 0x00000057, // 0xC00000A9 0, // 0x000000E7, // 0xC00000AB 0x000000E7, // 0xC00000AC 0x000000E6, // 0xC00000AD 0x000000E7, // 0xC00000AE 0x00000001, // 0xC00000AF 0x000000E9, // 0xC00000B0 0x000000E8, // 0xC00000B1 0x00000217, // 0xC00000B2 0x00000218, // 0xC00000B3 0x000000E6, // 0xC00000B4 0x00000079, // 0xC00000B5 0x00000026, // 0xC00000B6 0, // 0, // 0, // 0x00000005, // 0xC00000BA 0x00000032, // 0xC00000BB 0x00000033, // 0xC00000BC 0x00000034, // 0xC00000BD 0x00000035, // 0xC00000BE 0x00000036, // 0xC00000BF 0x00000037, // 0xC00000C0 0x00000038, // 0xC00000C1 0x00000039, // 0xC00000C2 0x0000003A, // 0xC00000C3 0x0000003B, // 0xC00000C4 0x0000003C, // 0xC00000C5 0x0000003D, // 0xC00000C6 0x0000003E, // 0xC00000C7 0x0000003F, // 0xC00000C8 0x00000040, // 0xC00000C9 0x00000041, // 0xC00000CA 0x00000042, // 0xC00000CB 0x00000043, // 0xC00000CC 0x00000044, // 0xC00000CD 0x00000045, // 0xC00000CE 0x00000046, // 0xC00000CF 0x00000047, // 0xC00000D0 0x00000048, // 0xC00000D1 0x00000058, // 0xC00000D2 0, // 0x00000011, // 0xC00000D4 0x00000005, // 0xC00000D5 0x000000F0, // 0xC00000D6 0x00000546, // 0xC00000D7 0, // 0x000000E8, // 0xC00000D9 0x00000547, // 0xC00000DA 0, // 0x00000548, // 0xC00000DC 0x00000549, // 0xC00000DD 0x0000054A, // 0xC00000DE 0x0000054B, // 0xC00000DF 0x0000054C, // 0xC00000E0 0x0000054D, // 0xC00000E1 0x0000012C, // 0xC00000E2 0x0000012D, // 0xC00000E3 0x0000054E, // 0xC00000E4 0x0000054F, // 0xC00000E5 0x00000550, // 0xC00000E6 0x00000551, // 0xC00000E7 0x000006F8, // 0xC00000E8 0, // 0, // 0, // 0, // 0x00000552, // 0xC00000ED 0x00000553, // 0xC00000EE 0x00000057, // 0xC00000EF 0x00000057, // 0xC00000F0 0x00000057, // 0xC00000F1 0x00000057, // 0xC00000F2 0x00000057, // 0xC00000F3 0x00000057, // 0xC00000F4 0x00000057, // 0xC00000F5 0x00000057, // 0xC00000F6 0x00000057, // 0xC00000F7 0x00000057, // 0xC00000F8 0x00000057, // 0xC00000F9 0x00000057, // 0xC00000FA 0x00000003, // 0xC00000FB 0, // 0x000003E9, // 0xC00000FD 0x00000554, // 0xC00000FE 0, // 0x000000CB, // 0xC0000100 0x00000091, // 0xC0000101 0x00000570, // 0xC0000102 0x0000010B, // 0xC0000103 0x00000555, // 0xC0000104 0x00000556, // 0xC0000105 0x000000CE, // 0xC0000106 0x00000961, // 0xC0000107 0x00000964, // 0xC0000108 0x0000013D, // 0xC0000109 0x00000005, // 0xC000010A 0x00000557, // 0xC000010B 0, // 0x00000558, // 0xC000010D 0x00000420, // 0xC000010E 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0x000005A4, // 0xC0000117 0, // 0, // 0, // 0, // 0, // 0, // 0x000003EE, // 0xC000011E 0x00000004, // 0xC000011F 0x000003E3, // 0xC0000120 0x00000005, // 0xC0000121 0x000004BA, // 0xC0000122 0x00000005, // 0xC0000123 0x0000055B, // 0xC0000124 0x0000055C, // 0xC0000125 0x0000055D, // 0xC0000126 0x0000055E, // 0xC0000127 0x00000006, // 0xC0000128 0, // 0, // 0x0000055F, // 0xC000012B 0, // 0x000005AF, // 0xC000012D 0, // 0, // 0x000000C1, // 0xC0000130 0, // 0, // 0x00000576, // 0xC0000133 0, // 0x0000007E, // 0xC0000135 0, // 0, // 0x000000B6, // 0xC0000138 0x0000007F, // 0xC0000139 0, // 0x00000040, // 0xC000013B 0x00000040, // 0xC000013C 0x00000033, // 0xC000013D 0x0000003B, // 0xC000013E 0x0000003B, // 0xC000013F 0x0000003B, // 0xC0000140 0x0000003B, // 0xC0000141 0x0000045A, // 0xC0000142 0, // 0, // 0, // 0, // 0, // 0x0000007C, // 0xC0000148 0x00000056, // 0xC0000149 0, // 0x0000006D, // 0xC000014B 0x000003F1, // 0xC000014C 0x000003F8, // 0xC000014D 0, // 0x000003ED, // 0xC000014F 0x0000045E, // 0xC0000150 0x00000560, // 0xC0000151 0x00000561, // 0xC0000152 0x00000562, // 0xC0000153 0x00000563, // 0xC0000154 0x00000564, // 0xC0000155 0x00000565, // 0xC0000156 0x00000566, // 0xC0000157 0x00000567, // 0xC0000158 0x000003EF, // 0xC0000159 0x00000568, // 0xC000015A 0x00000569, // 0xC000015B 0x000003F9, // 0xC000015C 0x0000056A, // 0xC000015D 0, // 0, // 0, // 0, // 0x00000459, // 0xC0000162 0, // 0, // 0, // 0, // 0, // 0, // 0x00000466, // 0xC0000169 0x00000467, // 0xC000016A 0x00000468, // 0xC000016B 0x0000045F, // 0xC000016C 0, // 0, // 0, // 0, // 0, // 0x00000451, // 0xC0000172 0x00000452, // 0xC0000173 0x00000453, // 0xC0000174 0x00000454, // 0xC0000175 0x00000455, // 0xC0000176 0x00000469, // 0xC0000177 0x00000458, // 0xC0000178 0, // 0x0000056B, // 0xC000017A 0x0000056C, // 0xC000017B 0x000003FA, // 0xC000017C 0x000003FB, // 0xC000017D 0x0000056D, // 0xC000017E 0x0000056E, // 0xC000017F 0x000003FC, // 0xC0000180 0x000003FD, // 0xC0000181 0x00000057, // 0xC0000182 0x0000045D, // 0xC0000183 0x00000016, // 0xC0000184 0x0000045D, // 0xC0000185 0x0000045D, // 0xC0000186 0, // 0x000005DE, // 0xC0000188 0x00000013, // 0xC0000189 0x000006FA, // 0xC000018A 0x000006FB, // 0xC000018B 0x000006FC, // 0xC000018C 0x000006FD, // 0xC000018D 0x000005DC, // 0xC000018E 0x000005DD, // 0xC000018F 0x000006FE, // 0xC0000190 0, // 0x00000700, // 0xC0000192 0x00000701, // 0xC0000193 0x0000046B, // 0xC0000194 0x000004C3, // 0xC0000195 0x000004C4, // 0xC0000196 0x000005DF, // 0xC0000197 0x0000070F, // 0xC0000198 0x00000710, // 0xC0000199 0x00000711, // 0xC000019A 0x00000712, // 0xC000019B }; const uint32_t error_table_0xC0000202[] = { 0x00000572, // 0xC0000202 0x0000003B, // 0xC0000203 0x00000717, // 0xC0000204 0x0000046A, // 0xC0000205 0x000006F8, // 0xC0000206 0x000004BE, // 0xC0000207 0x000004BE, // 0xC0000208 0x00000044, // 0xC0000209 0x00000034, // 0xC000020A 0x00000040, // 0xC000020B 0x00000040, // 0xC000020C 0x00000040, // 0xC000020D 0x00000044, // 0xC000020E 0x0000003B, // 0xC000020F 0x0000003B, // 0xC0000210 0x0000003B, // 0xC0000211 0x0000003B, // 0xC0000212 0x0000003B, // 0xC0000213 0x0000003B, // 0xC0000214 0x0000003B, // 0xC0000215 0x00000032, // 0xC0000216 0x00000032, // 0xC0000217 0, // 0, // 0, // 0, // 0x000017E6, // 0xC000021C 0, // 0, // 0, // 0x0000046C, // 0xC0000220 0x000000C1, // 0xC0000221 0, // 0, // 0x00000773, // 0xC0000224 0x00000490, // 0xC0000225 0, // 0, // 0, // 0, // 0xC000022A, // 0xC000022A 0xC000022B, // 0xC000022B 0, // 0x000004D5, // 0xC000022D 0, // 0, // 0x00000492, // 0xC0000230 0, // 0, // 0x00000774, // 0xC0000233 0x00000775, // 0xC0000234 0x00000006, // 0xC0000235 0x000004C9, // 0xC0000236 0x000004CA, // 0xC0000237 0x000004CB, // 0xC0000238 0x000004CC, // 0xC0000239 0x000004CD, // 0xC000023A 0x000004CE, // 0xC000023B 0x000004CF, // 0xC000023C 0x000004D0, // 0xC000023D 0x000004D1, // 0xC000023E 0x000004D2, // 0xC000023F 0x000004D3, // 0xC0000240 0x000004D4, // 0xC0000241 0, // 0x000004C8, // 0xC0000243 0, // 0, // 0x000004D6, // 0xC0000246 0x000004D7, // 0xC0000247 0x000004D8, // 0xC0000248 0x000000C1, // 0xC0000249 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0x0000054F, // 0xC0000253 0, // 0, // 0, // 0x000004D0, // 0xC0000257 0, // 0x00000573, // 0xC0000259 0, // 0, // 0, // 0, // 0x00000422, // 0xC000025E 0, // 0, // 0, // 0x000000B6, // 0xC0000262 0x0000007F, // 0xC0000263 0x00000120, // 0xC0000264 0x00000476, // 0xC0000265 0, // 0x000010FE, // 0xC0000267 0, // 0, // 0, // 0, // 0x000007D1, // 0xC000026C 0x000004B1, // 0xC000026D 0x00000015, // 0xC000026E 0, // 0, // 0, // 0x00000491, // 0xC0000272 0, // 0, // 0x00001126, // 0xC0000275 0x00001129, // 0xC0000276 0x0000112A, // 0xC0000277 0x00001128, // 0xC0000278 0x00000780, // 0xC0000279 0, // 0, // 0, // 0, // 0, // 0, // 0x00000781, // 0xC0000280 0x000000A1, // 0xC0000281 0, // 0x00000488, // 0xC0000283 0x00000489, // 0xC0000284 0x0000048A, // 0xC0000285 0x0000048B, // 0xC0000286 0x0000048C, // 0xC0000287 0, // 0, // 0x00000005, // 0xC000028A 0x00000005, // 0xC000028B 0, // 0x00000005, // 0xC000028D 0x00000005, // 0xC000028E 0x00000005, // 0xC000028F 0x00000005, // 0xC0000290 0x00001777, // 0xC0000291 0x00001778, // 0xC0000292 0x00001772, // 0xC0000293 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0x00000001, // 0xC000029C 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0x00001127, // 0xC00002B2 0, // 0, // 0, // 0x00000651, // 0xC00002B6 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0x00000575, // 0xC00002C3 0, // 0x000003E6, // 0xC00002C5 0, // 0, // 0, // 0, // 0x000010E8, // 0xC00002CA 0, // 0x000004E3, // 0xC00002CC 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0x00000052, // 0xC00002EA }; const uint32_t error_table_0xC0020001[] = { 0x000006A4, // 0xC0020001 0x000006A5, // 0xC0020002 0x00000006, // 0xC0020003 0x000006A7, // 0xC0020004 0x000006A8, // 0xC0020005 0x000006A9, // 0xC0020006 0x000006AA, // 0xC0020007 0x000006AB, // 0xC0020008 0x000006AC, // 0xC0020009 0x000006AD, // 0xC002000A 0x000006AE, // 0xC002000B 0x000006AF, // 0xC002000C 0x000006B0, // 0xC002000D 0x000006B1, // 0xC002000E 0x000006B2, // 0xC002000F 0x000006B3, // 0xC0020010 0x000006B4, // 0xC0020011 0x000006B5, // 0xC0020012 0x000006B6, // 0xC0020013 0x000006B7, // 0xC0020014 0x000006B8, // 0xC0020015 0x000006B9, // 0xC0020016 0x000006BA, // 0xC0020017 0x000006BB, // 0xC0020018 0x000006BC, // 0xC0020019 0x000006BD, // 0xC002001A 0x000006BE, // 0xC002001B 0x000006BF, // 0xC002001C 0x000006C0, // 0xC002001D 0, // 0x000006C2, // 0xC002001F 0, // 0x000006C4, // 0xC0020021 0x000006C5, // 0xC0020022 0x000006C6, // 0xC0020023 0x000006C7, // 0xC0020024 0x000006C8, // 0xC0020025 0x000006C9, // 0xC0020026 0, // 0x000006CB, // 0xC0020028 0x000006CC, // 0xC0020029 0x000006CD, // 0xC002002A 0x000006CE, // 0xC002002B 0x000006CF, // 0xC002002C 0x000006D0, // 0xC002002D 0x000006D1, // 0xC002002E 0x000006D2, // 0xC002002F 0x000006D3, // 0xC0020030 0x000006D4, // 0xC0020031 0x000006D5, // 0xC0020032 0x000006D6, // 0xC0020033 0x000006D7, // 0xC0020034 0x000006D8, // 0xC0020035 0x000006D9, // 0xC0020036 0x000006DA, // 0xC0020037 0x000006DB, // 0xC0020038 0x000006DC, // 0xC0020039 0x000006DD, // 0xC002003A 0x000006DE, // 0xC002003B 0x000006DF, // 0xC002003C 0x000006E0, // 0xC002003D 0x000006E1, // 0xC002003E 0x000006E2, // 0xC002003F 0x000006E3, // 0xC0020040 0x000006E4, // 0xC0020041 0x000006E5, // 0xC0020042 0x000006E6, // 0xC0020043 0x000006E7, // 0xC0020044 0x000006E8, // 0xC0020045 0x000006E9, // 0xC0020046 0x000006EA, // 0xC0020047 0x000006EB, // 0xC0020048 0x000006FF, // 0xC0020049 0x0000070E, // 0xC002004A 0x0000076A, // 0xC002004B 0x0000076B, // 0xC002004C 0x0000076C, // 0xC002004D 0, // 0x00000719, // 0xC002004F 0x0000071A, // 0xC0020050 0x0000071B, // 0xC0020051 0x0000071C, // 0xC0020052 0x0000071D, // 0xC0020053 0x0000071E, // 0xC0020054 0x0000071F, // 0xC0020055 0, // 0x00000721, // 0xC0020057 0x00000722, // 0xC0020058 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0, // 0x0000077A, // 0xC0020062 0x0000077B, // 0xC0020063 }; const uint32_t error_table_0xC0030001[] = { 0x000006EC, // 0xC0030001 0x000006ED, // 0xC0030002 0x000006EE, // 0xC0030003 0x00000006, // 0xC0030004 0x00000006, // 0xC0030005 0x000006F1, // 0xC0030006 0x000006F2, // 0xC0030007 0x000006F3, // 0xC0030008 0x000006F4, // 0xC0030009 0x000006F5, // 0xC003000A 0x000006F6, // 0xC003000B 0x000006F7, // 0xC003000C }; const uint32_t error_table_0xC0030059[] = { 0x00000723, // 0xC0030059 0x00000724, // 0xC003005A 0x00000725, // 0xC003005B 0x00000726, // 0xC003005C 0, // 0x00000728, // 0xC003005E 0x0000077C, // 0xC003005F 0x0000077D, // 0xC0030060 0x0000077E, // 0xC0030061 }; const uint32_t error_table_0xC0050003[] = { 0x0000045D, // 0xC0050003 0x00000456, // 0xC0050004 }; const uint32_t error_table_0xC0980001[] = { 0x00000037, // 0xC0980001 0x00000037, // 0xC0980002 0, // 0, // 0, // 0, // 0, // 0x00000037, // 0xC0980008 }; #define MAKE_ENTRY(x) \ { x, xe::countof(error_table_##x), error_table_##x } const error_lookup_table error_tables[] = { MAKE_ENTRY(0x00000103), MAKE_ENTRY(0x40000002), MAKE_ENTRY(0x40020056), MAKE_ENTRY(0x400200AF), MAKE_ENTRY(0x80000001), MAKE_ENTRY(0x80000288), MAKE_ENTRY(0x80090300), MAKE_ENTRY(0xC0000001), MAKE_ENTRY(0xC0000202), MAKE_ENTRY(0xC0020001), MAKE_ENTRY(0xC0030001), MAKE_ENTRY(0xC0030059), MAKE_ENTRY(0xC0050003), MAKE_ENTRY(0xC0980001), {0, 0, nullptr}, }; #undef MAKE_ENTRY dword_result_t RtlNtStatusToDosError(dword_t source_status) { uint32_t status = source_status; if (!status || (status & 0x20000000)) { return status; } if ((status >> 16) == 0x8007) { return status & 0xFFFF; } if ((status & 0xF0000000) == 0xD0000000) { // High bits doesn't matter. status &= ~0x30000000; } auto error_table = &error_tables[0]; while (error_table->base_code) { if (status < error_table->base_code) { break; } auto index = status - error_table->base_code; if (index < error_table->count) { uint32_t result = error_table->entries[index]; if (!result) { break; } XELOGE("RtlNtStatusToDosError => %X", result); return result; } ++error_table; } if ((status >> 16) == 0xC001) { return status & 0xFFFF; } XELOGE("RtlNtStatusToDosError lookup NOT IMPLEMENTED"); return 317; // ERROR_MR_MID_NOT_FOUND } DECLARE_XBOXKRNL_EXPORT(RtlNtStatusToDosError, ExportTag::kImportant | ExportTag::kLogResult); } // namespace kernel } // namespace xe void xe::kernel::xboxkrnl::RegisterErrorExports( xe::cpu::ExportResolver* export_resolver, KernelState* kernel_state) {}