xref: /reactos/drivers/filesystems/ext2/src/debug.c (revision 4561998a)
1 /*
2  * COPYRIGHT:        See COPYRIGHT.TXT
3  * PROJECT:          Ext2 File System Driver for WinNT/2K/XP
4  * FILE:             Debug.c
5  * PROGRAMMER:       Matt Wu <mattwu@163.com>
6  * HOMEPAGE:         http://www.ext2fsd.com
7  * UPDATE HISTORY:
8  */
9 
10 /* INCLUDES **************************************************************/
11 
12 #include "stdarg.h"
13 #include "ext2fs.h"
14 
15 /* GLOBALS ***************************************************************/
16 
17 #if EXT2_DEBUG
18 
19 #define SYSTEM_PROCESS_NAME "System"
20 
21 extern PEXT2_GLOBAL Ext2Global;
22 
23 ULONG   DebugFilter = DL_DEFAULT;
24 
25 ULONG  ProcessNameOffset = 0;
26 
27 /* DEFINITIONS ***********************************************************/
28 
29 
30 /* Static Definitions ****************************************************/
31 
32 static PUCHAR IrpMjStrings[] = {
33     "IRP_MJ_CREATE",
34     "IRP_MJ_CREATE_NAMED_PIPE",
35     "IRP_MJ_CLOSE",
36     "IRP_MJ_READ",
37     "IRP_MJ_WRITE",
38     "IRP_MJ_QUERY_INFORMATION",
39     "IRP_MJ_SET_INFORMATION",
40     "IRP_MJ_QUERY_EA",
41     "IRP_MJ_SET_EA",
42     "IRP_MJ_FLUSH_BUFFERS",
43     "IRP_MJ_QUERY_VOLUME_INFORMATION",
44     "IRP_MJ_SET_VOLUME_INFORMATION",
45     "IRP_MJ_DIRECTORY_CONTROL",
46     "IRP_MJ_FILE_SYSTEM_CONTROL",
47     "IRP_MJ_DEVICE_CONTROL",
48     "IRP_MJ_INTERNAL_DEVICE_CONTROL",
49     "IRP_MJ_SHUTDOWN",
50     "IRP_MJ_LOCK_CONTROL",
51     "IRP_MJ_CLEANUP",
52     "IRP_MJ_CREATE_MAILSLOT",
53     "IRP_MJ_QUERY_SECURITY",
54     "IRP_MJ_SET_SECURITY",
55     "IRP_MJ_POWER",
56     "IRP_MJ_SYSTEM_CONTROL",
57     "IRP_MJ_DEVICE_CHANGE",
58     "IRP_MJ_QUERY_QUOTA",
59     "IRP_MJ_SET_QUOTA",
60     "IRP_MJ_PNP"
61 };
62 
63 static PUCHAR FileInformationClassStrings[] = {
64     "Unknown FileInformationClass 0",
65     "FileDirectoryInformation",
66     "FileFullDirectoryInformation",
67     "FileBothDirectoryInformation",
68     "FileBasicInformation",
69     "FileStandardInformation",
70     "FileInternalInformation",
71     "FileEaInformation",
72     "FileAccessInformation",
73     "FileNameInformation",
74     "FileRenameInformation",
75     "FileLinkInformation",
76     "FileNamesInformation",
77     "FileDispositionInformation",
78     "FilePositionInformation",
79     "FileFullEaInformation",
80     "FileModeInformation",
81     "FileAlignmentInformation",
82     "FileAllInformation",
83     "FileAllocationInformation",
84     "FileEndOfFileInformation",
85     "FileAlternateNameInformation",
86     "FileStreamInformation",
87     "FilePipeInformation",
88     "FilePipeLocalInformation",
89     "FilePipeRemoteInformation",
90     "FileMailslotQueryInformation",
91     "FileMailslotSetInformation",
92     "FileCompressionInformation",
93     "FileObjectIdInformation",
94     "FileCompletionInformation",
95     "FileMoveClusterInformation",
96     "FileQuotaInformation",
97     "FileReparsePointInformation",
98     "FileNetworkOpenInformation",
99     "FileAttributeTagInformation",
100     "FileTrackingInformation"
101 };
102 
103 static PUCHAR FsInformationClassStrings[] = {
104     "Unknown FsInformationClass 0",
105     "FileFsVolumeInformation",
106     "FileFsLabelInformation",
107     "FileFsSizeInformation",
108     "FileFsDeviceInformation",
109     "FileFsAttributeInformation",
110     "FileFsControlInformation",
111     "FileFsFullSizeInformation",
112     "FileFsObjectIdInformation"
113 };
114 
115 /*
116  * Ext2Printf
117  *   This function is variable-argument, level-sensitive debug print routine.
118  *   If the specified debug level for the print statement is lower or equal
119  *   to the current debug level, the message will be printed.
120  *
121  * Arguments:
122  *   DebugMessage - Variable argument ascii c string
123  *
124  * Return Value:
125  *   N/A
126  *
127  * NOTES:
128  *   N/A
129  */
130 
131 #define DBG_BUF_LEN 0x100
132 VOID
133 Ext2Printf(
134     PCHAR DebugMessage,
135     ...
136 )
137 {
138     va_list             ap;
139     LARGE_INTEGER       CurrentTime;
140     TIME_FIELDS         TimeFields;
141     CHAR                Buffer[DBG_BUF_LEN];
142     ULONG               i;
143 
144     RtlZeroMemory(Buffer, DBG_BUF_LEN);
145     va_start(ap, DebugMessage);
146 
147     KeQuerySystemTime( &CurrentTime);
148     RtlTimeToTimeFields(&CurrentTime, &TimeFields);
149     _vsnprintf(&Buffer[0], DBG_BUF_LEN, DebugMessage, ap);
150 
151     DbgPrint(DRIVER_NAME":~%d: %2.2d:%2.2d:%2.2d:%3.3d %8.8x:   %s",
152              KeGetCurrentProcessorNumber(),
153              TimeFields.Hour, TimeFields.Minute,
154              TimeFields.Second, TimeFields.Milliseconds,
155              PsGetCurrentThread(), Buffer);
156 
157     va_end(ap);
158 }
159 
160 VOID
161 Ext2NiPrintf(
162     PCHAR DebugMessage,
163     ...
164 )
165 {
166     va_list             ap;
167     LARGE_INTEGER       CurrentTime;
168     TIME_FIELDS         TimeFields;
169     CHAR                Buffer[0x100];
170     ULONG               i;
171 
172     va_start(ap, DebugMessage);
173 
174     KeQuerySystemTime( &CurrentTime);
175     RtlTimeToTimeFields(&CurrentTime, &TimeFields);
176     _vsnprintf(&Buffer[0], 0x100, DebugMessage, ap);
177 
178     DbgPrint(DRIVER_NAME":~%d: %2.2d:%2.2d:%2.2d:%3.3d %8.8x: %s",
179              KeGetCurrentProcessorNumber(),
180              TimeFields.Hour, TimeFields.Minute,
181              TimeFields.Second, TimeFields.Milliseconds,
182              PsGetCurrentThread(), Buffer);
183 
184     va_end(ap);
185 
186 } // Ext2NiPrintf()
187 
188 ULONG
189 Ext2GetProcessNameOffset ( VOID )
190 {
191     PEPROCESS   Process;
192     ULONG       i;
193 
194     Process = PsGetCurrentProcess();
195 
196     for (i = 0; i < PAGE_SIZE; i++) {
197         if (!strncmp(
198                     SYSTEM_PROCESS_NAME,
199                     (PCHAR) Process + i,
200                     strlen(SYSTEM_PROCESS_NAME)
201                 )) {
202 
203             return i;
204         }
205     }
206 
207     DEBUG(DL_ERR, ( ": *** FsdGetProcessNameOffset failed ***\n"));
208 
209     return 0;
210 }
211 
212 
213 VOID
214 Ext2DbgPrintCall (IN PDEVICE_OBJECT   DeviceObject,
215                   IN PIRP             Irp )
216 {
217     PIO_STACK_LOCATION      IoStackLocation;
218     PFILE_OBJECT            FileObject;
219     PWCHAR                  FileName;
220     PEXT2_FCB               Fcb;
221     FILE_INFORMATION_CLASS  FileInformationClass;
222     FS_INFORMATION_CLASS    FsInformationClass;
223 
224     IoStackLocation = IoGetCurrentIrpStackLocation(Irp);
225 
226     FileObject = IoStackLocation->FileObject;
227 
228     FileName = L"Unknown";
229 
230     if (DeviceObject == Ext2Global->DiskdevObject) {
231 
232         FileName = DEVICE_NAME;
233 
234     } else if (DeviceObject == Ext2Global->CdromdevObject) {
235 
236         FileName = CDROM_NAME;
237 
238     } else if (FileObject && FileObject->FsContext) {
239 
240         Fcb = (PEXT2_FCB) FileObject->FsContext;
241 
242         if (Fcb->Identifier.Type == EXT2VCB)  {
243             FileName = L"\\Volume";
244         } else if (Fcb->Identifier.Type == EXT2FCB && Fcb->Mcb->FullName.Buffer) {
245             FileName = Fcb->Mcb->FullName.Buffer;
246         }
247     }
248 
249     switch (IoStackLocation->MajorFunction) {
250 
251     case IRP_MJ_CREATE:
252 
253         FileName = NULL;
254 
255         if (DeviceObject == Ext2Global->DiskdevObject) {
256             FileName = DEVICE_NAME;
257         } else if (DeviceObject == Ext2Global->CdromdevObject) {
258             FileName = CDROM_NAME;
259         } else if (IoStackLocation->FileObject->FileName.Length == 0) {
260             FileName = L"\\Volume";
261         }
262 
263         if (FileName) {
264             DEBUGNI(DL_FUN, ("%s %s %S\n",
265                              Ext2GetCurrentProcessName(),
266                              IrpMjStrings[IoStackLocation->MajorFunction],
267                              FileName
268                             ));
269         } else if (IoStackLocation->FileObject->FileName.Buffer) {
270             DEBUGNI(DL_FUN, ("%s %s %S\n",
271                              Ext2GetCurrentProcessName(),
272                              IrpMjStrings[IoStackLocation->MajorFunction],
273                              IoStackLocation->FileObject->FileName.Buffer
274                             ));
275         } else {
276             DEBUGNI(DL_FUN, ("%s %s %s\n",
277                              Ext2GetCurrentProcessName(),
278                              IrpMjStrings[IoStackLocation->MajorFunction],
279                              "Unknown"
280                             ));
281         }
282 
283         break;
284 
285     case IRP_MJ_CLOSE:
286 
287         DEBUGNI(DL_FUN, ("%s %s %S\n",
288                          Ext2GetCurrentProcessName(),
289                          IrpMjStrings[IoStackLocation->MajorFunction],
290                          FileName
291                         ));
292 
293         break;
294 
295     case IRP_MJ_READ:
296 
297         if (IoStackLocation->MinorFunction & IRP_MN_COMPLETE) {
298             DEBUGNI(DL_FUN, ("%s %s %S IRP_MN_COMPLETE\n",
299                              Ext2GetCurrentProcessName(),
300                              IrpMjStrings[IoStackLocation->MajorFunction],
301                              FileName
302                             ));
303         } else {
304             DEBUGNI(DL_FUN, ("%s %s %S Offset: %I64xh Length: %xh %s%s%s%s%s%s\n",
305                              Ext2GetCurrentProcessName(),
306                              IrpMjStrings[IoStackLocation->MajorFunction],
307                              FileName,
308                              IoStackLocation->Parameters.Read.ByteOffset.QuadPart,
309                              IoStackLocation->Parameters.Read.Length,
310                              (IoStackLocation->MinorFunction & IRP_MN_DPC ? "IRP_MN_DPC " : " "),
311                              (IoStackLocation->MinorFunction & IRP_MN_MDL ? "IRP_MN_MDL " : " "),
312                              (IoStackLocation->MinorFunction & IRP_MN_COMPRESSED ? "IRP_MN_COMPRESSED " : " "),
313                              (Irp->Flags & IRP_PAGING_IO ? "IRP_PAGING_IO " : " "),
314                              (Irp->Flags & IRP_NOCACHE ? "IRP_NOCACHE " : " "),
315                              (FileObject->Flags & FO_SYNCHRONOUS_IO ? "FO_SYNCHRONOUS_IO " : " ")
316                             ));
317         }
318 
319         break;
320 
321     case IRP_MJ_WRITE:
322 
323         if (IoStackLocation->MinorFunction & IRP_MN_COMPLETE)  {
324             DEBUGNI(DL_FUN, ("%s %s %S IRP_MN_COMPLETE\n",
325                              Ext2GetCurrentProcessName(),
326                              IrpMjStrings[IoStackLocation->MajorFunction],
327                              FileName
328                             ));
329         } else {
330             DEBUGNI(DL_FUN, ("%s %s %S Offset: %I64xh Length: %xh %s%s%s%s%s%s\n",
331                              Ext2GetCurrentProcessName(),
332                              IrpMjStrings[IoStackLocation->MajorFunction],
333                              FileName,
334                              IoStackLocation->Parameters.Read.ByteOffset.QuadPart,
335                              IoStackLocation->Parameters.Read.Length,
336                              (IoStackLocation->MinorFunction & IRP_MN_DPC ? "IRP_MN_DPC " : " "),
337                              (IoStackLocation->MinorFunction & IRP_MN_MDL ? "IRP_MN_MDL " : " "),
338                              (IoStackLocation->MinorFunction & IRP_MN_COMPRESSED ? "IRP_MN_COMPRESSED " : " "),
339                              (Irp->Flags & IRP_PAGING_IO ? "IRP_PAGING_IO " : " "),
340                              (Irp->Flags & IRP_NOCACHE ? "IRP_NOCACHE " : " "),
341                              (FileObject->Flags & FO_SYNCHRONOUS_IO ? "FO_SYNCHRONOUS_IO " : " ")
342                             ));
343         }
344 
345         break;
346 
347     case IRP_MJ_QUERY_INFORMATION:
348 
349         FileInformationClass =
350             IoStackLocation->Parameters.QueryFile.FileInformationClass;
351 
352         if (FileInformationClass <= FileMaximumInformation) {
353             DEBUGNI(DL_FUN, ("%s %s %S %s\n",
354                              Ext2GetCurrentProcessName(),
355                              IrpMjStrings[IoStackLocation->MajorFunction],
356                              FileName,
357                              FileInformationClassStrings[FileInformationClass]
358                             ));
359         } else {
360             DEBUGNI(DL_FUN, ("%s %s %S Unknown FileInformationClass %u\n",
361                              Ext2GetCurrentProcessName(),
362                              IrpMjStrings[IoStackLocation->MajorFunction],
363                              FileName,
364                              FileInformationClass
365                             ));
366         }
367 
368         break;
369 
370     case IRP_MJ_SET_INFORMATION:
371 
372         FileInformationClass =
373             IoStackLocation->Parameters.SetFile.FileInformationClass;
374 
375         if (FileInformationClass <= FileMaximumInformation) {
376             DEBUGNI(DL_FUN, ("%s %s %S %s\n",
377                              Ext2GetCurrentProcessName(),
378                              IrpMjStrings[IoStackLocation->MajorFunction],
379                              FileName,
380                              FileInformationClassStrings[FileInformationClass]
381                             ));
382         } else {
383             DEBUGNI(DL_FUN, ("%s %s %S Unknown FileInformationClass %u\n",
384                              Ext2GetCurrentProcessName(),
385                              IrpMjStrings[IoStackLocation->MajorFunction],
386                              FileName,
387                              FileInformationClass
388                             ));
389         }
390 
391         break;
392 
393     case IRP_MJ_QUERY_VOLUME_INFORMATION:
394 
395         FsInformationClass =
396             IoStackLocation->Parameters.QueryVolume.FsInformationClass;
397 
398         if (FsInformationClass <= FileFsMaximumInformation) {
399             DEBUGNI(DL_FUN, ("%s %s %S %s\n",
400                              Ext2GetCurrentProcessName(),
401                              IrpMjStrings[IoStackLocation->MajorFunction],
402                              FileName,
403                              FsInformationClassStrings[FsInformationClass]
404                             ));
405         } else {
406             DEBUGNI(DL_FUN, ("%s %s %S Unknown FsInformationClass %u\n",
407                              Ext2GetCurrentProcessName(),
408                              IrpMjStrings[IoStackLocation->MajorFunction],
409                              FileName,
410                              FsInformationClass
411                             ));
412         }
413 
414         break;
415 
416     case IRP_MJ_DIRECTORY_CONTROL:
417 
418         if (IoStackLocation->MinorFunction & IRP_MN_QUERY_DIRECTORY) {
419 
420 #ifndef _GNU_NTIFS_
421             FileInformationClass =
422                 IoStackLocation->Parameters.QueryDirectory.FileInformationClass;
423 #else
424             FileInformationClass = ((PEXTENDED_IO_STACK_LOCATION)
425                                     IoStackLocation)->Parameters.QueryDirectory.FileInformationClass;
426 #endif
427 
428             if (FileInformationClass <= FileMaximumInformation) {
429                 DEBUGNI(DL_FUN, ("%s %s %S %s\n",
430                                  Ext2GetCurrentProcessName(),
431                                  IrpMjStrings[IoStackLocation->MajorFunction],
432                                  FileName,
433                                  FileInformationClassStrings[FileInformationClass]
434                                 ));
435 
436                 if (
437 #ifndef _GNU_NTIFS_
438                     IoStackLocation->Parameters.QueryDirectory.FileName
439 #else
440                     ((PEXTENDED_IO_STACK_LOCATION)
441                      IoStackLocation)->Parameters.QueryDirectory.FileName
442 #endif
443                 ) {
444 #ifndef _GNU_NTIFS_
445                     DEBUGNI(DL_FUN, ("%s FileName: %.*S FileIndex: %x %s%s%s\n",
446                                      Ext2GetCurrentProcessName(),
447 
448                                      IoStackLocation->Parameters.QueryDirectory.FileName->Length / 2,
449                                      IoStackLocation->Parameters.QueryDirectory.FileName->Buffer,
450                                      IoStackLocation->Parameters.QueryDirectory.FileIndex,
451                                      (IoStackLocation->Flags & SL_RESTART_SCAN ? "SL_RESTART_SCAN " : ""),
452                                      (IoStackLocation->Flags & SL_RETURN_SINGLE_ENTRY ? "SL_RETURN_SINGLE_ENTRY " : ""),
453                                      ((IoStackLocation->Flags & SL_INDEX_SPECIFIED) ? "SL_INDEX_SPECIFIED " : "")
454                                     ));
455 
456 #else
457                     DEBUGNI(DL_FUN, ("%s FileName: %.*S FileIndex: %x %s%s%s\n",
458                                      Ext2GetCurrentProcessName(),
459 
460                                      ((PEXTENDED_IO_STACK_LOCATION)
461                                       IoStackLocation)->Parameters.QueryDirectory.FileName->Length / 2,
462                                      ((PEXTENDED_IO_STACK_LOCATION)
463                                       IoStackLocation)->Parameters.QueryDirectory.FileName->Buffer,
464                                      ((PEXTENDED_IO_STACK_LOCATION)
465                                       IoStackLocation)->Parameters.QueryDirectory.FileIndex,
466                                      (IoStackLocation->Flags & SL_RESTART_SCAN ? "SL_RESTART_SCAN " : ""),
467                                      (IoStackLocation->Flags & SL_RETURN_SINGLE_ENTRY ? "SL_RETURN_SINGLE_ENTRY " : ""),
468                                      ((IoStackLocation->Flags & SL_INDEX_SPECIFIED) ? "SL_INDEX_SPECIFIED " : "")
469                                     ));
470 #endif
471                 } else {
472 #ifndef _GNU_NTIFS_
473                     DEBUGNI(DL_FUN, ("%s FileName: FileIndex: %#x %s%s%s\n",
474                                      Ext2GetCurrentProcessName(),
475                                      IoStackLocation->Parameters.QueryDirectory.FileIndex,
476                                      (IoStackLocation->Flags & SL_RESTART_SCAN ? "SL_RESTART_SCAN " : ""),
477                                      (IoStackLocation->Flags & SL_RETURN_SINGLE_ENTRY ? "SL_RETURN_SINGLE_ENTRY " : ""),
478                                      (IoStackLocation->Flags & SL_INDEX_SPECIFIED ? "SL_INDEX_SPECIFIED " : "")
479                                     ));
480 #else
481                     DEBUGNI(DL_FUN, ("%s FileName: FileIndex: %#x %s%s%s\n",
482                                      Ext2GetCurrentProcessName(),
483                                      ((PEXTENDED_IO_STACK_LOCATION)
484                                       IoStackLocation)->Parameters.QueryDirectory.FileIndex,
485                                      (IoStackLocation->Flags & SL_RESTART_SCAN ? "SL_RESTART_SCAN " : ""),
486                                      (IoStackLocation->Flags & SL_RETURN_SINGLE_ENTRY ? "SL_RETURN_SINGLE_ENTRY " : ""),
487                                      (IoStackLocation->Flags & SL_INDEX_SPECIFIED ? "SL_INDEX_SPECIFIED " : "")
488                                     ));
489 #endif
490                 }
491             } else {
492                 DEBUGNI(DL_FUN, ("%s %s %S Unknown FileInformationClass %u\n",
493                                  Ext2GetCurrentProcessName(),
494                                  IrpMjStrings[IoStackLocation->MajorFunction],
495                                  FileName,
496                                  FileInformationClass
497                                 ));
498             }
499         } else if (IoStackLocation->MinorFunction & IRP_MN_NOTIFY_CHANGE_DIRECTORY) {
500             DEBUGNI(DL_FUN, ("%s %s %S IRP_MN_NOTIFY_CHANGE_DIRECTORY\n",
501                              Ext2GetCurrentProcessName(),
502                              IrpMjStrings[IoStackLocation->MajorFunction],
503                              FileName
504                             ));
505         } else {
506             DEBUGNI(DL_FUN, ("%s %s %S Unknown minor function %#x\n",
507                              Ext2GetCurrentProcessName(),
508                              IrpMjStrings[IoStackLocation->MajorFunction],
509                              FileName,
510                              IoStackLocation->MinorFunction
511                             ));
512         }
513 
514         break;
515 
516     case IRP_MJ_FILE_SYSTEM_CONTROL:
517 
518         if (IoStackLocation->MinorFunction == IRP_MN_USER_FS_REQUEST) {
519 #ifndef _GNU_NTIFS_
520             DEBUGNI(DL_FUN, ( "%s %s %S IRP_MN_USER_FS_REQUEST FsControlCode: %#x\n",
521                               Ext2GetCurrentProcessName(),
522                               IrpMjStrings[IoStackLocation->MajorFunction],
523                               FileName,
524                               IoStackLocation->Parameters.FileSystemControl.FsControlCode
525                             ));
526 #else
527             DEBUGNI(DL_FUN, ("%s %s %S IRP_MN_USER_FS_REQUEST FsControlCode: %#x\n",
528                              Ext2GetCurrentProcessName(),
529                              IrpMjStrings[IoStackLocation->MajorFunction],
530                              FileName,
531                              ((PEXTENDED_IO_STACK_LOCATION)
532                               IoStackLocation)->Parameters.FileSystemControl.FsControlCode
533                             ));
534 #endif
535         } else if (IoStackLocation->MinorFunction == IRP_MN_MOUNT_VOLUME) {
536             DEBUGNI(DL_FUN, ("%s %s %S IRP_MN_MOUNT_VOLUME DeviceObject: %#x\n",
537                              Ext2GetCurrentProcessName(),
538                              IrpMjStrings[IoStackLocation->MajorFunction],
539                              FileName,
540                              IoStackLocation->Parameters.MountVolume.DeviceObject
541                             ));
542         } else if (IoStackLocation->MinorFunction == IRP_MN_VERIFY_VOLUME) {
543             DEBUGNI(DL_FUN, ("%s %s %S IRP_MN_VERIFY_VOLUME DeviceObject: %#x\n",
544                              Ext2GetCurrentProcessName(),
545                              IrpMjStrings[IoStackLocation->MajorFunction],
546                              FileName,
547                              IoStackLocation->Parameters.VerifyVolume.DeviceObject
548                             ));
549         } else if (IoStackLocation->MinorFunction == IRP_MN_LOAD_FILE_SYSTEM) {
550             DEBUGNI(DL_FUN, ("%s %s %S IRP_MN_LOAD_FILE_SYSTEM\n",
551                              Ext2GetCurrentProcessName(),
552                              IrpMjStrings[IoStackLocation->MajorFunction],
553                              FileName
554                             ));
555         }
556 #if (_WIN32_WINNT >= 0x0500)
557         else if (IoStackLocation->MinorFunction == IRP_MN_KERNEL_CALL) {
558             DEBUGNI(DL_FUN, ("%s %s %S IRP_MN_KERNEL_CALL\n",
559                              Ext2GetCurrentProcessName(),
560                              IrpMjStrings[IoStackLocation->MajorFunction],
561                              FileName
562                             ));
563         }
564 #endif // (_WIN32_WINNT >= 0x0500)
565         else {
566             DEBUGNI(DL_FUN, ("%s %s %S Unknown minor function %#x\n",
567                              Ext2GetCurrentProcessName(),
568                              IrpMjStrings[IoStackLocation->MajorFunction],
569                              FileName,
570                              IoStackLocation->MinorFunction
571                             ));
572         }
573 
574         break;
575 
576     case IRP_MJ_DEVICE_CONTROL:
577 
578         DEBUGNI(DL_FUN, ("%s %s %S IoControlCode: %#x\n",
579                          Ext2GetCurrentProcessName(),
580                          IrpMjStrings[IoStackLocation->MajorFunction],
581                          FileName,
582                          IoStackLocation->Parameters.DeviceIoControl.IoControlCode
583                         ));
584 
585         break;
586 
587     case IRP_MJ_LOCK_CONTROL:
588 
589         if (IoStackLocation->MinorFunction & IRP_MN_LOCK) {
590 #ifndef _GNU_NTIFS_
591             DEBUGNI(DL_FUN, ("%s %s %S IRP_MN_LOCK Offset: %I64xh Length: %I64xh Key: %u %s%s\n",
592                              Ext2GetCurrentProcessName(),
593                              IrpMjStrings[IoStackLocation->MajorFunction],
594                              FileName,
595                              IoStackLocation->Parameters.LockControl.ByteOffset.QuadPart,
596                              IoStackLocation->Parameters.LockControl.Length->QuadPart,
597                              IoStackLocation->Parameters.LockControl.Key,
598                              (IoStackLocation->Flags & SL_FAIL_IMMEDIATELY ? "SL_FAIL_IMMEDIATELY " : ""),
599                              (IoStackLocation->Flags & SL_EXCLUSIVE_LOCK ? "SL_EXCLUSIVE_LOCK " : "")
600                             ));
601 #else
602             DEBUGNI(DL_FUN, ("%s %s %S IRP_MN_LOCK Offset: %I64xh Length: %I64xh Key: %u %s%s\n",
603                              Ext2GetCurrentProcessName(),
604                              IrpMjStrings[IoStackLocation->MajorFunction],
605                              FileName,
606                              ((PEXTENDED_IO_STACK_LOCATION)
607                               IoStackLocation)->Parameters.LockControl.ByteOffset.QuadPart,
608                              ((PEXTENDED_IO_STACK_LOCATION)
609                               IoStackLocation)->Parameters.LockControl.Length->QuadPart,
610                              ((PEXTENDED_IO_STACK_LOCATION)
611                               IoStackLocation)->Parameters.LockControl.Key,
612                              (IoStackLocation->Flags & SL_FAIL_IMMEDIATELY ? "SL_FAIL_IMMEDIATELY " : ""),
613                              (IoStackLocation->Flags & SL_EXCLUSIVE_LOCK ? "SL_EXCLUSIVE_LOCK " : "")
614                             ));
615 #endif
616         } else if (IoStackLocation->MinorFunction & IRP_MN_UNLOCK_SINGLE) {
617 #ifndef _GNU_NTIFS_
618             DEBUGNI(DL_FUN, ("%s %s %S IRP_MN_UNLOCK_SINGLE Offset: %I64xh Length: %I64xh Key: %u\n",
619                              Ext2GetCurrentProcessName(),
620                              IrpMjStrings[IoStackLocation->MajorFunction],
621                              FileName,
622                              IoStackLocation->Parameters.LockControl.ByteOffset.QuadPart,
623                              IoStackLocation->Parameters.LockControl.Length->QuadPart,
624                              IoStackLocation->Parameters.LockControl.Key
625                             ));
626 #else
627             DEBUGNI(DL_FUN, ("%s %s %S IRP_MN_UNLOCK_SINGLE Offset: %I64xh Length: %I64xh Key: %u\n",
628                              Ext2GetCurrentProcessName(),
629                              IrpMjStrings[IoStackLocation->MajorFunction],
630                              FileName,
631                              ((PEXTENDED_IO_STACK_LOCATION)
632                               IoStackLocation)->Parameters.LockControl.ByteOffset.QuadPart,
633                              ((PEXTENDED_IO_STACK_LOCATION)
634                               IoStackLocation)->Parameters.LockControl.Length->QuadPart,
635                              ((PEXTENDED_IO_STACK_LOCATION)
636                               IoStackLocation)->Parameters.LockControl.Key
637                             ));
638 #endif
639         } else if (IoStackLocation->MinorFunction & IRP_MN_UNLOCK_ALL) {
640             DEBUGNI(DL_FUN, ("%s %s %S IRP_MN_UNLOCK_ALL\n",
641                              Ext2GetCurrentProcessName(),
642                              IrpMjStrings[IoStackLocation->MajorFunction],
643                              FileName
644                             ));
645         } else if (IoStackLocation->MinorFunction & IRP_MN_UNLOCK_ALL_BY_KEY) {
646 #ifndef _GNU_NTIFS_
647             DEBUGNI(DL_FUN, ("%s %s %S IRP_MN_UNLOCK_ALL_BY_KEY Key: %u\n",
648                              Ext2GetCurrentProcessName(),
649                              IrpMjStrings[IoStackLocation->MajorFunction],
650                              FileName,
651                              IoStackLocation->Parameters.LockControl.Key
652                             ));
653 #else
654             DEBUGNI(DL_FUN, ("%s %s %S IRP_MN_UNLOCK_ALL_BY_KEY Key: %u\n",
655                              Ext2GetCurrentProcessName(),
656                              IrpMjStrings[IoStackLocation->MajorFunction],
657                              FileName,
658                              ((PEXTENDED_IO_STACK_LOCATION)
659                               IoStackLocation)->Parameters.LockControl.Key
660                             ));
661 #endif
662         } else {
663             DEBUGNI(DL_FUN, ("%s %s %S Unknown minor function %#x\n",
664                              Ext2GetCurrentProcessName(),
665                              IrpMjStrings[IoStackLocation->MajorFunction],
666                              FileName,
667                              IoStackLocation->MinorFunction
668                             ));
669         }
670 
671         break;
672 
673     case IRP_MJ_CLEANUP:
674 
675         DEBUGNI(DL_FUN, ("%s %s %S\n",
676                          Ext2GetCurrentProcessName(),
677                          IrpMjStrings[IoStackLocation->MajorFunction],
678                          FileName
679                         ));
680 
681         break;
682 
683     case IRP_MJ_SHUTDOWN:
684 
685         DEBUGNI(DL_FUN, ("%s %s %S\n",
686                          Ext2GetCurrentProcessName(),
687                          IrpMjStrings[IoStackLocation->MajorFunction],
688                          FileName
689                         ));
690 
691         break;
692 
693 #if (_WIN32_WINNT >= 0x0500)
694     case IRP_MJ_PNP:
695 
696         DEBUGNI(DL_FUN, ( "%s %s %S\n",
697                           Ext2GetCurrentProcessName(),
698                           IrpMjStrings[IoStackLocation->MajorFunction],
699                           FileName
700                         ));
701         break;
702 #endif // (_WIN32_WINNT >= 0x0500)
703 
704     default:
705 
706         DEBUGNI(DL_FUN, ("%s %s %S\n",
707                          Ext2GetCurrentProcessName(),
708                          IrpMjStrings[IoStackLocation->MajorFunction],
709                          FileName
710                         ));
711     }
712 }
713 
714 VOID
715 Ext2DbgPrintComplete (IN PIRP Irp, IN BOOLEAN bPrint)
716 {
717     PIO_STACK_LOCATION IoStackLocation;
718 
719     if (!Irp)
720         return;
721 
722     if (Irp->IoStatus.Status != STATUS_SUCCESS) {
723 
724         IoStackLocation = IoGetCurrentIrpStackLocation(Irp);
725 
726         if (bPrint) {
727             DEBUGNI(DL_FUN, ("%s %s Status: %s (%#x).\n",
728                              Ext2GetCurrentProcessName(),
729                              IrpMjStrings[IoStackLocation->MajorFunction],
730                              Ext2NtStatusToString(Irp->IoStatus.Status),
731                              Irp->IoStatus.Status
732                             ));
733         }
734     }
735 }
736 
737 PUCHAR
738 Ext2NtStatusToString ( IN NTSTATUS Status )
739 {
740     switch (Status) {
741 
742     case 0x00000000:
743         return "STATUS_SUCCESS";
744     case 0x00000001:
745         return "STATUS_WAIT_1";
746     case 0x00000002:
747         return "STATUS_WAIT_2";
748     case 0x00000003:
749         return "STATUS_WAIT_3";
750     case 0x0000003F:
751         return "STATUS_WAIT_63";
752     case 0x00000080:
753         return "STATUS_ABANDONED_WAIT_0";
754     case 0x000000BF:
755         return "STATUS_ABANDONED_WAIT_63";
756     case 0x000000C0:
757         return "STATUS_USER_APC";
758     case 0x00000100:
759         return "STATUS_KERNEL_APC";
760     case 0x00000101:
761         return "STATUS_ALERTED";
762     case 0x00000102:
763         return "STATUS_TIMEOUT";
764     case 0x00000103:
765         return "STATUS_PENDING";
766     case 0x00000104:
767         return "STATUS_REPARSE";
768     case 0x00000105:
769         return "STATUS_MORE_ENTRIES";
770     case 0x00000106:
771         return "STATUS_NOT_ALL_ASSIGNED";
772     case 0x00000107:
773         return "STATUS_SOME_NOT_MAPPED";
774     case 0x00000108:
775         return "STATUS_OPLOCK_BREAK_IN_PROGRESS";
776     case 0x00000109:
777         return "STATUS_VOLUME_MOUNTED";
778     case 0x0000010A:
779         return "STATUS_RXACT_COMMITTED";
780     case 0x0000010B:
781         return "STATUS_NOTIFY_CLEANUP";
782     case 0x0000010C:
783         return "STATUS_NOTIFY_ENUM_DIR";
784     case 0x0000010D:
785         return "STATUS_NO_QUOTAS_FOR_ACCOUNT";
786     case 0x0000010E:
787         return "STATUS_PRIMARY_TRANSPORT_CONNECT_FAILED";
788     case 0x00000110:
789         return "STATUS_PAGE_FAULT_TRANSITION";
790     case 0x00000111:
791         return "STATUS_PAGE_FAULT_DEMAND_ZERO";
792     case 0x00000112:
793         return "STATUS_PAGE_FAULT_COPY_ON_WRITE";
794     case 0x00000113:
795         return "STATUS_PAGE_FAULT_GUARD_PAGE";
796     case 0x00000114:
797         return "STATUS_PAGE_FAULT_PAGING_FILE";
798     case 0x00000115:
799         return "STATUS_CACHE_PAGE_LOCKED";
800     case 0x00000116:
801         return "STATUS_CRASH_DUMP";
802     case 0x00000117:
803         return "STATUS_BUFFER_ALL_ZEROS";
804     case 0x00000118:
805         return "STATUS_REPARSE_OBJECT";
806     case 0x00000119:
807         return "STATUS_RESOURCE_REQUIREMENTS_CHANGED";
808     case 0x00000120:
809         return "STATUS_TRANSLATION_COMPLETE";
810     case 0x00000121:
811         return "STATUS_DS_MEMBERSHIP_EVALUATED_LOCALLY";
812     case 0x00010001:
813         return "DBG_EXCEPTION_HANDLED";
814     case 0x00010002:
815         return "DBG_CONTINUE";
816     case 0x40000000:
817         return "STATUS_OBJECT_NAME_EXISTS";
818     case 0x40000001:
819         return "STATUS_THREAD_WAS_SUSPENDED";
820     case 0x40000002:
821         return "STATUS_WORKING_SET_LIMIT_RANGE";
822     case 0x40000003:
823         return "STATUS_IMAGE_NOT_AT_BASE";
824     case 0x40000004:
825         return "STATUS_RXACT_STATE_CREATED";
826     case 0x40000005:
827         return "STATUS_SEGMENT_NOTIFICATION";
828     case 0x40000006:
829         return "STATUS_LOCAL_USER_SESSION_KEY";
830     case 0x40000007:
831         return "STATUS_BAD_CURRENT_DIRECTORY";
832     case 0x40000008:
833         return "STATUS_SERIAL_MORE_WRITES";
834     case 0x40000009:
835         return "STATUS_REGISTRY_RECOVERED";
836     case 0x4000000A:
837         return "STATUS_FT_READ_RECOVERY_FROM_BACKUP";
838     case 0x4000000B:
839         return "STATUS_FT_WRITE_RECOVERY";
840     case 0x4000000C:
841         return "STATUS_SERIAL_COUNTER_TIMEOUT";
842     case 0x4000000D:
843         return "STATUS_NULL_LM_PASSWORD";
844     case 0x4000000E:
845         return "STATUS_IMAGE_MACHINE_TYPE_MISMATCH";
846     case 0x4000000F:
847         return "STATUS_RECEIVE_PARTIAL";
848     case 0x40000010:
849         return "STATUS_RECEIVE_EXPEDITED";
850     case 0x40000011:
851         return "STATUS_RECEIVE_PARTIAL_EXPEDITED";
852     case 0x40000012:
853         return "STATUS_EVENT_DONE";
854     case 0x40000013:
855         return "STATUS_EVENT_PENDING";
856     case 0x40000014:
857         return "STATUS_CHECKING_FILE_SYSTEM";
858     case 0x40000015:
859         return "STATUS_FATAL_APP_EXIT";
860     case 0x40000016:
861         return "STATUS_PREDEFINED_HANDLE";
862     case 0x40000017:
863         return "STATUS_WAS_UNLOCKED";
864     case 0x40000018:
865         return "STATUS_SERVICE_NOTIFICATION";
866     case 0x40000019:
867         return "STATUS_WAS_LOCKED";
868     case 0x4000001A:
869         return "STATUS_LOG_HARD_ERROR";
870     case 0x4000001B:
871         return "STATUS_ALREADY_WIN32";
872     case 0x4000001C:
873         return "STATUS_WX86_UNSIMULATE";
874     case 0x4000001D:
875         return "STATUS_WX86_CONTINUE";
876     case 0x4000001E:
877         return "STATUS_WX86_SINGLE_STEP";
878     case 0x4000001F:
879         return "STATUS_WX86_BREAKPOINT";
880     case 0x40000020:
881         return "STATUS_WX86_EXCEPTION_CONTINUE";
882     case 0x40000021:
883         return "STATUS_WX86_EXCEPTION_LASTCHANCE";
884     case 0x40000022:
885         return "STATUS_WX86_EXCEPTION_CHAIN";
886     case 0x40000023:
887         return "STATUS_IMAGE_MACHINE_TYPE_MISMATCH_EXE";
888     case 0x40000024:
889         return "STATUS_NO_YIELD_PERFORMED";
890     case 0x40000025:
891         return "STATUS_TIMER_RESUME_IGNORED";
892     case 0x40000026:
893         return "STATUS_ARBITRATION_UNHANDLED";
894     case 0x40000027:
895         return "STATUS_CARDBUS_NOT_SUPPORTED";
896     case 0x40000028:
897         return "STATUS_WX86_CREATEWX86TIB";
898     case 0x40000029:
899         return "STATUS_MP_PROCESSOR_MISMATCH";
900     case 0x40010001:
901         return "DBG_REPLY_LATER";
902     case 0x40010002:
903         return "DBG_UNABLE_TO_PROVIDE_HANDLE";
904     case 0x40010003:
905         return "DBG_TERMINATE_THREAD";
906     case 0x40010004:
907         return "DBG_TERMINATE_PROCESS";
908     case 0x40010005:
909         return "DBG_CONTROL_C";
910     case 0x40010006:
911         return "DBG_PRINTEXCEPTION_C";
912     case 0x40010007:
913         return "DBG_RIPEXCEPTION";
914     case 0x40010008:
915         return "DBG_CONTROL_BREAK";
916     case 0x80000001:
917         return "STATUS_GUARD_PAGE_VIOLATION";
918     case 0x80000002:
919         return "STATUS_DATATYPE_MISALIGNMENT";
920     case 0x80000003:
921         return "STATUS_BREAKPOINT";
922     case 0x80000004:
923         return "STATUS_SINGLE_STEP";
924     case 0x80000005:
925         return "STATUS_BUFFER_OVERFLOW";
926     case 0x80000006:
927         return "STATUS_NO_MORE_FILES";
928     case 0x80000007:
929         return "STATUS_WAKE_SYSTEM_DEBUGGER";
930     case 0x8000000A:
931         return "STATUS_HANDLES_CLOSED";
932     case 0x8000000B:
933         return "STATUS_NO_INHERITANCE";
934     case 0x8000000C:
935         return "STATUS_GUID_SUBSTITUTION_MADE";
936     case 0x8000000D:
937         return "STATUS_PARTIAL_COPY";
938     case 0x8000000E:
939         return "STATUS_DEVICE_PAPER_EMPTY";
940     case 0x8000000F:
941         return "STATUS_DEVICE_POWERED_OFF";
942     case 0x80000010:
943         return "STATUS_DEVICE_OFF_LINE";
944     case 0x80000011:
945         return "STATUS_DEVICE_BUSY";
946     case 0x80000012:
947         return "STATUS_NO_MORE_EAS";
948     case 0x80000013:
949         return "STATUS_INVALID_EA_NAME";
950     case 0x80000014:
951         return "STATUS_EA_LIST_INCONSISTENT";
952     case 0x80000015:
953         return "STATUS_INVALID_EA_FLAG";
954     case 0x80000016:
955         return "STATUS_VERIFY_REQUIRED";
956     case 0x80000017:
957         return "STATUS_EXTRANEOUS_INFORMATION";
958     case 0x80000018:
959         return "STATUS_RXACT_COMMIT_NECESSARY";
960     case 0x8000001A:
961         return "STATUS_NO_MORE_ENTRIES";
962     case 0x8000001B:
963         return "STATUS_FILEMARK_DETECTED";
964     case 0x8000001C:
965         return "STATUS_MEDIA_CHANGED";
966     case 0x8000001D:
967         return "STATUS_BUS_RESET";
968     case 0x8000001E:
969         return "STATUS_END_OF_MEDIA";
970     case 0x8000001F:
971         return "STATUS_BEGINNING_OF_MEDIA";
972     case 0x80000020:
973         return "STATUS_MEDIA_CHECK";
974     case 0x80000021:
975         return "STATUS_SETMARK_DETECTED";
976     case 0x80000022:
977         return "STATUS_NO_DATA_DETECTED";
978     case 0x80000023:
979         return "STATUS_REDIRECTOR_HAS_OPEN_HANDLES";
980     case 0x80000024:
981         return "STATUS_SERVER_HAS_OPEN_HANDLES";
982     case 0x80000025:
983         return "STATUS_ALREADY_DISCONNECTED";
984     case 0x80000026:
985         return "STATUS_LONGJUMP";
986     case 0x80010001:
987         return "DBG_EXCEPTION_NOT_HANDLED";
988     case 0xC0000001:
989         return "STATUS_UNSUCCESSFUL";
990     case 0xC0000002:
991         return "STATUS_NOT_IMPLEMENTED";
992     case 0xC0000003:
993         return "STATUS_INVALID_INFO_CLASS";
994     case 0xC0000004:
995         return "STATUS_INFO_LENGTH_MISMATCH";
996     case 0xC0000005:
997         return "STATUS_ACCESS_VIOLATION";
998     case 0xC0000006:
999         return "STATUS_IN_PAGE_ERROR";
1000     case 0xC0000007:
1001         return "STATUS_PAGEFILE_QUOTA";
1002     case 0xC0000008:
1003         return "STATUS_INVALID_HANDLE";
1004     case 0xC0000009:
1005         return "STATUS_BAD_INITIAL_STACK";
1006     case 0xC000000A:
1007         return "STATUS_BAD_INITIAL_PC";
1008     case 0xC000000B:
1009         return "STATUS_INVALID_CID";
1010     case 0xC000000C:
1011         return "STATUS_TIMER_NOT_CANCELED";
1012     case 0xC000000D:
1013         return "STATUS_INVALID_PARAMETER";
1014     case 0xC000000E:
1015         return "STATUS_NO_SUCH_DEVICE";
1016     case 0xC000000F:
1017         return "STATUS_NO_SUCH_FILE";
1018     case 0xC0000010:
1019         return "STATUS_INVALID_DEVICE_REQUEST";
1020     case 0xC0000011:
1021         return "STATUS_END_OF_FILE";
1022     case 0xC0000012:
1023         return "STATUS_WRONG_VOLUME";
1024     case 0xC0000013:
1025         return "STATUS_NO_MEDIA_IN_DEVICE";
1026     case 0xC0000014:
1027         return "STATUS_UNRECOGNIZED_MEDIA";
1028     case 0xC0000015:
1029         return "STATUS_NONEXISTENT_SECTOR";
1030     case 0xC0000016:
1031         return "STATUS_MORE_PROCESSING_REQUIRED";
1032     case 0xC0000017:
1033         return "STATUS_NO_MEMORY";
1034     case 0xC0000018:
1035         return "STATUS_CONFLICTING_ADDRESSES";
1036     case 0xC0000019:
1037         return "STATUS_NOT_MAPPED_VIEW";
1038     case 0xC000001A:
1039         return "STATUS_UNABLE_TO_FREE_VM";
1040     case 0xC000001B:
1041         return "STATUS_UNABLE_TO_DELETE_SECTION";
1042     case 0xC000001C:
1043         return "STATUS_INVALID_SYSTEM_SERVICE";
1044     case 0xC000001D:
1045         return "STATUS_ILLEGAL_INSTRUCTION";
1046     case 0xC000001E:
1047         return "STATUS_INVALID_LOCK_SEQUENCE";
1048     case 0xC000001F:
1049         return "STATUS_INVALID_VIEW_SIZE";
1050     case 0xC0000020:
1051         return "STATUS_INVALID_FILE_FOR_SECTION";
1052     case 0xC0000021:
1053         return "STATUS_ALREADY_COMMITTED";
1054     case 0xC0000022:
1055         return "STATUS_ACCESS_DENIED";
1056     case 0xC0000023:
1057         return "STATUS_BUFFER_TOO_SMALL";
1058     case 0xC0000024:
1059         return "STATUS_OBJECT_TYPE_MISMATCH";
1060     case 0xC0000025:
1061         return "STATUS_NONCONTINUABLE_EXCEPTION";
1062     case 0xC0000026:
1063         return "STATUS_INVALID_DISPOSITION";
1064     case 0xC0000027:
1065         return "STATUS_UNWIND";
1066     case 0xC0000028:
1067         return "STATUS_BAD_STACK";
1068     case 0xC0000029:
1069         return "STATUS_INVALID_UNWIND_TARGET";
1070     case 0xC000002A:
1071         return "STATUS_NOT_LOCKED";
1072     case 0xC000002B:
1073         return "STATUS_PARITY_ERROR";
1074     case 0xC000002C:
1075         return "STATUS_UNABLE_TO_DECOMMIT_VM";
1076     case 0xC000002D:
1077         return "STATUS_NOT_COMMITTED";
1078     case 0xC000002E:
1079         return "STATUS_INVALID_PORT_ATTRIBUTES";
1080     case 0xC000002F:
1081         return "STATUS_PORT_MESSAGE_TOO_LONG";
1082     case 0xC0000030:
1083         return "STATUS_INVALID_PARAMETER_MIX";
1084     case 0xC0000031:
1085         return "STATUS_INVALID_QUOTA_LOWER";
1086     case 0xC0000032:
1087         return "STATUS_DISK_CORRUPT_ERROR";
1088     case 0xC0000033:
1089         return "STATUS_OBJECT_NAME_INVALID";
1090     case 0xC0000034:
1091         return "STATUS_OBJECT_NAME_NOT_FOUND";
1092     case 0xC0000035:
1093         return "STATUS_OBJECT_NAME_COLLISION";
1094     case 0xC0000037:
1095         return "STATUS_PORT_DISCONNECTED";
1096     case 0xC0000038:
1097         return "STATUS_DEVICE_ALREADY_ATTACHED";
1098     case 0xC0000039:
1099         return "STATUS_OBJECT_PATH_INVALID";
1100     case 0xC000003A:
1101         return "STATUS_OBJECT_PATH_NOT_FOUND";
1102     case 0xC000003B:
1103         return "STATUS_OBJECT_PATH_SYNTAX_BAD";
1104     case 0xC000003C:
1105         return "STATUS_DATA_OVERRUN";
1106     case 0xC000003D:
1107         return "STATUS_DATA_LATE_ERROR";
1108     case 0xC000003E:
1109         return "STATUS_DATA_ERROR";
1110     case 0xC000003F:
1111         return "STATUS_CRC_ERROR";
1112     case 0xC0000040:
1113         return "STATUS_SECTION_TOO_BIG";
1114     case 0xC0000041:
1115         return "STATUS_PORT_CONNECTION_REFUSED";
1116     case 0xC0000042:
1117         return "STATUS_INVALID_PORT_HANDLE";
1118     case 0xC0000043:
1119         return "STATUS_SHARING_VIOLATION";
1120     case 0xC0000044:
1121         return "STATUS_QUOTA_EXCEEDED";
1122     case 0xC0000045:
1123         return "STATUS_INVALID_PAGE_PROTECTION";
1124     case 0xC0000046:
1125         return "STATUS_MUTANT_NOT_OWNED";
1126     case 0xC0000047:
1127         return "STATUS_SEMAPHORE_LIMIT_EXCEEDED";
1128     case 0xC0000048:
1129         return "STATUS_PORT_ALREADY_SET";
1130     case 0xC0000049:
1131         return "STATUS_SECTION_NOT_IMAGE";
1132     case 0xC000004A:
1133         return "STATUS_SUSPEND_COUNT_EXCEEDED";
1134     case 0xC000004B:
1135         return "STATUS_THREAD_IS_TERMINATING";
1136     case 0xC000004C:
1137         return "STATUS_BAD_WORKING_SET_LIMIT";
1138     case 0xC000004D:
1139         return "STATUS_INCOMPATIBLE_FILE_MAP";
1140     case 0xC000004E:
1141         return "STATUS_SECTION_PROTECTION";
1142     case 0xC000004F:
1143         return "STATUS_EAS_NOT_SUPPORTED";
1144     case 0xC0000050:
1145         return "STATUS_EA_TOO_LARGE";
1146     case 0xC0000051:
1147         return "STATUS_NONEXISTENT_EA_ENTRY";
1148     case 0xC0000052:
1149         return "STATUS_NO_EAS_ON_FILE";
1150     case 0xC0000053:
1151         return "STATUS_EA_CORRUPT_ERROR";
1152     case 0xC0000054:
1153         return "STATUS_FILE_LOCK_CONFLICT";
1154     case 0xC0000055:
1155         return "STATUS_LOCK_NOT_GRANTED";
1156     case 0xC0000056:
1157         return "STATUS_DELETE_PENDING";
1158     case 0xC0000057:
1159         return "STATUS_CTL_FILE_NOT_SUPPORTED";
1160     case 0xC0000058:
1161         return "STATUS_UNKNOWN_REVISION";
1162     case 0xC0000059:
1163         return "STATUS_REVISION_MISMATCH";
1164     case 0xC000005A:
1165         return "STATUS_INVALID_OWNER";
1166     case 0xC000005B:
1167         return "STATUS_INVALID_PRIMARY_GROUP";
1168     case 0xC000005C:
1169         return "STATUS_NO_IMPERSONATION_TOKEN";
1170     case 0xC000005D:
1171         return "STATUS_CANT_DISABLE_MANDATORY";
1172     case 0xC000005E:
1173         return "STATUS_NO_LOGON_SERVERS";
1174     case 0xC000005F:
1175         return "STATUS_NO_SUCH_LOGON_SESSION";
1176     case 0xC0000060:
1177         return "STATUS_NO_SUCH_PRIVILEGE";
1178     case 0xC0000061:
1179         return "STATUS_PRIVILEGE_NOT_HELD";
1180     case 0xC0000062:
1181         return "STATUS_INVALID_ACCOUNT_NAME";
1182     case 0xC0000063:
1183         return "STATUS_USER_EXISTS";
1184     case 0xC0000064:
1185         return "STATUS_NO_SUCH_USER";
1186     case 0xC0000065:
1187         return "STATUS_GROUP_EXISTS";
1188     case 0xC0000066:
1189         return "STATUS_NO_SUCH_GROUP";
1190     case 0xC0000067:
1191         return "STATUS_MEMBER_IN_GROUP";
1192     case 0xC0000068:
1193         return "STATUS_MEMBER_NOT_IN_GROUP";
1194     case 0xC0000069:
1195         return "STATUS_LAST_ADMIN";
1196     case 0xC000006A:
1197         return "STATUS_WRONG_PASSWORD";
1198     case 0xC000006B:
1199         return "STATUS_ILL_FORMED_PASSWORD";
1200     case 0xC000006C:
1201         return "STATUS_PASSWORD_RESTRICTION";
1202     case 0xC000006D:
1203         return "STATUS_LOGON_FAILURE";
1204     case 0xC000006E:
1205         return "STATUS_ACCOUNT_RESTRICTION";
1206     case 0xC000006F:
1207         return "STATUS_INVALID_LOGON_HOURS";
1208     case 0xC0000070:
1209         return "STATUS_INVALID_WORKSTATION";
1210     case 0xC0000071:
1211         return "STATUS_PASSWORD_EXPIRED";
1212     case 0xC0000072:
1213         return "STATUS_ACCOUNT_DISABLED";
1214     case 0xC0000073:
1215         return "STATUS_NONE_MAPPED";
1216     case 0xC0000074:
1217         return "STATUS_TOO_MANY_LUIDS_REQUESTED";
1218     case 0xC0000075:
1219         return "STATUS_LUIDS_EXHAUSTED";
1220     case 0xC0000076:
1221         return "STATUS_INVALID_SUB_AUTHORITY";
1222     case 0xC0000077:
1223         return "STATUS_INVALID_ACL";
1224     case 0xC0000078:
1225         return "STATUS_INVALID_SID";
1226     case 0xC0000079:
1227         return "STATUS_INVALID_SECURITY_DESCR";
1228     case 0xC000007A:
1229         return "STATUS_PROCEDURE_NOT_FOUND";
1230     case 0xC000007B:
1231         return "STATUS_INVALID_IMAGE_FORMAT";
1232     case 0xC000007C:
1233         return "STATUS_NO_TOKEN";
1234     case 0xC000007D:
1235         return "STATUS_BAD_INHERITANCE_ACL";
1236     case 0xC000007E:
1237         return "STATUS_RANGE_NOT_LOCKED";
1238     case 0xC000007F:
1239         return "STATUS_DISK_FULL";
1240     case 0xC0000080:
1241         return "STATUS_SERVER_DISABLED";
1242     case 0xC0000081:
1243         return "STATUS_SERVER_NOT_DISABLED";
1244     case 0xC0000082:
1245         return "STATUS_TOO_MANY_GUIDS_REQUESTED";
1246     case 0xC0000083:
1247         return "STATUS_GUIDS_EXHAUSTED";
1248     case 0xC0000084:
1249         return "STATUS_INVALID_ID_AUTHORITY";
1250     case 0xC0000085:
1251         return "STATUS_AGENTS_EXHAUSTED";
1252     case 0xC0000086:
1253         return "STATUS_INVALID_VOLUME_LABEL";
1254     case 0xC0000087:
1255         return "STATUS_SECTION_NOT_EXTENDED";
1256     case 0xC0000088:
1257         return "STATUS_NOT_MAPPED_DATA";
1258     case 0xC0000089:
1259         return "STATUS_RESOURCE_DATA_NOT_FOUND";
1260     case 0xC000008A:
1261         return "STATUS_RESOURCE_TYPE_NOT_FOUND";
1262     case 0xC000008B:
1263         return "STATUS_RESOURCE_NAME_NOT_FOUND";
1264     case 0xC000008C:
1265         return "STATUS_ARRAY_BOUNDS_EXCEEDED";
1266     case 0xC000008D:
1267         return "STATUS_FLOAT_DENORMAL_OPERAND";
1268     case 0xC000008E:
1269         return "STATUS_FLOAT_DIVIDE_BY_ZERO";
1270     case 0xC000008F:
1271         return "STATUS_FLOAT_INEXACT_RESULT";
1272     case 0xC0000090:
1273         return "STATUS_FLOAT_INVALID_OPERATION";
1274     case 0xC0000091:
1275         return "STATUS_FLOAT_OVERFLOW";
1276     case 0xC0000092:
1277         return "STATUS_FLOAT_STACK_CHECK";
1278     case 0xC0000093:
1279         return "STATUS_FLOAT_UNDERFLOW";
1280     case 0xC0000094:
1281         return "STATUS_INTEGER_DIVIDE_BY_ZERO";
1282     case 0xC0000095:
1283         return "STATUS_INTEGER_OVERFLOW";
1284     case 0xC0000096:
1285         return "STATUS_PRIVILEGED_INSTRUCTION";
1286     case 0xC0000097:
1287         return "STATUS_TOO_MANY_PAGING_FILES";
1288     case 0xC0000098:
1289         return "STATUS_FILE_INVALID";
1290     case 0xC0000099:
1291         return "STATUS_ALLOTTED_SPACE_EXCEEDED";
1292     case 0xC000009A:
1293         return "STATUS_INSUFFICIENT_RESOURCES";
1294     case 0xC000009B:
1295         return "STATUS_DFS_EXIT_PATH_FOUND";
1296     case 0xC000009C:
1297         return "STATUS_DEVICE_DATA_ERROR";
1298     case 0xC000009D:
1299         return "STATUS_DEVICE_NOT_CONNECTED";
1300     case 0xC000009E:
1301         return "STATUS_DEVICE_POWER_FAILURE";
1302     case 0xC000009F:
1303         return "STATUS_FREE_VM_NOT_AT_BASE";
1304     case 0xC00000A0:
1305         return "STATUS_MEMORY_NOT_ALLOCATED";
1306     case 0xC00000A1:
1307         return "STATUS_WORKING_SET_QUOTA";
1308     case 0xC00000A2:
1309         return "STATUS_MEDIA_WRITE_PROTECTED";
1310     case 0xC00000A3:
1311         return "STATUS_DEVICE_NOT_READY";
1312     case 0xC00000A4:
1313         return "STATUS_INVALID_GROUP_ATTRIBUTES";
1314     case 0xC00000A5:
1315         return "STATUS_BAD_IMPERSONATION_LEVEL";
1316     case 0xC00000A6:
1317         return "STATUS_CANT_OPEN_ANONYMOUS";
1318     case 0xC00000A7:
1319         return "STATUS_BAD_VALIDATION_CLASS";
1320     case 0xC00000A8:
1321         return "STATUS_BAD_TOKEN_TYPE";
1322     case 0xC00000A9:
1323         return "STATUS_BAD_MASTER_BOOT_RECORD";
1324     case 0xC00000AA:
1325         return "STATUS_INSTRUCTION_MISALIGNMENT";
1326     case 0xC00000AB:
1327         return "STATUS_INSTANCE_NOT_AVAILABLE";
1328     case 0xC00000AC:
1329         return "STATUS_PIPE_NOT_AVAILABLE";
1330     case 0xC00000AD:
1331         return "STATUS_INVALID_PIPE_STATE";
1332     case 0xC00000AE:
1333         return "STATUS_PIPE_BUSY";
1334     case 0xC00000AF:
1335         return "STATUS_ILLEGAL_FUNCTION";
1336     case 0xC00000B0:
1337         return "STATUS_PIPE_DISCONNECTED";
1338     case 0xC00000B1:
1339         return "STATUS_PIPE_CLOSING";
1340     case 0xC00000B2:
1341         return "STATUS_PIPE_CONNECTED";
1342     case 0xC00000B3:
1343         return "STATUS_PIPE_LISTENING";
1344     case 0xC00000B4:
1345         return "STATUS_INVALID_READ_MODE";
1346     case 0xC00000B5:
1347         return "STATUS_IO_TIMEOUT";
1348     case 0xC00000B6:
1349         return "STATUS_FILE_FORCED_CLOSED";
1350     case 0xC00000B7:
1351         return "STATUS_PROFILING_NOT_STARTED";
1352     case 0xC00000B8:
1353         return "STATUS_PROFILING_NOT_STOPPED";
1354     case 0xC00000B9:
1355         return "STATUS_COULD_NOT_INTERPRET";
1356     case 0xC00000BA:
1357         return "STATUS_FILE_IS_A_DIRECTORY";
1358     case 0xC00000BB:
1359         return "STATUS_NOT_SUPPORTED";
1360     case 0xC00000BC:
1361         return "STATUS_REMOTE_NOT_LISTENING";
1362     case 0xC00000BD:
1363         return "STATUS_DUPLICATE_NAME";
1364     case 0xC00000BE:
1365         return "STATUS_BAD_NETWORK_PATH";
1366     case 0xC00000BF:
1367         return "STATUS_NETWORK_BUSY";
1368     case 0xC00000C0:
1369         return "STATUS_DEVICE_DOES_NOT_EXIST";
1370     case 0xC00000C1:
1371         return "STATUS_TOO_MANY_COMMANDS";
1372     case 0xC00000C2:
1373         return "STATUS_ADAPTER_HARDWARE_ERROR";
1374     case 0xC00000C3:
1375         return "STATUS_INVALID_NETWORK_RESPONSE";
1376     case 0xC00000C4:
1377         return "STATUS_UNEXPECTED_NETWORK_ERROR";
1378     case 0xC00000C5:
1379         return "STATUS_BAD_REMOTE_ADAPTER";
1380     case 0xC00000C6:
1381         return "STATUS_PRINT_QUEUE_FULL";
1382     case 0xC00000C7:
1383         return "STATUS_NO_SPOOL_SPACE";
1384     case 0xC00000C8:
1385         return "STATUS_PRINT_CANCELLED";
1386     case 0xC00000C9:
1387         return "STATUS_NETWORK_NAME_DELETED";
1388     case 0xC00000CA:
1389         return "STATUS_NETWORK_ACCESS_DENIED";
1390     case 0xC00000CB:
1391         return "STATUS_BAD_DEVICE_TYPE";
1392     case 0xC00000CC:
1393         return "STATUS_BAD_NETWORK_NAME";
1394     case 0xC00000CD:
1395         return "STATUS_TOO_MANY_NAMES";
1396     case 0xC00000CE:
1397         return "STATUS_TOO_MANY_SESSIONS";
1398     case 0xC00000CF:
1399         return "STATUS_SHARING_PAUSED";
1400     case 0xC00000D0:
1401         return "STATUS_REQUEST_NOT_ACCEPTED";
1402     case 0xC00000D1:
1403         return "STATUS_REDIRECTOR_PAUSED";
1404     case 0xC00000D2:
1405         return "STATUS_NET_WRITE_FAULT";
1406     case 0xC00000D3:
1407         return "STATUS_PROFILING_AT_LIMIT";
1408     case 0xC00000D4:
1409         return "STATUS_NOT_SAME_DEVICE";
1410     case 0xC00000D5:
1411         return "STATUS_FILE_RENAMED";
1412     case 0xC00000D6:
1413         return "STATUS_VIRTUAL_CIRCUIT_CLOSED";
1414     case 0xC00000D7:
1415         return "STATUS_NO_SECURITY_ON_OBJECT";
1416     case 0xC00000D8:
1417         return "STATUS_CANT_WAIT";
1418     case 0xC00000D9:
1419         return "STATUS_PIPE_EMPTY";
1420     case 0xC00000DA:
1421         return "STATUS_CANT_ACCESS_DOMAIN_INFO";
1422     case 0xC00000DB:
1423         return "STATUS_CANT_TERMINATE_SELF";
1424     case 0xC00000DC:
1425         return "STATUS_INVALID_SERVER_STATE";
1426     case 0xC00000DD:
1427         return "STATUS_INVALID_DOMAIN_STATE";
1428     case 0xC00000DE:
1429         return "STATUS_INVALID_DOMAIN_ROLE";
1430     case 0xC00000DF:
1431         return "STATUS_NO_SUCH_DOMAIN";
1432     case 0xC00000E0:
1433         return "STATUS_DOMAIN_EXISTS";
1434     case 0xC00000E1:
1435         return "STATUS_DOMAIN_LIMIT_EXCEEDED";
1436     case 0xC00000E2:
1437         return "STATUS_OPLOCK_NOT_GRANTED";
1438     case 0xC00000E3:
1439         return "STATUS_INVALID_OPLOCK_PROTOCOL";
1440     case 0xC00000E4:
1441         return "STATUS_INTERNAL_DB_CORRUPTION";
1442     case 0xC00000E5:
1443         return "STATUS_INTERNAL_ERROR";
1444     case 0xC00000E6:
1445         return "STATUS_GENERIC_NOT_MAPPED";
1446     case 0xC00000E7:
1447         return "STATUS_BAD_DESCRIPTOR_FORMAT";
1448     case 0xC00000E8:
1449         return "STATUS_INVALID_USER_BUFFER";
1450     case 0xC00000E9:
1451         return "STATUS_UNEXPECTED_IO_ERROR";
1452     case 0xC00000EA:
1453         return "STATUS_UNEXPECTED_MM_CREATE_ERR";
1454     case 0xC00000EB:
1455         return "STATUS_UNEXPECTED_MM_MAP_ERROR";
1456     case 0xC00000EC:
1457         return "STATUS_UNEXPECTED_MM_EXTEND_ERR";
1458     case 0xC00000ED:
1459         return "STATUS_NOT_LOGON_PROCESS";
1460     case 0xC00000EE:
1461         return "STATUS_LOGON_SESSION_EXISTS";
1462     case 0xC00000EF:
1463         return "STATUS_INVALID_PARAMETER_1";
1464     case 0xC00000F0:
1465         return "STATUS_INVALID_PARAMETER_2";
1466     case 0xC00000F1:
1467         return "STATUS_INVALID_PARAMETER_3";
1468     case 0xC00000F2:
1469         return "STATUS_INVALID_PARAMETER_4";
1470     case 0xC00000F3:
1471         return "STATUS_INVALID_PARAMETER_5";
1472     case 0xC00000F4:
1473         return "STATUS_INVALID_PARAMETER_6";
1474     case 0xC00000F5:
1475         return "STATUS_INVALID_PARAMETER_7";
1476     case 0xC00000F6:
1477         return "STATUS_INVALID_PARAMETER_8";
1478     case 0xC00000F7:
1479         return "STATUS_INVALID_PARAMETER_9";
1480     case 0xC00000F8:
1481         return "STATUS_INVALID_PARAMETER_10";
1482     case 0xC00000F9:
1483         return "STATUS_INVALID_PARAMETER_11";
1484     case 0xC00000FA:
1485         return "STATUS_INVALID_PARAMETER_12";
1486     case 0xC00000FB:
1487         return "STATUS_REDIRECTOR_NOT_STARTED";
1488     case 0xC00000FC:
1489         return "STATUS_REDIRECTOR_STARTED";
1490     case 0xC00000FD:
1491         return "STATUS_STACK_OVERFLOW";
1492     case 0xC00000FE:
1493         return "STATUS_NO_SUCH_PACKAGE";
1494     case 0xC00000FF:
1495         return "STATUS_BAD_FUNCTION_TABLE";
1496     case 0xC0000100:
1497         return "STATUS_VARIABLE_NOT_FOUND";
1498     case 0xC0000101:
1499         return "STATUS_DIRECTORY_NOT_EMPTY";
1500     case 0xC0000102:
1501         return "STATUS_FILE_CORRUPT_ERROR";
1502     case 0xC0000103:
1503         return "STATUS_NOT_A_DIRECTORY";
1504     case 0xC0000104:
1505         return "STATUS_BAD_LOGON_SESSION_STATE";
1506     case 0xC0000105:
1507         return "STATUS_LOGON_SESSION_COLLISION";
1508     case 0xC0000106:
1509         return "STATUS_NAME_TOO_LONG";
1510     case 0xC0000107:
1511         return "STATUS_FILES_OPEN";
1512     case 0xC0000108:
1513         return "STATUS_CONNECTION_IN_USE";
1514     case 0xC0000109:
1515         return "STATUS_MESSAGE_NOT_FOUND";
1516     case 0xC000010A:
1517         return "STATUS_PROCESS_IS_TERMINATING";
1518     case 0xC000010B:
1519         return "STATUS_INVALID_LOGON_TYPE";
1520     case 0xC000010C:
1521         return "STATUS_NO_GUID_TRANSLATION";
1522     case 0xC000010D:
1523         return "STATUS_CANNOT_IMPERSONATE";
1524     case 0xC000010E:
1525         return "STATUS_IMAGE_ALREADY_LOADED";
1526     case 0xC000010F:
1527         return "STATUS_ABIOS_NOT_PRESENT";
1528     case 0xC0000110:
1529         return "STATUS_ABIOS_LID_NOT_EXIST";
1530     case 0xC0000111:
1531         return "STATUS_ABIOS_LID_ALREADY_OWNED";
1532     case 0xC0000112:
1533         return "STATUS_ABIOS_NOT_LID_OWNER";
1534     case 0xC0000113:
1535         return "STATUS_ABIOS_INVALID_COMMAND";
1536     case 0xC0000114:
1537         return "STATUS_ABIOS_INVALID_LID";
1538     case 0xC0000115:
1539         return "STATUS_ABIOS_SELECTOR_NOT_AVAILABLE";
1540     case 0xC0000116:
1541         return "STATUS_ABIOS_INVALID_SELECTOR";
1542     case 0xC0000117:
1543         return "STATUS_NO_LDT";
1544     case 0xC0000118:
1545         return "STATUS_INVALID_LDT_SIZE";
1546     case 0xC0000119:
1547         return "STATUS_INVALID_LDT_OFFSET";
1548     case 0xC000011A:
1549         return "STATUS_INVALID_LDT_DESCRIPTOR";
1550     case 0xC000011B:
1551         return "STATUS_INVALID_IMAGE_NE_FORMAT";
1552     case 0xC000011C:
1553         return "STATUS_RXACT_INVALID_STATE";
1554     case 0xC000011D:
1555         return "STATUS_RXACT_COMMIT_FAILURE";
1556     case 0xC000011E:
1557         return "STATUS_MAPPED_FILE_SIZE_ZERO";
1558     case 0xC000011F:
1559         return "STATUS_TOO_MANY_OPENED_FILES";
1560     case 0xC0000120:
1561         return "STATUS_CANCELLED";
1562     case 0xC0000121:
1563         return "STATUS_CANNOT_DELETE";
1564     case 0xC0000122:
1565         return "STATUS_INVALID_COMPUTER_NAME";
1566     case 0xC0000123:
1567         return "STATUS_FILE_DELETED";
1568     case 0xC0000124:
1569         return "STATUS_SPECIAL_ACCOUNT";
1570     case 0xC0000125:
1571         return "STATUS_SPECIAL_GROUP";
1572     case 0xC0000126:
1573         return "STATUS_SPECIAL_USER";
1574     case 0xC0000127:
1575         return "STATUS_MEMBERS_PRIMARY_GROUP";
1576     case 0xC0000128:
1577         return "STATUS_FILE_CLOSED";
1578     case 0xC0000129:
1579         return "STATUS_TOO_MANY_THREADS";
1580     case 0xC000012A:
1581         return "STATUS_THREAD_NOT_IN_PROCESS";
1582     case 0xC000012B:
1583         return "STATUS_TOKEN_ALREADY_IN_USE";
1584     case 0xC000012C:
1585         return "STATUS_PAGEFILE_QUOTA_EXCEEDED";
1586     case 0xC000012D:
1587         return "STATUS_COMMITMENT_LIMIT";
1588     case 0xC000012E:
1589         return "STATUS_INVALID_IMAGE_LE_FORMAT";
1590     case 0xC000012F:
1591         return "STATUS_INVALID_IMAGE_NOT_MZ";
1592     case 0xC0000130:
1593         return "STATUS_INVALID_IMAGE_PROTECT";
1594     case 0xC0000131:
1595         return "STATUS_INVALID_IMAGE_WIN_16";
1596     case 0xC0000132:
1597         return "STATUS_LOGON_SERVER_CONFLICT";
1598     case 0xC0000133:
1599         return "STATUS_TIME_DIFFERENCE_AT_DC";
1600     case 0xC0000134:
1601         return "STATUS_SYNCHRONIZATION_REQUIRED";
1602     case 0xC0000135:
1603         return "STATUS_DLL_NOT_FOUND";
1604     case 0xC0000136:
1605         return "STATUS_OPEN_FAILED";
1606     case 0xC0000137:
1607         return "STATUS_IO_PRIVILEGE_FAILED";
1608     case 0xC0000138:
1609         return "STATUS_ORDINAL_NOT_FOUND";
1610     case 0xC0000139:
1611         return "STATUS_ENTRYPOINT_NOT_FOUND";
1612     case 0xC000013A:
1613         return "STATUS_CONTROL_C_EXIT";
1614     case 0xC000013B:
1615         return "STATUS_LOCAL_DISCONNECT";
1616     case 0xC000013C:
1617         return "STATUS_REMOTE_DISCONNECT";
1618     case 0xC000013D:
1619         return "STATUS_REMOTE_RESOURCES";
1620     case 0xC000013E:
1621         return "STATUS_LINK_FAILED";
1622     case 0xC000013F:
1623         return "STATUS_LINK_TIMEOUT";
1624     case 0xC0000140:
1625         return "STATUS_INVALID_CONNECTION";
1626     case 0xC0000141:
1627         return "STATUS_INVALID_ADDRESS";
1628     case 0xC0000142:
1629         return "STATUS_DLL_INIT_FAILED";
1630     case 0xC0000143:
1631         return "STATUS_MISSING_SYSTEMFILE";
1632     case 0xC0000144:
1633         return "STATUS_UNHANDLED_EXCEPTION";
1634     case 0xC0000145:
1635         return "STATUS_APP_INIT_FAILURE";
1636     case 0xC0000146:
1637         return "STATUS_PAGEFILE_CREATE_FAILED";
1638     case 0xC0000147:
1639         return "STATUS_NO_PAGEFILE";
1640     case 0xC0000148:
1641         return "STATUS_INVALID_LEVEL";
1642     case 0xC0000149:
1643         return "STATUS_WRONG_PASSWORD_CORE";
1644     case 0xC000014A:
1645         return "STATUS_ILLEGAL_FLOAT_CONTEXT";
1646     case 0xC000014B:
1647         return "STATUS_PIPE_BROKEN";
1648     case 0xC000014C:
1649         return "STATUS_REGISTRY_CORRUPT";
1650     case 0xC000014D:
1651         return "STATUS_REGISTRY_IO_FAILED";
1652     case 0xC000014E:
1653         return "STATUS_NO_EVENT_PAIR";
1654     case 0xC000014F:
1655         return "STATUS_UNRECOGNIZED_VOLUME";
1656     case 0xC0000150:
1657         return "STATUS_SERIAL_NO_DEVICE_INITED";
1658     case 0xC0000151:
1659         return "STATUS_NO_SUCH_ALIAS";
1660     case 0xC0000152:
1661         return "STATUS_MEMBER_NOT_IN_ALIAS";
1662     case 0xC0000153:
1663         return "STATUS_MEMBER_IN_ALIAS";
1664     case 0xC0000154:
1665         return "STATUS_ALIAS_EXISTS";
1666     case 0xC0000155:
1667         return "STATUS_LOGON_NOT_GRANTED";
1668     case 0xC0000156:
1669         return "STATUS_TOO_MANY_SECRETS";
1670     case 0xC0000157:
1671         return "STATUS_SECRET_TOO_LONG";
1672     case 0xC0000158:
1673         return "STATUS_INTERNAL_DB_ERROR";
1674     case 0xC0000159:
1675         return "STATUS_FULLSCREEN_MODE";
1676     case 0xC000015A:
1677         return "STATUS_TOO_MANY_CONTEXT_IDS";
1678     case 0xC000015B:
1679         return "STATUS_LOGON_TYPE_NOT_GRANTED";
1680     case 0xC000015C:
1681         return "STATUS_NOT_REGISTRY_FILE";
1682     case 0xC000015D:
1683         return "STATUS_NT_CROSS_ENCRYPTION_REQUIRED";
1684     case 0xC000015E:
1685         return "STATUS_DOMAIN_CTRLR_CONFIG_ERROR";
1686     case 0xC000015F:
1687         return "STATUS_FT_MISSING_MEMBER";
1688     case 0xC0000160:
1689         return "STATUS_ILL_FORMED_SERVICE_ENTRY";
1690     case 0xC0000161:
1691         return "STATUS_ILLEGAL_CHARACTER";
1692     case 0xC0000162:
1693         return "STATUS_UNMAPPABLE_CHARACTER";
1694     case 0xC0000163:
1695         return "STATUS_UNDEFINED_CHARACTER";
1696     case 0xC0000164:
1697         return "STATUS_FLOPPY_VOLUME";
1698     case 0xC0000165:
1699         return "STATUS_FLOPPY_ID_MARK_NOT_FOUND";
1700     case 0xC0000166:
1701         return "STATUS_FLOPPY_WRONG_CYLINDER";
1702     case 0xC0000167:
1703         return "STATUS_FLOPPY_UNKNOWN_ERROR";
1704     case 0xC0000168:
1705         return "STATUS_FLOPPY_BAD_REGISTERS";
1706     case 0xC0000169:
1707         return "STATUS_DISK_RECALIBRATE_FAILED";
1708     case 0xC000016A:
1709         return "STATUS_DISK_OPERATION_FAILED";
1710     case 0xC000016B:
1711         return "STATUS_DISK_RESET_FAILED";
1712     case 0xC000016C:
1713         return "STATUS_SHARED_IRQ_BUSY";
1714     case 0xC000016D:
1715         return "STATUS_FT_ORPHANING";
1716     case 0xC000016E:
1717         return "STATUS_BIOS_FAILED_TO_CONNECT_INTERRUPT";
1718     case 0xC0000172:
1719         return "STATUS_PARTITION_FAILURE";
1720     case 0xC0000173:
1721         return "STATUS_INVALID_BLOCK_LENGTH";
1722     case 0xC0000174:
1723         return "STATUS_DEVICE_NOT_PARTITIONED";
1724     case 0xC0000175:
1725         return "STATUS_UNABLE_TO_LOCK_MEDIA";
1726     case 0xC0000176:
1727         return "STATUS_UNABLE_TO_UNLOAD_MEDIA";
1728     case 0xC0000177:
1729         return "STATUS_EOM_OVERFLOW";
1730     case 0xC0000178:
1731         return "STATUS_NO_MEDIA";
1732     case 0xC000017A:
1733         return "STATUS_NO_SUCH_MEMBER";
1734     case 0xC000017B:
1735         return "STATUS_INVALID_MEMBER";
1736     case 0xC000017C:
1737         return "STATUS_KEY_DELETED";
1738     case 0xC000017D:
1739         return "STATUS_NO_LOG_SPACE";
1740     case 0xC000017E:
1741         return "STATUS_TOO_MANY_SIDS";
1742     case 0xC000017F:
1743         return "STATUS_LM_CROSS_ENCRYPTION_REQUIRED";
1744     case 0xC0000180:
1745         return "STATUS_KEY_HAS_CHILDREN";
1746     case 0xC0000181:
1747         return "STATUS_CHILD_MUST_BE_VOLATILE";
1748     case 0xC0000182:
1749         return "STATUS_DEVICE_CONFIGURATION_ERROR";
1750     case 0xC0000183:
1751         return "STATUS_DRIVER_INTERNAL_ERROR";
1752     case 0xC0000184:
1753         return "STATUS_INVALID_DEVICE_STATE";
1754     case 0xC0000185:
1755         return "STATUS_IO_DEVICE_ERROR";
1756     case 0xC0000186:
1757         return "STATUS_DEVICE_PROTOCOL_ERROR";
1758     case 0xC0000187:
1759         return "STATUS_BACKUP_CONTROLLER";
1760     case 0xC0000188:
1761         return "STATUS_LOG_FILE_FULL";
1762     case 0xC0000189:
1763         return "STATUS_TOO_LATE";
1764     case 0xC000018A:
1765         return "STATUS_NO_TRUST_LSA_SECRET";
1766     case 0xC000018B:
1767         return "STATUS_NO_TRUST_SAM_ACCOUNT";
1768     case 0xC000018C:
1769         return "STATUS_TRUSTED_DOMAIN_FAILURE";
1770     case 0xC000018D:
1771         return "STATUS_TRUSTED_RELATIONSHIP_FAILURE";
1772     case 0xC000018E:
1773         return "STATUS_EVENTLOG_FILE_CORRUPT";
1774     case 0xC000018F:
1775         return "STATUS_EVENTLOG_CANT_START";
1776     case 0xC0000190:
1777         return "STATUS_TRUST_FAILURE";
1778     case 0xC0000191:
1779         return "STATUS_MUTANT_LIMIT_EXCEEDED";
1780     case 0xC0000192:
1781         return "STATUS_NETLOGON_NOT_STARTED";
1782     case 0xC0000193:
1783         return "STATUS_ACCOUNT_EXPIRED";
1784     case 0xC0000194:
1785         return "STATUS_POSSIBLE_DEADLOCK";
1786     case 0xC0000195:
1787         return "STATUS_NETWORK_CREDENTIAL_CONFLICT";
1788     case 0xC0000196:
1789         return "STATUS_REMOTE_SESSION_LIMIT";
1790     case 0xC0000197:
1791         return "STATUS_EVENTLOG_FILE_CHANGED";
1792     case 0xC0000198:
1793         return "STATUS_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT";
1794     case 0xC0000199:
1795         return "STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT";
1796     case 0xC000019A:
1797         return "STATUS_NOLOGON_SERVER_TRUST_ACCOUNT";
1798     case 0xC000019B:
1799         return "STATUS_DOMAIN_TRUST_INCONSISTENT";
1800     case 0xC000019C:
1801         return "STATUS_FS_DRIVER_REQUIRED";
1802     case 0xC0000202:
1803         return "STATUS_NO_USER_SESSION_KEY";
1804     case 0xC0000203:
1805         return "STATUS_USER_SESSION_DELETED";
1806     case 0xC0000204:
1807         return "STATUS_RESOURCE_LANG_NOT_FOUND";
1808     case 0xC0000205:
1809         return "STATUS_INSUFF_SERVER_RESOURCES";
1810     case 0xC0000206:
1811         return "STATUS_INVALID_BUFFER_SIZE";
1812     case 0xC0000207:
1813         return "STATUS_INVALID_ADDRESS_COMPONENT";
1814     case 0xC0000208:
1815         return "STATUS_INVALID_ADDRESS_WILDCARD";
1816     case 0xC0000209:
1817         return "STATUS_TOO_MANY_ADDRESSES";
1818     case 0xC000020A:
1819         return "STATUS_ADDRESS_ALREADY_EXISTS";
1820     case 0xC000020B:
1821         return "STATUS_ADDRESS_CLOSED";
1822     case 0xC000020C:
1823         return "STATUS_CONNECTION_DISCONNECTED";
1824     case 0xC000020D:
1825         return "STATUS_CONNECTION_RESET";
1826     case 0xC000020E:
1827         return "STATUS_TOO_MANY_NODES";
1828     case 0xC000020F:
1829         return "STATUS_TRANSACTION_ABORTED";
1830     case 0xC0000210:
1831         return "STATUS_TRANSACTION_TIMED_OUT";
1832     case 0xC0000211:
1833         return "STATUS_TRANSACTION_NO_RELEASE";
1834     case 0xC0000212:
1835         return "STATUS_TRANSACTION_NO_MATCH";
1836     case 0xC0000213:
1837         return "STATUS_TRANSACTION_RESPONDED";
1838     case 0xC0000214:
1839         return "STATUS_TRANSACTION_INVALID_ID";
1840     case 0xC0000215:
1841         return "STATUS_TRANSACTION_INVALID_TYPE";
1842     case 0xC0000216:
1843         return "STATUS_NOT_SERVER_SESSION";
1844     case 0xC0000217:
1845         return "STATUS_NOT_CLIENT_SESSION";
1846     case 0xC0000218:
1847         return "STATUS_CANNOT_LOAD_REGISTRY_FILE";
1848     case 0xC0000219:
1849         return "STATUS_DEBUG_ATTACH_FAILED";
1850     case 0xC000021A:
1851         return "STATUS_SYSTEM_PROCESS_TERMINATED";
1852     case 0xC000021B:
1853         return "STATUS_DATA_NOT_ACCEPTED";
1854     case 0xC000021C:
1855         return "STATUS_NO_BROWSER_SERVERS_FOUND";
1856     case 0xC000021D:
1857         return "STATUS_VDM_HARD_ERROR";
1858     case 0xC000021E:
1859         return "STATUS_DRIVER_CANCEL_TIMEOUT";
1860     case 0xC000021F:
1861         return "STATUS_REPLY_MESSAGE_MISMATCH";
1862     case 0xC0000220:
1863         return "STATUS_MAPPED_ALIGNMENT";
1864     case 0xC0000221:
1865         return "STATUS_IMAGE_CHECKSUM_MISMATCH";
1866     case 0xC0000222:
1867         return "STATUS_LOST_WRITEBEHIND_DATA";
1868     case 0xC0000223:
1869         return "STATUS_CLIENT_SERVER_PARAMETERS_INVALID";
1870     case 0xC0000224:
1871         return "STATUS_PASSWORD_MUST_CHANGE";
1872     case 0xC0000225:
1873         return "STATUS_NOT_FOUND";
1874     case 0xC0000226:
1875         return "STATUS_NOT_TINY_STREAM";
1876     case 0xC0000227:
1877         return "STATUS_RECOVERY_FAILURE";
1878     case 0xC0000228:
1879         return "STATUS_STACK_OVERFLOW_READ";
1880     case 0xC0000229:
1881         return "STATUS_FAIL_CHECK";
1882     case 0xC000022A:
1883         return "STATUS_DUPLICATE_OBJECTID";
1884     case 0xC000022B:
1885         return "STATUS_OBJECTID_EXISTS";
1886     case 0xC000022C:
1887         return "STATUS_CONVERT_TO_LARGE";
1888     case 0xC000022D:
1889         return "STATUS_RETRY";
1890     case 0xC000022E:
1891         return "STATUS_FOUND_OUT_OF_SCOPE";
1892     case 0xC000022F:
1893         return "STATUS_ALLOCATE_BUCKET";
1894     case 0xC0000230:
1895         return "STATUS_PROPSET_NOT_FOUND";
1896     case 0xC0000231:
1897         return "STATUS_MARSHALL_OVERFLOW";
1898     case 0xC0000232:
1899         return "STATUS_INVALID_VARIANT";
1900     case 0xC0000233:
1901         return "STATUS_DOMAIN_CONTROLLER_NOT_FOUND";
1902     case 0xC0000234:
1903         return "STATUS_ACCOUNT_LOCKED_OUT";
1904     case 0xC0000235:
1905         return "STATUS_HANDLE_NOT_CLOSABLE";
1906     case 0xC0000236:
1907         return "STATUS_CONNECTION_REFUSED";
1908     case 0xC0000237:
1909         return "STATUS_GRACEFUL_DISCONNECT";
1910     case 0xC0000238:
1911         return "STATUS_ADDRESS_ALREADY_ASSOCIATED";
1912     case 0xC0000239:
1913         return "STATUS_ADDRESS_NOT_ASSOCIATED";
1914     case 0xC000023A:
1915         return "STATUS_CONNECTION_INVALID";
1916     case 0xC000023B:
1917         return "STATUS_CONNECTION_ACTIVE";
1918     case 0xC000023C:
1919         return "STATUS_NETWORK_UNREACHABLE";
1920     case 0xC000023D:
1921         return "STATUS_HOST_UNREACHABLE";
1922     case 0xC000023E:
1923         return "STATUS_PROTOCOL_UNREACHABLE";
1924     case 0xC000023F:
1925         return "STATUS_PORT_UNREACHABLE";
1926     case 0xC0000240:
1927         return "STATUS_REQUEST_ABORTED";
1928     case 0xC0000241:
1929         return "STATUS_CONNECTION_ABORTED";
1930     case 0xC0000242:
1931         return "STATUS_BAD_COMPRESSION_BUFFER";
1932     case 0xC0000243:
1933         return "STATUS_USER_MAPPED_FILE";
1934     case 0xC0000244:
1935         return "STATUS_AUDIT_FAILED";
1936     case 0xC0000245:
1937         return "STATUS_TIMER_RESOLUTION_NOT_SET";
1938     case 0xC0000246:
1939         return "STATUS_CONNECTION_COUNT_LIMIT";
1940     case 0xC0000247:
1941         return "STATUS_LOGIN_TIME_RESTRICTION";
1942     case 0xC0000248:
1943         return "STATUS_LOGIN_WKSTA_RESTRICTION";
1944     case 0xC0000249:
1945         return "STATUS_IMAGE_MP_UP_MISMATCH";
1946     case 0xC0000250:
1947         return "STATUS_INSUFFICIENT_LOGON_INFO";
1948     case 0xC0000251:
1949         return "STATUS_BAD_DLL_ENTRYPOINT";
1950     case 0xC0000252:
1951         return "STATUS_BAD_SERVICE_ENTRYPOINT";
1952     case 0xC0000253:
1953         return "STATUS_LPC_REPLY_LOST";
1954     case 0xC0000254:
1955         return "STATUS_IP_ADDRESS_CONFLICT1";
1956     case 0xC0000255:
1957         return "STATUS_IP_ADDRESS_CONFLICT2";
1958     case 0xC0000256:
1959         return "STATUS_REGISTRY_QUOTA_LIMIT";
1960     case 0xC0000257:
1961         return "STATUS_PATH_NOT_COVERED";
1962     case 0xC0000258:
1963         return "STATUS_NO_CALLBACK_ACTIVE";
1964     case 0xC0000259:
1965         return "STATUS_LICENSE_QUOTA_EXCEEDED";
1966     case 0xC000025A:
1967         return "STATUS_PWD_TOO_SHORT";
1968     case 0xC000025B:
1969         return "STATUS_PWD_TOO_RECENT";
1970     case 0xC000025C:
1971         return "STATUS_PWD_HISTORY_CONFLICT";
1972     case 0xC000025E:
1973         return "STATUS_PLUGPLAY_NO_DEVICE";
1974     case 0xC000025F:
1975         return "STATUS_UNSUPPORTED_COMPRESSION";
1976     case 0xC0000260:
1977         return "STATUS_INVALID_HW_PROFILE";
1978     case 0xC0000261:
1979         return "STATUS_INVALID_PLUGPLAY_DEVICE_PATH";
1980     case 0xC0000262:
1981         return "STATUS_DRIVER_ORDINAL_NOT_FOUND";
1982     case 0xC0000263:
1983         return "STATUS_DRIVER_ENTRYPOINT_NOT_FOUND";
1984     case 0xC0000264:
1985         return "STATUS_RESOURCE_NOT_OWNED";
1986     case 0xC0000265:
1987         return "STATUS_TOO_MANY_LINKS";
1988     case 0xC0000266:
1989         return "STATUS_QUOTA_LIST_INCONSISTENT";
1990     case 0xC0000267:
1991         return "STATUS_FILE_IS_OFFLINE";
1992     case 0xC0000268:
1993         return "STATUS_EVALUATION_EXPIRATION";
1994     case 0xC0000269:
1995         return "STATUS_ILLEGAL_DLL_RELOCATION";
1996     case 0xC000026A:
1997         return "STATUS_LICENSE_VIOLATION";
1998     case 0xC000026B:
1999         return "STATUS_DLL_INIT_FAILED_LOGOFF";
2000     case 0xC000026C:
2001         return "STATUS_DRIVER_UNABLE_TO_LOAD";
2002     case 0xC000026D:
2003         return "STATUS_DFS_UNAVAILABLE";
2004     case 0xC000026E:
2005         return "STATUS_VOLUME_DISMOUNTED";
2006     case 0xC000026F:
2007         return "STATUS_WX86_INTERNAL_ERROR";
2008     case 0xC0000270:
2009         return "STATUS_WX86_FLOAT_STACK_CHECK";
2010     case 0xC0000271:
2011         return "STATUS_VALIDATE_CONTINUE";
2012     case 0xC0000272:
2013         return "STATUS_NO_MATCH";
2014     case 0xC0000273:
2015         return "STATUS_NO_MORE_MATCHES";
2016     case 0xC0000275:
2017         return "STATUS_NOT_A_REPARSE_POINT";
2018     case 0xC0000276:
2019         return "STATUS_IO_REPARSE_TAG_INVALID";
2020     case 0xC0000277:
2021         return "STATUS_IO_REPARSE_TAG_MISMATCH";
2022     case 0xC0000278:
2023         return "STATUS_IO_REPARSE_DATA_INVALID";
2024     case 0xC0000279:
2025         return "STATUS_IO_REPARSE_TAG_NOT_HANDLED";
2026     case 0xC0000280:
2027         return "STATUS_REPARSE_POINT_NOT_RESOLVED";
2028     case 0xC0000281:
2029         return "STATUS_DIRECTORY_IS_A_REPARSE_POINT";
2030     case 0xC0000282:
2031         return "STATUS_RANGE_LIST_CONFLICT";
2032     case 0xC0000283:
2033         return "STATUS_SOURCE_ELEMENT_EMPTY";
2034     case 0xC0000284:
2035         return "STATUS_DESTINATION_ELEMENT_FULL";
2036     case 0xC0000285:
2037         return "STATUS_ILLEGAL_ELEMENT_ADDRESS";
2038     case 0xC0000286:
2039         return "STATUS_MAGAZINE_NOT_PRESENT";
2040     case 0xC0000287:
2041         return "STATUS_REINITIALIZATION_NEEDED";
2042     case 0x80000288:
2043         return "STATUS_DEVICE_REQUIRES_CLEANING";
2044     case 0x80000289:
2045         return "STATUS_DEVICE_DOOR_OPEN";
2046     case 0xC000028A:
2047         return "STATUS_ENCRYPTION_FAILED";
2048     case 0xC000028B:
2049         return "STATUS_DECRYPTION_FAILED";
2050     case 0xC000028C:
2051         return "STATUS_RANGE_NOT_FOUND";
2052     case 0xC000028D:
2053         return "STATUS_NO_RECOVERY_POLICY";
2054     case 0xC000028E:
2055         return "STATUS_NO_EFS";
2056     case 0xC000028F:
2057         return "STATUS_WRONG_EFS";
2058     case 0xC0000290:
2059         return "STATUS_NO_USER_KEYS";
2060     case 0xC0000291:
2061         return "STATUS_FILE_NOT_ENCRYPTED";
2062     case 0xC0000292:
2063         return "STATUS_NOT_EXPORT_FORMAT";
2064     case 0xC0000293:
2065         return "STATUS_FILE_ENCRYPTED";
2066     case 0x40000294:
2067         return "STATUS_WAKE_SYSTEM";
2068     case 0xC0000295:
2069         return "STATUS_WMI_GUID_NOT_FOUND";
2070     case 0xC0000296:
2071         return "STATUS_WMI_INSTANCE_NOT_FOUND";
2072     case 0xC0000297:
2073         return "STATUS_WMI_ITEMID_NOT_FOUND";
2074     case 0xC0000298:
2075         return "STATUS_WMI_TRY_AGAIN";
2076     case 0xC0000299:
2077         return "STATUS_SHARED_POLICY";
2078     case 0xC000029A:
2079         return "STATUS_POLICY_OBJECT_NOT_FOUND";
2080     case 0xC000029B:
2081         return "STATUS_POLICY_ONLY_IN_DS";
2082     case 0xC000029C:
2083         return "STATUS_VOLUME_NOT_UPGRADED";
2084     case 0xC000029D:
2085         return "STATUS_REMOTE_STORAGE_NOT_ACTIVE";
2086     case 0xC000029E:
2087         return "STATUS_REMOTE_STORAGE_MEDIA_ERROR";
2088     case 0xC000029F:
2089         return "STATUS_NO_TRACKING_SERVICE";
2090     case 0xC00002A0:
2091         return "STATUS_SERVER_SID_MISMATCH";
2092     case 0xC00002A1:
2093         return "STATUS_DS_NO_ATTRIBUTE_OR_VALUE";
2094     case 0xC00002A2:
2095         return "STATUS_DS_INVALID_ATTRIBUTE_SYNTAX";
2096     case 0xC00002A3:
2097         return "STATUS_DS_ATTRIBUTE_TYPE_UNDEFINED";
2098     case 0xC00002A4:
2099         return "STATUS_DS_ATTRIBUTE_OR_VALUE_EXISTS";
2100     case 0xC00002A5:
2101         return "STATUS_DS_BUSY";
2102     case 0xC00002A6:
2103         return "STATUS_DS_UNAVAILABLE";
2104     case 0xC00002A7:
2105         return "STATUS_DS_NO_RIDS_ALLOCATED";
2106     case 0xC00002A8:
2107         return "STATUS_DS_NO_MORE_RIDS";
2108     case 0xC00002A9:
2109         return "STATUS_DS_INCORRECT_ROLE_OWNER";
2110     case 0xC00002AA:
2111         return "STATUS_DS_RIDMGR_INIT_ERROR";
2112     case 0xC00002AB:
2113         return "STATUS_DS_OBJ_CLASS_VIOLATION";
2114     case 0xC00002AC:
2115         return "STATUS_DS_CANT_ON_NON_LEAF";
2116     case 0xC00002AD:
2117         return "STATUS_DS_CANT_ON_RDN";
2118     case 0xC00002AE:
2119         return "STATUS_DS_CANT_MOD_OBJ_CLASS";
2120     case 0xC00002AF:
2121         return "STATUS_DS_CROSS_DOM_MOVE_FAILED";
2122     case 0xC00002B0:
2123         return "STATUS_DS_GC_NOT_AVAILABLE";
2124     case 0xC00002B1:
2125         return "STATUS_DIRECTORY_SERVICE_REQUIRED";
2126     case 0xC00002B2:
2127         return "STATUS_REPARSE_ATTRIBUTE_CONFLICT";
2128     case 0xC00002B3:
2129         return "STATUS_CANT_ENABLE_DENY_ONLY";
2130     case 0xC00002B4:
2131         return "STATUS_FLOAT_MULTIPLE_FAULTS";
2132     case 0xC00002B5:
2133         return "STATUS_FLOAT_MULTIPLE_TRAPS";
2134     case 0xC00002B6:
2135         return "STATUS_DEVICE_REMOVED";
2136     case 0xC00002B7:
2137         return "STATUS_JOURNAL_DELETE_IN_PROGRESS";
2138     case 0xC00002B8:
2139         return "STATUS_JOURNAL_NOT_ACTIVE";
2140     case 0xC00002B9:
2141         return "STATUS_NOINTERFACE";
2142     case 0xC00002C1:
2143         return "STATUS_DS_ADMIN_LIMIT_EXCEEDED";
2144     case 0xC00002C2:
2145         return "STATUS_DRIVER_FAILED_SLEEP";
2146     case 0xC00002C3:
2147         return "STATUS_MUTUAL_AUTHENTICATION_FAILED";
2148     case 0xC00002C4:
2149         return "STATUS_CORRUPT_SYSTEM_FILE";
2150     case 0xC00002C5:
2151         return "STATUS_DATATYPE_MISALIGNMENT_ERROR";
2152     case 0xC00002C6:
2153         return "STATUS_WMI_READ_ONLY";
2154     case 0xC00002C7:
2155         return "STATUS_WMI_SET_FAILURE";
2156     case 0xC00002C8:
2157         return "STATUS_COMMITMENT_MINIMUM";
2158     case 0xC00002C9:
2159         return "STATUS_REG_NAT_CONSUMPTION";
2160     case 0xC00002CA:
2161         return "STATUS_TRANSPORT_FULL";
2162     case 0xC00002CB:
2163         return "STATUS_DS_SAM_INIT_FAILURE";
2164     case 0xC00002CC:
2165         return "STATUS_ONLY_IF_CONNECTED";
2166     case 0xC00002CD:
2167         return "STATUS_DS_SENSITIVE_GROUP_VIOLATION";
2168     case 0xC00002CE:
2169         return "STATUS_PNP_RESTART_ENUMERATION";
2170     case 0xC00002CF:
2171         return "STATUS_JOURNAL_ENTRY_DELETED";
2172     case 0xC00002D0:
2173         return "STATUS_DS_CANT_MOD_PRIMARYGROUPID";
2174     case 0xC00002D1:
2175         return "STATUS_SYSTEM_IMAGE_BAD_SIGNATURE";
2176     case 0xC00002D2:
2177         return "STATUS_PNP_REBOOT_REQUIRED";
2178     case 0xC00002D3:
2179         return "STATUS_POWER_STATE_INVALID";
2180     case 0xC00002D4:
2181         return "STATUS_DS_INVALID_GROUP_TYPE";
2182     case 0xC00002D5:
2183         return "STATUS_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN";
2184     case 0xC00002D6:
2185         return "STATUS_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN";
2186     case 0xC00002D7:
2187         return "STATUS_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER";
2188     case 0xC00002D8:
2189         return "STATUS_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER";
2190     case 0xC00002D9:
2191         return "STATUS_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER";
2192     case 0xC00002DA:
2193         return "STATUS_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER";
2194     case 0xC00002DB:
2195         return "STATUS_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER";
2196     case 0xC00002DC:
2197         return "STATUS_DS_HAVE_PRIMARY_MEMBERS";
2198     case 0xC00002DD:
2199         return "STATUS_WMI_NOT_SUPPORTED";
2200     case 0xC00002DE:
2201         return "STATUS_INSUFFICIENT_POWER";
2202     case 0xC00002DF:
2203         return "STATUS_SAM_NEED_BOOTKEY_PASSWORD";
2204     case 0xC00002E0:
2205         return "STATUS_SAM_NEED_BOOTKEY_FLOPPY";
2206     case 0xC00002E1:
2207         return "STATUS_DS_CANT_START";
2208     case 0xC00002E2:
2209         return "STATUS_DS_INIT_FAILURE";
2210     case 0xC00002E3:
2211         return "STATUS_SAM_INIT_FAILURE";
2212     case 0xC00002E4:
2213         return "STATUS_DS_GC_REQUIRED";
2214     case 0xC00002E5:
2215         return "STATUS_DS_LOCAL_MEMBER_OF_LOCAL_ONLY";
2216     case 0xC00002E6:
2217         return "STATUS_DS_NO_FPO_IN_UNIVERSAL_GROUPS";
2218     case 0xC00002E7:
2219         return "STATUS_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED";
2220     case 0xC00002E8:
2221         return "STATUS_MULTIPLE_FAULT_VIOLATION";
2222     case 0xC0000300:
2223         return "STATUS_NOT_SUPPORTED_ON_SBS";
2224     case 0xC0009898:
2225         return "STATUS_WOW_ASSERTION";
2226     case 0xC0010001:
2227         return "DBG_NO_STATE_CHANGE";
2228     case 0xC0010002:
2229         return "DBG_APP_NOT_IDLE";
2230     case 0xC0020001:
2231         return "RPC_NT_INVALID_STRING_BINDING";
2232     case 0xC0020002:
2233         return "RPC_NT_WRONG_KIND_OF_BINDING";
2234     case 0xC0020003:
2235         return "RPC_NT_INVALID_BINDING";
2236     case 0xC0020004:
2237         return "RPC_NT_PROTSEQ_NOT_SUPPORTED";
2238     case 0xC0020005:
2239         return "RPC_NT_INVALID_RPC_PROTSEQ";
2240     case 0xC0020006:
2241         return "RPC_NT_INVALID_STRING_UUID";
2242     case 0xC0020007:
2243         return "RPC_NT_INVALID_ENDPOINT_FORMAT";
2244     case 0xC0020008:
2245         return "RPC_NT_INVALID_NET_ADDR";
2246     case 0xC0020009:
2247         return "RPC_NT_NO_ENDPOINT_FOUND";
2248     case 0xC002000A:
2249         return "RPC_NT_INVALID_TIMEOUT";
2250     case 0xC002000B:
2251         return "RPC_NT_OBJECT_NOT_FOUND";
2252     case 0xC002000C:
2253         return "RPC_NT_ALREADY_REGISTERED";
2254     case 0xC002000D:
2255         return "RPC_NT_TYPE_ALREADY_REGISTERED";
2256     case 0xC002000E:
2257         return "RPC_NT_ALREADY_LISTENING";
2258     case 0xC002000F:
2259         return "RPC_NT_NO_PROTSEQS_REGISTERED";
2260     case 0xC0020010:
2261         return "RPC_NT_NOT_LISTENING";
2262     case 0xC0020011:
2263         return "RPC_NT_UNKNOWN_MGR_TYPE";
2264     case 0xC0020012:
2265         return "RPC_NT_UNKNOWN_IF";
2266     case 0xC0020013:
2267         return "RPC_NT_NO_BINDINGS";
2268     case 0xC0020014:
2269         return "RPC_NT_NO_PROTSEQS";
2270     case 0xC0020015:
2271         return "RPC_NT_CANT_CREATE_ENDPOINT";
2272     case 0xC0020016:
2273         return "RPC_NT_OUT_OF_RESOURCES";
2274     case 0xC0020017:
2275         return "RPC_NT_SERVER_UNAVAILABLE";
2276     case 0xC0020018:
2277         return "RPC_NT_SERVER_TOO_BUSY";
2278     case 0xC0020019:
2279         return "RPC_NT_INVALID_NETWORK_OPTIONS";
2280     case 0xC002001A:
2281         return "RPC_NT_NO_CALL_ACTIVE";
2282     case 0xC002001B:
2283         return "RPC_NT_CALL_FAILED";
2284     case 0xC002001C:
2285         return "RPC_NT_CALL_FAILED_DNE";
2286     case 0xC002001D:
2287         return "RPC_NT_PROTOCOL_ERROR";
2288     case 0xC002001F:
2289         return "RPC_NT_UNSUPPORTED_TRANS_SYN";
2290     case 0xC0020021:
2291         return "RPC_NT_UNSUPPORTED_TYPE";
2292     case 0xC0020022:
2293         return "RPC_NT_INVALID_TAG";
2294     case 0xC0020023:
2295         return "RPC_NT_INVALID_BOUND";
2296     case 0xC0020024:
2297         return "RPC_NT_NO_ENTRY_NAME";
2298     case 0xC0020025:
2299         return "RPC_NT_INVALID_NAME_SYNTAX";
2300     case 0xC0020026:
2301         return "RPC_NT_UNSUPPORTED_NAME_SYNTAX";
2302     case 0xC0020028:
2303         return "RPC_NT_UUID_NO_ADDRESS";
2304     case 0xC0020029:
2305         return "RPC_NT_DUPLICATE_ENDPOINT";
2306     case 0xC002002A:
2307         return "RPC_NT_UNKNOWN_AUTHN_TYPE";
2308     case 0xC002002B:
2309         return "RPC_NT_MAX_CALLS_TOO_SMALL";
2310     case 0xC002002C:
2311         return "RPC_NT_STRING_TOO_LONG";
2312     case 0xC002002D:
2313         return "RPC_NT_PROTSEQ_NOT_FOUND";
2314     case 0xC002002E:
2315         return "RPC_NT_PROCNUM_OUT_OF_RANGE";
2316     case 0xC002002F:
2317         return "RPC_NT_BINDING_HAS_NO_AUTH";
2318     case 0xC0020030:
2319         return "RPC_NT_UNKNOWN_AUTHN_SERVICE";
2320     case 0xC0020031:
2321         return "RPC_NT_UNKNOWN_AUTHN_LEVEL";
2322     case 0xC0020032:
2323         return "RPC_NT_INVALID_AUTH_IDENTITY";
2324     case 0xC0020033:
2325         return "RPC_NT_UNKNOWN_AUTHZ_SERVICE";
2326     case 0xC0020034:
2327         return "EPT_NT_INVALID_ENTRY";
2328     case 0xC0020035:
2329         return "EPT_NT_CANT_PERFORM_OP";
2330     case 0xC0020036:
2331         return "EPT_NT_NOT_REGISTERED";
2332     case 0xC0020037:
2333         return "RPC_NT_NOTHING_TO_EXPORT";
2334     case 0xC0020038:
2335         return "RPC_NT_INCOMPLETE_NAME";
2336     case 0xC0020039:
2337         return "RPC_NT_INVALID_VERS_OPTION";
2338     case 0xC002003A:
2339         return "RPC_NT_NO_MORE_MEMBERS";
2340     case 0xC002003B:
2341         return "RPC_NT_NOT_ALL_OBJS_UNEXPORTED";
2342     case 0xC002003C:
2343         return "RPC_NT_INTERFACE_NOT_FOUND";
2344     case 0xC002003D:
2345         return "RPC_NT_ENTRY_ALREADY_EXISTS";
2346     case 0xC002003E:
2347         return "RPC_NT_ENTRY_NOT_FOUND";
2348     case 0xC002003F:
2349         return "RPC_NT_NAME_SERVICE_UNAVAILABLE";
2350     case 0xC0020040:
2351         return "RPC_NT_INVALID_NAF_ID";
2352     case 0xC0020041:
2353         return "RPC_NT_CANNOT_SUPPORT";
2354     case 0xC0020042:
2355         return "RPC_NT_NO_CONTEXT_AVAILABLE";
2356     case 0xC0020043:
2357         return "RPC_NT_INTERNAL_ERROR";
2358     case 0xC0020044:
2359         return "RPC_NT_ZERO_DIVIDE";
2360     case 0xC0020045:
2361         return "RPC_NT_ADDRESS_ERROR";
2362     case 0xC0020046:
2363         return "RPC_NT_FP_DIV_ZERO";
2364     case 0xC0020047:
2365         return "RPC_NT_FP_UNDERFLOW";
2366     case 0xC0020048:
2367         return "RPC_NT_FP_OVERFLOW";
2368     case 0xC0030001:
2369         return "RPC_NT_NO_MORE_ENTRIES";
2370     case 0xC0030002:
2371         return "RPC_NT_SS_CHAR_TRANS_OPEN_FAIL";
2372     case 0xC0030003:
2373         return "RPC_NT_SS_CHAR_TRANS_SHORT_FILE";
2374     case 0xC0030004:
2375         return "RPC_NT_SS_IN_NULL_CONTEXT";
2376     case 0xC0030005:
2377         return "RPC_NT_SS_CONTEXT_MISMATCH";
2378     case 0xC0030006:
2379         return "RPC_NT_SS_CONTEXT_DAMAGED";
2380     case 0xC0030007:
2381         return "RPC_NT_SS_HANDLES_MISMATCH";
2382     case 0xC0030008:
2383         return "RPC_NT_SS_CANNOT_GET_CALL_HANDLE";
2384     case 0xC0030009:
2385         return "RPC_NT_NULL_REF_POINTER";
2386     case 0xC003000A:
2387         return "RPC_NT_ENUM_VALUE_OUT_OF_RANGE";
2388     case 0xC003000B:
2389         return "RPC_NT_BYTE_COUNT_TOO_SMALL";
2390     case 0xC003000C:
2391         return "RPC_NT_BAD_STUB_DATA";
2392     case 0xC0020049:
2393         return "RPC_NT_CALL_IN_PROGRESS";
2394     case 0xC002004A:
2395         return "RPC_NT_NO_MORE_BINDINGS";
2396     case 0xC002004B:
2397         return "RPC_NT_GROUP_MEMBER_NOT_FOUND";
2398     case 0xC002004C:
2399         return "EPT_NT_CANT_CREATE";
2400     case 0xC002004D:
2401         return "RPC_NT_INVALID_OBJECT";
2402     case 0xC002004F:
2403         return "RPC_NT_NO_INTERFACES";
2404     case 0xC0020050:
2405         return "RPC_NT_CALL_CANCELLED";
2406     case 0xC0020051:
2407         return "RPC_NT_BINDING_INCOMPLETE";
2408     case 0xC0020052:
2409         return "RPC_NT_COMM_FAILURE";
2410     case 0xC0020053:
2411         return "RPC_NT_UNSUPPORTED_AUTHN_LEVEL";
2412     case 0xC0020054:
2413         return "RPC_NT_NO_PRINC_NAME";
2414     case 0xC0020055:
2415         return "RPC_NT_NOT_RPC_ERROR";
2416     case 0x40020056:
2417         return "RPC_NT_UUID_LOCAL_ONLY";
2418     case 0xC0020057:
2419         return "RPC_NT_SEC_PKG_ERROR";
2420     case 0xC0020058:
2421         return "RPC_NT_NOT_CANCELLED";
2422     case 0xC0030059:
2423         return "RPC_NT_INVALID_ES_ACTION";
2424     case 0xC003005A:
2425         return "RPC_NT_WRONG_ES_VERSION";
2426     case 0xC003005B:
2427         return "RPC_NT_WRONG_STUB_VERSION";
2428     case 0xC003005C:
2429         return "RPC_NT_INVALID_PIPE_OBJECT";
2430     case 0xC003005D:
2431         return "RPC_NT_INVALID_PIPE_OPERATION";
2432     case 0xC003005E:
2433         return "RPC_NT_WRONG_PIPE_VERSION";
2434     case 0xC003005F:
2435         return "RPC_NT_PIPE_CLOSED";
2436     case 0xC0030060:
2437         return "RPC_NT_PIPE_DISCIPLINE_ERROR";
2438     case 0xC0030061:
2439         return "RPC_NT_PIPE_EMPTY";
2440     case 0xC0020062:
2441         return "RPC_NT_INVALID_ASYNC_HANDLE";
2442     case 0xC0020063:
2443         return "RPC_NT_INVALID_ASYNC_CALL";
2444     case 0x400200AF:
2445         return "RPC_NT_SEND_INCOMPLETE";
2446     case 0xC0140001:
2447         return "STATUS_ACPI_INVALID_OPCODE";
2448     case 0xC0140002:
2449         return "STATUS_ACPI_STACK_OVERFLOW";
2450     case 0xC0140003:
2451         return "STATUS_ACPI_ASSERT_FAILED";
2452     case 0xC0140004:
2453         return "STATUS_ACPI_INVALID_INDEX";
2454     case 0xC0140005:
2455         return "STATUS_ACPI_INVALID_ARGUMENT";
2456     case 0xC0140006:
2457         return "STATUS_ACPI_FATAL";
2458     case 0xC0140007:
2459         return "STATUS_ACPI_INVALID_SUPERNAME";
2460     case 0xC0140008:
2461         return "STATUS_ACPI_INVALID_ARGTYPE";
2462     case 0xC0140009:
2463         return "STATUS_ACPI_INVALID_OBJTYPE";
2464     case 0xC014000A:
2465         return "STATUS_ACPI_INVALID_TARGETTYPE";
2466     case 0xC014000B:
2467         return "STATUS_ACPI_INCORRECT_ARGUMENT_COUNT";
2468     case 0xC014000C:
2469         return "STATUS_ACPI_ADDRESS_NOT_MAPPED";
2470     case 0xC014000D:
2471         return "STATUS_ACPI_INVALID_EVENTTYPE";
2472     case 0xC014000E:
2473         return "STATUS_ACPI_HANDLER_COLLISION";
2474     case 0xC014000F:
2475         return "STATUS_ACPI_INVALID_DATA";
2476     case 0xC0140010:
2477         return "STATUS_ACPI_INVALID_REGION";
2478     case 0xC0140011:
2479         return "STATUS_ACPI_INVALID_ACCESS_SIZE";
2480     case 0xC0140012:
2481         return "STATUS_ACPI_ACQUIRE_GLOBAL_LOCK";
2482     case 0xC0140013:
2483         return "STATUS_ACPI_ALREADY_INITIALIZED";
2484     case 0xC0140014:
2485         return "STATUS_ACPI_NOT_INITIALIZED";
2486     case 0xC0140015:
2487         return "STATUS_ACPI_INVALID_MUTEX_LEVEL";
2488     case 0xC0140016:
2489         return "STATUS_ACPI_MUTEX_NOT_OWNED";
2490     case 0xC0140017:
2491         return "STATUS_ACPI_MUTEX_NOT_OWNER";
2492     case 0xC0140018:
2493         return "STATUS_ACPI_RS_ACCESS";
2494     case 0xC0140019:
2495         return "STATUS_ACPI_INVALID_TABLE";
2496     case 0xC0140020:
2497         return "STATUS_ACPI_REG_HANDLER_FAILED";
2498     case 0xC0140021:
2499         return "STATUS_ACPI_POWER_REQUEST_FAILED";
2500     case 0xC00A0001:
2501         return "STATUS_CTX_WINSTATION_NAME_INVALID";
2502     case 0xC00A0002:
2503         return "STATUS_CTX_INVALID_PD";
2504     case 0xC00A0003:
2505         return "STATUS_CTX_PD_NOT_FOUND";
2506     case 0x400A0004:
2507         return "STATUS_CTX_CDM_CONNECT";
2508     case 0x400A0005:
2509         return "STATUS_CTX_CDM_DISCONNECT";
2510     case 0xC00A0006:
2511         return "STATUS_CTX_CLOSE_PENDING";
2512     case 0xC00A0007:
2513         return "STATUS_CTX_NO_OUTBUF";
2514     case 0xC00A0008:
2515         return "STATUS_CTX_MODEM_INF_NOT_FOUND";
2516     case 0xC00A0009:
2517         return "STATUS_CTX_INVALID_MODEMNAME";
2518     case 0xC00A000A:
2519         return "STATUS_CTX_RESPONSE_ERROR";
2520     case 0xC00A000B:
2521         return "STATUS_CTX_MODEM_RESPONSE_TIMEOUT";
2522     case 0xC00A000C:
2523         return "STATUS_CTX_MODEM_RESPONSE_NO_CARRIER";
2524     case 0xC00A000D:
2525         return "STATUS_CTX_MODEM_RESPONSE_NO_DIALTONE";
2526     case 0xC00A000E:
2527         return "STATUS_CTX_MODEM_RESPONSE_BUSY";
2528     case 0xC00A000F:
2529         return "STATUS_CTX_MODEM_RESPONSE_VOICE";
2530     case 0xC00A0010:
2531         return "STATUS_CTX_TD_ERROR";
2532     case 0xC00A0012:
2533         return "STATUS_CTX_LICENSE_CLIENT_INVALID";
2534     case 0xC00A0013:
2535         return "STATUS_CTX_LICENSE_NOT_AVAILABLE";
2536     case 0xC00A0014:
2537         return "STATUS_CTX_LICENSE_EXPIRED";
2538     case 0xC00A0015:
2539         return "STATUS_CTX_WINSTATION_NOT_FOUND";
2540     case 0xC00A0016:
2541         return "STATUS_CTX_WINSTATION_NAME_COLLISION";
2542     case 0xC00A0017:
2543         return "STATUS_CTX_WINSTATION_BUSY";
2544     case 0xC00A0018:
2545         return "STATUS_CTX_BAD_VIDEO_MODE";
2546     case 0xC00A0022:
2547         return "STATUS_CTX_GRAPHICS_INVALID";
2548     case 0xC00A0024:
2549         return "STATUS_CTX_NOT_CONSOLE";
2550     case 0xC00A0026:
2551         return "STATUS_CTX_CLIENT_QUERY_TIMEOUT";
2552     case 0xC00A0027:
2553         return "STATUS_CTX_CONSOLE_DISCONNECT";
2554     case 0xC00A0028:
2555         return "STATUS_CTX_CONSOLE_CONNECT";
2556     case 0xC00A002A:
2557         return "STATUS_CTX_SHADOW_DENIED";
2558     case 0xC00A002B:
2559         return "STATUS_CTX_WINSTATION_ACCESS_DENIED";
2560     case 0xC00A002E:
2561         return "STATUS_CTX_INVALID_WD";
2562     case 0xC00A002F:
2563         return "STATUS_CTX_WD_NOT_FOUND";
2564     case 0xC00A0030:
2565         return "STATUS_CTX_SHADOW_INVALID";
2566     case 0xC00A0031:
2567         return "STATUS_CTX_SHADOW_DISABLED";
2568     case 0xC00A0032:
2569         return "STATUS_RDP_PROTOCOL_ERROR";
2570     case 0xC00A0033:
2571         return "STATUS_CTX_CLIENT_LICENSE_NOT_SET";
2572     case 0xC00A0034:
2573         return "STATUS_CTX_CLIENT_LICENSE_IN_USE";
2574     case 0xC0040035:
2575         return "STATUS_PNP_BAD_MPS_TABLE";
2576     case 0xC0040036:
2577         return "STATUS_PNP_TRANSLATION_FAILED";
2578     case 0xC0040037:
2579         return "STATUS_PNP_IRQ_TRANSLATION_FAILED";
2580     default:
2581         return "STATUS_UNKNOWN";
2582     }
2583 }
2584 
2585 
2586 /* avoid stack overflow for dead symlinks */
2587 
2588 VOID
2589 Ext2TraceMcb(PCHAR fn, USHORT lc, USHORT add, PEXT2_MCB Mcb) {
2590     int i;
2591     CHAR _space[33];
2592 
2593     _snprintf(&_space[0], 32, "%s:%d:", fn, lc);
2594     _space[32] = 0;
2595     i = strlen(_space);
2596     while (i < 32) {
2597         _space[i++] = ' ';
2598         _space[i]=0;
2599     }
2600     if (add) {
2601         Ext2ReferXcb(&Mcb->Refercount);
2602         DEBUG(DL_RES,   ("%s +%2u %wZ (%p)\n", _space, (Mcb->Refercount - 1), &Mcb->FullName, Mcb));
2603     } else {
2604         Ext2DerefXcb(&Mcb->Refercount);
2605         DEBUG(DL_RES, ("%s -%2u %wZ (%p)\n", _space, Mcb->Refercount, &Mcb->FullName, Mcb));
2606     }
2607 }
2608 
2609 KSPIN_LOCK  Ext2MemoryLock;
2610 ULONGLONG   Ext2TotalMemorySize = 0;
2611 ULONG       Ext2TotalAllocates = 0;
2612 
2613 PVOID
2614 Ext2AllocatePool(
2615     IN POOL_TYPE PoolType,
2616     IN SIZE_T NumberOfBytes,
2617     IN ULONG Tag
2618 )
2619 {
2620     PUCHAR  Buffer =  ExAllocatePoolWithTag(
2621                           PoolType,
2622                           0x20 + NumberOfBytes,
2623                           Tag);
2624     if (Buffer) {
2625         KIRQL   Irql = 0;
2626         PULONG  Data = (PULONG)Buffer;
2627         Data[0] = (ULONG)NumberOfBytes;
2628         Data[1] = (ULONG)NumberOfBytes + 0x20;
2629         memset(Buffer + 0x08, 'S', 8);
2630         memset(Buffer + 0x10 + NumberOfBytes, 'E', 0x10);
2631         Buffer += 0x10;
2632         KeAcquireSpinLock(&Ext2MemoryLock, &Irql);
2633         Ext2TotalMemorySize = Ext2TotalMemorySize + NumberOfBytes;
2634         Ext2TotalAllocates += 1;
2635         KeReleaseSpinLock(&Ext2MemoryLock, Irql);
2636     }
2637 
2638     return Buffer;
2639 }
2640 
2641 VOID
2642 Ext2FreePool(
2643     IN PVOID P,
2644     IN ULONG Tag
2645 )
2646 {
2647     PUCHAR  Buffer = (PUCHAR)P;
2648     PULONG  Data;
2649     ULONG   NumberOfBytes, i;
2650     KIRQL   Irql;
2651 
2652     Buffer -= 0x10;
2653     Data = (PULONG)(Buffer);
2654     NumberOfBytes = Data[0];
2655     if (Data[1] != NumberOfBytes + 0x20) {
2656         DbgBreak();
2657         return;
2658     }
2659     for (i=0x08; i < 0x10; i++) {
2660         if (Buffer[i] != 'S') {
2661             DbgBreak();
2662         }
2663         Buffer[i] = '-';
2664     }
2665     for (i=0; i < 0x10; i++) {
2666         if (Buffer[i + NumberOfBytes + 0x10] != 'E') {
2667             DbgBreak();
2668             return;
2669         }
2670         Buffer[i + NumberOfBytes + 0x10] = '-';
2671     }
2672 
2673     KeAcquireSpinLock(&Ext2MemoryLock, &Irql);
2674     Ext2TotalMemorySize = Ext2TotalMemorySize - NumberOfBytes;
2675     Ext2TotalAllocates -= 1;
2676     KeReleaseSpinLock(&Ext2MemoryLock, Irql);
2677 
2678     ExFreePoolWithTag(Buffer, Tag);
2679 }
2680 
2681 #else  // EXT2_DEBUG
2682 
2683 PVOID
2684 Ext2AllocatePool(
2685     IN POOL_TYPE PoolType,
2686     IN SIZE_T NumberOfBytes,
2687     IN ULONG Tag
2688 )
2689 {
2690     return ExAllocatePoolWithTag(
2691                PoolType,
2692                NumberOfBytes,
2693                Tag);
2694 }
2695 
2696 VOID
2697 Ext2FreePool(
2698     IN PVOID P,
2699     IN ULONG Tag
2700 )
2701 {
2702     ExFreePoolWithTag(P, Tag);
2703 }
2704 
2705 #endif // !EXT2_DEBUG
2706