840 lines
23 KiB
C++
840 lines
23 KiB
C++
/**
|
|
******************************************************************************
|
|
* 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 <algorithm>
|
|
|
|
#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
|