All task switching is done in software.
[reactos.git] / reactos / ntoskrnl / dbg / errinfo.c
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS kernel
4 * FILE: ntoskrnl/dbg/errinfo.c
5 * PURPOSE: Print information descriptions of error messages
6 * PROGRAMMER: David Welch (welch@mcmail.com)
7 * UPDATE HISTORY:
8 * Created 22/05/98
9 */
10
11 /* INCLUDES ******************************************************************/
12
13 #include <ddk/ntddk.h>
14 #include <internal/debug.h>
15
16 /* GLOBALS *******************************************************************/
17
18 static PCHAR SeverityCodes[] = {"SUC", "INF", "ERR", "WRN"};
19
20 static struct _FACLIST
21 {
22 ULONG Code;
23 PCHAR Name;
24 } FacList[] =
25 {
26 {0, "KERNEL"},
27 {0, NULL}
28 };
29
30 static struct _ERRLIST
31 {
32 NTSTATUS Code;
33 PCHAR Name;
34 PCHAR Text;
35 } ErrList[] =
36 {
37 {STATUS_SUCCESS, "SUCCESS", NULL},
38 {STATUS_INSUFFICIENT_RESOURCES, "INSUFFICIENT_RESOURCES", NULL},
39 // {STATUS_OBJECT_NAME_EXISTS, "OBJECT_NAME_EXISTS", NULL},
40 {STATUS_OBJECT_NAME_COLLISION, "OBJECT_NAME_COLLISION", NULL},
41 {STATUS_CTL_FILE_NOT_SUPPORTED, "CTL_FILE_NOT_SUPPORTED", NULL},
42 {STATUS_PORT_ALREADY_SET, "PORT_ALREADY_SET", NULL},
43 {STATUS_SECTION_NOT_IMAGE, "SECTION_NOT_IMAGE", NULL},
44 {STATUS_BAD_WORKING_SET_LIMIT, "BAD_WORKING_SET_LIMIT", NULL},
45 {STATUS_INCOMPATIBLE_FILE_MAP, "INCOMPATIBLE_FILE_MAP", NULL},
46 {STATUS_HANDLE_NOT_WAITABLE, "HANDLE_NOT_WAITABLE", NULL},
47 {STATUS_PORT_DISCONNECTED, "PORT_DISCONNECTED", NULL},
48 {STATUS_NOT_LOCKED, "NOT_LOCKED", NULL},
49 {STATUS_NOT_MAPPED_VIEW, "NOT_MAPPED_VIEW", NULL},
50 {STATUS_UNABLE_TO_FREE_VM, "UNABLE_TO_FREE_VM", NULL},
51 {STATUS_UNABLE_TO_DELETE_SECTION, "UNABLE_TO_DELETE_SECTION", NULL},
52 {STATUS_MORE_PROCESSING_REQUIRED, "MORE_PROCESSING_REQUIRED", NULL},
53 {STATUS_INVALID_CID, "INVALID_CID", NULL},
54 {STATUS_BAD_INITIAL_STACK, "BAD_INITIAL_STACK", NULL},
55 {STATUS_INVALID_VOLUME_LABEL, "INVALID_VOLUME_LABEL", NULL},
56 {STATUS_SECTION_NOT_EXTENDED, "SECTION_NOT_EXTENDED", NULL},
57 {STATUS_NOT_MAPPED_DATA, "NOT_MAPPED_DATA", NULL},
58 {STATUS_INFO_LENGTH_MISMATCH, "INFO_LENGTH_MISMATCH", NULL},
59 {STATUS_INVALID_INFO_CLASS, "INVALID_INFO_CLASS", NULL},
60 {STATUS_SUSPEND_COUNT_EXCEEDED, "SUSPEND_COUNT_EXCEEDED", NULL},
61 {STATUS_NOTIFY_ENUM_DIR, "NOTIFY_ENUM_DIR", NULL},
62 {STATUS_REGISTRY_RECOVERED, "REGISTRY_RECOVERED", NULL},
63 {STATUS_REGISTRY_IO_FAILED, "REGISTRY_IO_FAILED", NULL},
64 {STATUS_KEY_DELETED, "KEY_DELETED", NULL},
65 {STATUS_NO_LOG_SPACE, "NO_LOG_SPACE", NULL},
66 {STATUS_KEY_HAS_CHILDREN, "KEY_HAS_CHILDREN", NULL},
67 {STATUS_CHILD_MUST_BE_VOLATILE, "CHILD_MUST_BE_VOLATILE", NULL},
68 {STATUS_REGISTRY_CORRUPT, "REGISTRY_CORRUPT", NULL},
69 {STATUS_DLL_NOT_FOUND, "DLL_NOT_FOUND", NULL},
70 {STATUS_DLL_INIT_FAILED, "DLL_INIT_FAILED", NULL},
71 {STATUS_ORDINAL_NOT_FOUND, "ORDINAL_NOT_FOUND", NULL},
72 {STATUS_ENTRYPOINT_NOT_FOUND, "ENTRYPOINT_NOT_FOUND", NULL},
73 {STATUS_MORE_ENTRIES, "MORE_ENTRIES", NULL},
74 {STATUS_BUFFER_OVERFLOW, "BUFFER_OVERFLOW", NULL},
75 {STATUS_NO_MORE_FILES, "NO_MORE_FILES", NULL},
76 {STATUS_NO_INHERITANCE, "NO_INHERITANCE", NULL},
77 {STATUS_NO_MORE_EAS, "NO_MORE_EAS", NULL},
78 {STATUS_NO_MORE_ENTRIES, "NO_MORE_ENTRIES", NULL},
79 {STATUS_GUIDS_EXHAUSTED, "GUIDS_EXHAUSTED", NULL},
80 {STATUS_AGENTS_EXHAUSTED, "AGENTS_EXHAUSTED", NULL},
81 {STATUS_UNSUCCESSFUL, "UNSUCCESSFUL", NULL},
82 {STATUS_NOT_IMPLEMENTED, "NOT_IMPLEMENTED", NULL},
83 {STATUS_ILLEGAL_FUNCTION, "ILLEGAL_FUNCTION", NULL},
84 {STATUS_PAGEFILE_QUOTA, "PAGEFILE_QUOTA", NULL},
85 {STATUS_COMMITMENT_LIMIT, "COMMITMENT_LIMIT", NULL},
86 {STATUS_SECTION_TOO_BIG, "SECTION_TOO_BIG", NULL},
87 {RPC_NT_SS_IN_NULL_CONTEXT, "RPC_NT_SS_IN_NULL_CONTEXT", NULL},
88 {RPC_NT_INVALID_BINDING, "RPC_NT_INVALID_BINDING", NULL},
89 {STATUS_OBJECT_FILE_MISMATCH, "OBJECT_FILE_MISMATCH", NULL},
90 {STATUS_FILE_CLOSED, "FILE_CLOSED", NULL},
91 {STATUS_INVALID_PORT_HANDLE, "INVALID_PORT_HANDLE", NULL},
92 {STATUS_NOT_COMMITTED, "NOT_COMMITTED", NULL},
93 {STATUS_INVALID_PARAMETER, "INVALID_PARAMETER", NULL},
94 {STATUS_INVALID_PARAMETER_1, "INVALID_PARAMETER_1", NULL},
95 {STATUS_INVALID_PARAMETER_2, "INVALID_PARAMETER_2", NULL},
96 {STATUS_INVALID_PARAMETER_3, "INVALID_PARAMETER_3", NULL},
97 {STATUS_INVALID_PARAMETER_4, "INVALID_PARAMETER_4", NULL},
98 {STATUS_INVALID_PARAMETER_5, "INVALID_PARAMETER_5", NULL},
99 {STATUS_INVALID_PARAMETER_6, "INVALID_PARAMETER_6", NULL},
100 {STATUS_INVALID_PARAMETER_7, "INVALID_PARAMETER_7", NULL},
101 {STATUS_INVALID_PARAMETER_8, "INVALID_PARAMETER_8", NULL},
102 {STATUS_INVALID_PARAMETER_9, "INVALID_PARAMETER_9", NULL},
103 {STATUS_INVALID_PARAMETER_10, "INVALID_PARAMETER_10", NULL},
104 {STATUS_INVALID_PARAMETER_11, "INVALID_PARAMETER_11", NULL},
105 {STATUS_INVALID_PARAMETER_12, "INVALID_PARAMETER_12", NULL},
106 {STATUS_INVALID_PARAMETER_MAX, "INVALID_PARAMETER_MAX", NULL},
107 {STATUS_INVALID_PAGE_PROTECTION, "INVALID_PAGE_PROTECTION", NULL},
108 {STATUS_RESOURCE_DATA_NOT_FOUND, "RESOURCE_DATA_NOT_FOUND", NULL},
109 {STATUS_RESOURCE_TYPE_NOT_FOUND, "RESOURCE_TYPE_NOT_FOUND", NULL},
110 {STATUS_RESOURCE_NAME_NOT_FOUND, "RESOURCE_NAME_NOT_FOUND", NULL},
111 {STATUS_RESOURCE_LANG_NOT_FOUND, "RESOURCE_LANG_NOT_FOUND", NULL},
112 {STATUS_NO_SUCH_DEVICE, "NO_SUCH_DEVICE", NULL},
113 {STATUS_NO_SUCH_FILE, "NO_SUCH_FILE", NULL},
114 {STATUS_INVALID_DEVICE_REQUEST, "INVALID_DEVICE_REQUEST", NULL},
115 {STATUS_END_OF_FILE, "END_OF_FILE", NULL},
116 {STATUS_FILE_FORCED_CLOSED, "FILE_FORCED_CLOSED", NULL},
117 {STATUS_WRONG_VOLUME, "WRONG_VOLUME", NULL},
118 {STATUS_NO_MEDIA, "NO_MEDIA", NULL},
119 {STATUS_NO_MEDIA_IN_DEVICE, "NO_MEDIA_IN_DEVICE", NULL},
120 {STATUS_NONEXISTENT_SECTOR, "NONEXISTENT_SECTOR", NULL},
121 {STATUS_WORKING_SET_QUOTA, "WORKING_SET_QUOTA", NULL},
122 {STATUS_CONFLICTING_ADDRESS, "CONFLICTING_ADDRESS", NULL},
123 {STATUS_INVALID_SYSTEM_SERVICE, "INVALID_SYSTEM_SERVICE", NULL},
124 {STATUS_THREAD_IS_TERMINATING, "THREAD_IS_TERMINATING", NULL},
125 {STATUS_PROCESS_IS_TERMINATING, "PROCESS_IS_TERMINATING", NULL},
126 {STATUS_INVALID_LOCK_SEQUENCE, "INVALID_LOCK_SEQUENCE", NULL},
127 {STATUS_INVALID_VIEW_SIZE, "INVALID_VIEW_SIZE", NULL},
128 {STATUS_ALREADY_COMMITTED, "ALREADY_COMMITTED", NULL},
129 {STATUS_ACCESS_DENIED, "ACCESS_DENIED", NULL},
130 {STATUS_FILE_IS_A_DIRECTORY, "FILE_IS_A_DIRECTORY", NULL},
131 {STATUS_CANNOT_DELETE, "CANNOT_DELETE", NULL},
132 {STATUS_INVALID_COMPUTER_NAME, "INVALID_COMPUTER_NAME", NULL},
133 {STATUS_FILE_DELETED, "FILE_DELETED", NULL},
134 {STATUS_DELETE_PENDING, "DELETE_PENDING", NULL},
135 {STATUS_PORT_CONNECTION_REFUSED, "PORT_CONNECTION_REFUSED", NULL},
136 {STATUS_NO_SUCH_PRIVILEGE, "NO_SUCH_PRIVILEGE", NULL},
137 {STATUS_PRIVILEGE_NOT_HELD, "PRIVILEGE_NOT_HELD", NULL},
138 {STATUS_CANNOT_IMPERSONATE, "CANNOT_IMPERSONATE", NULL},
139 {STATUS_LOGON_FAILURE, "LOGON_FAILURE", NULL},
140 {STATUS_ACCOUNT_RESTRICTION, "ACCOUNT_RESTRICTION", NULL},
141 {STATUS_INVALID_LOGON_HOURS, "INVALID_LOGON_HOURS", NULL},
142 {STATUS_INVALID_WORKSTATION, "INVALID_WORKSTATION", NULL},
143 {STATUS_BUFFER_TOO_SMALL, "BUFFER_TOO_SMALL", NULL},
144 {STATUS_UNABLE_TO_DECOMMIT_VM, "UNABLE_TO_DECOMMIT_VM", NULL},
145 {STATUS_DISK_CORRUPT_ERROR, "DISK_CORRUPT_ERROR", NULL},
146 {STATUS_OBJECT_NAME_INVALID, "OBJECT_NAME_INVALID", NULL},
147 {STATUS_OBJECT_NAME_NOT_FOUND, "OBJECT_NAME_NOT_FOUND", NULL},
148 {STATUS_OBJECT_PATH_INVALID, "OBJECT_PATH_INVALID", NULL},
149 {STATUS_OBJECT_PATH_NOT_FOUND, "OBJECT_PATH_NOT_FOUND", NULL},
150 {STATUS_DFS_EXIT_PATH_FOUND, "DFS_EXIT_PATH_FOUND", NULL},
151 {STATUS_PATH_SYNTAX_BAD, "PATH_SYNTAX_BAD", NULL},
152 {STATUS_DATA_OVERRUN, "DATA_OVERRUN", NULL},
153 {STATUS_DATA_LATE_ERROR, "DATA_LATE_ERROR", NULL},
154 {STATUS_DATA_ERROR, "DATA_ERROR", NULL},
155 {STATUS_CRC_ERROR, "CRC_ERROR", NULL},
156 {STATUS_SHARING_VIOLATION, "SHARING_VIOLATION", NULL},
157 {STATUS_QUOTA_EXCEEDED, "QUOTA_EXCEEDED", NULL},
158 {STATUS_MUTANT_NOT_OWNED, "MUTANT_NOT_OWNED", NULL},
159 {STATUS_SEMAPHORE_LIMIT_EXCEEDED, "SEMAPHORE_LIMIT_EXCEEDED", NULL},
160 {STATUS_DISK_FULL, "DISK_FULL", NULL},
161 {STATUS_LOCK_NOT_GRANTED, "LOCK_NOT_GRANTED", NULL},
162 {STATUS_DEVICE_NOT_READY, "DEVICE_NOT_READY", NULL},
163 {STATUS_IO_TIMEOUT, "IO_TIMEOUT", NULL},
164 {STATUS_MEDIA_WRITE_PROTECTED, "MEDIA_WRITE_PROTECTED", NULL},
165 {STATUS_NO_MEDIA_IN_DRIVE, "NO_MEDIA_IN_DRIVE", NULL},
166 {STATUS_VERIFY_REQUIRED, "VERIFY_REQUIRED", NULL},
167 {STATUS_UNRECOGNIZED_MEDIA, "UNRECOGNIZED_MEDIA", NULL},
168 {STATUS_UNRECOGNIZED_VOLUME, "UNRECOGNIZED_VOLUME", NULL},
169 {STATUS_FS_DRIVER_REQUIRED, "FS_DRIVER_REQUIRED", NULL},
170 {STATUS_NOT_SUPPORTED, "NOT_SUPPORTED", NULL},
171 {STATUS_DISK_OPERATION_FAILED, "DISK_OPERATION_FAILED", NULL},
172 {STATUS_FS_QUERY_REQUIRED, "FS_QUERY_REQUIRED", NULL},
173 {0, NULL, NULL}
174 };
175
176 /* FUNCTIONS *****************************************************************/
177
178 VOID
179 DbgGetErrorText(NTSTATUS ErrorCode, PUNICODE_STRING ErrorText, ULONG Flags)
180 {
181 int i;
182 char TempBuf[255], NumBuf[32];
183 ANSI_STRING AnsiString;
184
185 TempBuf[0] = '\0';
186 if (Flags & DBG_GET_SHOW_FACILITY)
187 {
188 if (NT_CUSTOMER(ErrorCode))
189 {
190 sprintf(TempBuf,
191 "%%CUST-%s-",
192 SeverityCodes[NT_SEVERITY(ErrorCode)]);
193 }
194 else
195 {
196 for (i = 0; FacList[i].Name != NULL; i++)
197 {
198 if (FacList[i].Code == NT_FACILITY(ErrorCode))
199 {
200 break;
201 }
202 }
203 if (FacList[i].Name != NULL)
204 {
205 sprintf(TempBuf, "%%%s-%s-",
206 FacList[i].Name,
207 SeverityCodes[NT_SEVERITY(ErrorCode)]);
208 }
209 else
210 {
211 sprintf(TempBuf, "%%UNKNOWN-%s-",
212 SeverityCodes[NT_SEVERITY(ErrorCode)]);
213 }
214 }
215 }
216 for (i = 0; ErrList[i].Name != NULL; i++)
217 {
218 if (ErrorCode == ErrList[i].Code)
219 {
220 break;
221 }
222 }
223 if (ErrList[i].Name != NULL)
224 {
225 if (Flags & DBG_GET_SHOW_FACILITY)
226 {
227 strcat(TempBuf, ErrList[i].Name);
228 strcat(TempBuf, " ");
229 }
230 if (ErrList[i].Text != NULL)
231 {
232 strcat(TempBuf, ErrList[i].Text);
233 }
234 else
235 {
236 strcat(TempBuf, ErrList[i].Name);
237 }
238 }
239 else
240 {
241 if (Flags & DBG_GET_SHOW_FACILITY)
242 {
243 sprintf(NumBuf, "%08lx", ErrorCode);
244 strcat(TempBuf, NumBuf);
245 strcat(TempBuf, " ");
246 }
247 sprintf(NumBuf, "Unknown Message #%08lx", ErrorCode);
248 strcat(TempBuf, NumBuf);
249 }
250 RtlInitAnsiString(&AnsiString, TempBuf);
251 RtlAnsiStringToUnicodeString(ErrorText, &AnsiString, TRUE);
252 }
253
254 VOID
255 DbgPrintErrorMessage(NTSTATUS ErrorCode)
256 {
257 UNICODE_STRING ErrorText;
258
259 DbgGetErrorText(ErrorCode, &ErrorText, 0xf);
260 DbgPrint("%wZ\n", &ErrorText);
261 RtlFreeUnicodeString(&ErrorText);
262 }
263
264