/** ****************************************************************************** * 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 & 0xFFFF; } 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