[m-rev.] for review: Introduce io.system_error to io.m public interface.

Peter Wang novalazy at gmail.com
Mon Aug 22 16:45:13 AEST 2022


Implement the error handling proposals from February and August 2022
on the mercury-users list.

We add io.system_error to the public interface of io.m
and document what its foreign representation is for each backend.

We allow io.error to optionally contain an io.system_error value,
and provide predicates to retrieve the io.system_error from an io.error.
The user may then inspect the system error via foreign code.

We also provide a predicate that takes an io.error and returns a name
for the system error it contains (if any). This makes it relatively easy
for Mercury programs to check for specific error conditions.

By returning platform-specific (actually, implementation-dependent)
error names, we are pushing the responsibility of mapping strings to
error conditions onto the application programmer. On the other hand, it
is not practical for us to map all possible system-specific error codes
to some common set of values. We could do it for a small set of common
error codes/exceptions, perhaps.

The standard library will construct io.error values containing
io.system_errors. However, we do not yet provide a facility for user
code to do the same.

library/io.m:
    Move io.system_error to the public interface.

    Change the internal representation of io.error to support holding an
    io.system_error and an optional error message prefix.
    An io.system_error may originate from an errno value or a Windows
    system error code; the constructor distinguishes those cases.

    When an io.error contains an io.system_error, do not construct the
    error message upfront. Retrieve the error message only when
    io.error_message is called.

    Add predicates to retrieve a system_error from io.error.

    Add predicate to return the name of the system error in an io.error.

    Delete unnecessary io arguments from is_error/5 and
    is_maybe_win32_error/5.

    Replace make_err_msg with make_io_error_from_system_error.

    Replace make_maybe_win32_err_msg with
    make_io_error_from_maybe_win32_error.

    Delete ML_make_err_msg and ML_make_win32_err_msg macros.

library/dir.m:
library/io.file.m:
    Leave comments for followup work.

browser/listing.m:
library/bitmap.m:
library/io.call_system.m:
library/io.environment.m:
library/io.file.m:
library/io.text_read.m:
mdbcomp/program_representation.m:
    Conform to changes.

tools/generate_errno_name:
tools/generate_win32_error_name:
    Add scripts to generate mercury_errno_name.c and
    mercury_win32_error_name.c.

runtime/Mmakefile:
runtime/mercury_errno_name.c:
runtime/mercury_errno_name.h:
runtime/mercury_win32_error_name.c:
runtime/mercury_win32_error_name.h:
    Add MR_errno_name() and MR_win32_error_name() functions,
    used by io.m to convert error codes to string names.

tests/hard_coded/null_char.exp:
    Update expected output.
---
 browser/listing.m                  |    6 +-
 library/bitmap.m                   |    2 +-
 library/dir.m                      |   34 +-
 library/io.call_system.m           |    7 +-
 library/io.environment.m           |    4 +-
 library/io.file.m                  |   41 +-
 library/io.m                       |  579 ++++++---
 library/io.text_read.m             |    4 +-
 mdbcomp/program_representation.m   |    5 +-
 runtime/Mmakefile                  |   10 +
 runtime/mercury_errno_name.c       |  472 ++++++++
 runtime/mercury_errno_name.h       |   11 +
 runtime/mercury_win32_error_name.c | 1784 +++++++++++++++++++++++++++
 runtime/mercury_win32_error_name.h |   17 +
 tests/hard_coded/null_char.exp     |    4 +-
 tools/generate_errno_name          |  205 ++++
 tools/generate_win32_error_name    | 1810 ++++++++++++++++++++++++++++
 17 files changed, 4757 insertions(+), 238 deletions(-)
 create mode 100644 runtime/mercury_errno_name.c
 create mode 100644 runtime/mercury_errno_name.h
 create mode 100644 runtime/mercury_win32_error_name.c
 create mode 100644 runtime/mercury_win32_error_name.h
 create mode 100755 tools/generate_errno_name
 create mode 100755 tools/generate_win32_error_name

diff --git a/browser/listing.m b/browser/listing.m
index 4ecc73c4f..d7a4bda37 100644
--- a/browser/listing.m
+++ b/browser/listing.m
@@ -423,9 +423,9 @@ execute_command_with_redirects(Prog, Args, OutStreamC, ErrorStreamC,
     do_posix_spawnp(Prog, length(Args), Args, OutStreamC, ErrorStreamC, Status,
         Error0, !IO),
     ( if Status = -1 then
-        io.make_err_msg(Error0, "error invoking system command: ",
-            Message, !IO),
-        Result = error(Message)
+        IOError = io.make_io_error_from_system_error(
+            "error invoking system command: ", Error0),
+        Result = error(io.error_message(IOError))
     else if Status = -2 then
         Result = error("posix_spawn not supported on this platform")
     else
diff --git a/library/bitmap.m b/library/bitmap.m
index 588f372ef..6f9c8d3e9 100644
--- a/library/bitmap.m
+++ b/library/bitmap.m
@@ -1971,7 +1971,7 @@ read_bitmap_range(InputStream, Start, NumBytes, !Bitmap,
         Stream = binary_input_stream_get_stream(InputStream),
         do_read_bitmap_range(Stream, Start, NumBytes,
             !Bitmap, 0, BytesRead, Error, !IO),
-        is_error(Error, "read failed: ", MaybeIOError, !IO),
+        is_error(Error, "read failed: ", MaybeIOError),
         (
             MaybeIOError = yes(IOError),
             Result = error(IOError)
diff --git a/library/dir.m b/library/dir.m
index 6b3879b33..a9232cae4 100644
--- a/library/dir.m
+++ b/library/dir.m
@@ -924,7 +924,7 @@ relative_path_name_from_components(Components) = PathName :-
 
 current_directory(Result, !IO) :-
     current_directory_2(CurDir, Error, !IO),
-    is_error(Error, "dir.current_directory failed: ", MaybeIOError, !IO),
+    is_error(Error, "dir.current_directory failed: ", MaybeIOError),
     (
         MaybeIOError = yes(IOError),
         Result = error(IOError)
@@ -1053,18 +1053,18 @@ make_directory_or_check_exists(DirName, Result, !IO) :-
         ( if TypeResult = ok(directory) then
             check_dir_accessibility(DirName, Result, !IO)
         else
-            make_maybe_win32_err_msg(MaybeWin32Error,
-                "cannot create directory: ", Message, !IO),
-            Result = error(make_io_error(Message))
+            IOError = make_io_error_from_maybe_win32_error(
+                "cannot create directory: ", MaybeWin32Error),
+            Result = error(IOError)
         )
     ;
         MakeDirStatus = dir_exists,
         check_dir_accessibility(DirName, Result, !IO)
     ;
         MakeDirStatus = error,
-        make_maybe_win32_err_msg(MaybeWin32Error,
-            "cannot create directory: ", Message, !IO),
-        Result = error(make_io_error(Message))
+        IOError = make_io_error_from_maybe_win32_error(
+            "cannot create directory: ", MaybeWin32Error),
+        Result = error(IOError)
     ).
 
 :- pred check_dir_accessibility(string::in, io.res::out, io::di, io::uo)
@@ -1100,7 +1100,7 @@ have_make_directory_including_parents :-
 
 make_directory_including_parents(DirName, Result, !IO) :-
     make_directory_including_parents_2(DirName, SystemError, CheckAccess, !IO),
-    is_error(SystemError, "cannot make directory: ", MaybeIOError, !IO),
+    is_error(SystemError, "cannot make directory: ", MaybeIOError),
     (
         MaybeIOError = yes(IOError),
         Result = error(IOError)
@@ -1139,6 +1139,7 @@ make_directory_including_parents(DirName, Result, !IO) :-
         // CreateDirectory() doesn't fail if a file with the same name as the
         // directory being created already exists.
         if (System.IO.File.Exists(DirName)) {
+            // XXX ERROR: use more specific exception class
             Error =
                 new System.Exception(""a file with that name already exists"");
             CheckAccess = mr_bool.NO;
@@ -1164,6 +1165,7 @@ make_directory_including_parents(DirName, Result, !IO) :-
     try {
         java.io.File dir = new java.io.File(DirName);
         if (dir.isFile()) {
+            // XXX ERROR: use more specific exception class
             Error = new java.lang.RuntimeException(
                 ""a file with that name already exists"");
             CheckAccess = bool.NO;
@@ -1174,6 +1176,7 @@ make_directory_including_parents(DirName, Result, !IO) :-
             Error = null;
             CheckAccess = bool.NO;
         } else {
+            // XXX ERROR: use more specific exception class
             Error = new java.lang.RuntimeException(""make_directory failed"");
             CheckAccess = bool.NO;
         }
@@ -1195,9 +1198,9 @@ make_single_directory(DirName, Result, !IO) :-
         ; Status = dir_exists
         ; Status = error
         ),
-        make_maybe_win32_err_msg(MaybeWin32Error, "cannot create directory: ",
-            Message, !IO),
-        Result = error(make_io_error(Message))
+        IOError = make_io_error_from_maybe_win32_error(
+            "cannot create directory: ", MaybeWin32Error),
+        Result = error(IOError)
     ).
 
 :- type make_single_directory_status
@@ -1259,6 +1262,7 @@ make_single_directory(DirName, Result, !IO) :-
     [will_not_call_mercury, promise_pure, tabled_for_io, thread_safe],
 "
     try {
+        // XXX ERROR: use more specific exception class
         // DirectoryInfo.Create doesn't fail if a file with the same name as
         // the directory being created already exists.
         if (System.IO.File.Exists(DirName)) {
@@ -1306,6 +1310,7 @@ make_single_directory(DirName, Result, !IO) :-
         java.io.File parent = newDir.getParentFile();
 
         // Are these first two checks just to produce better error messages?
+        // XXX ERROR: use more specific exception classes
         if (parent == null) {
             Status = dir.ML_MAKE_SINGLE_DIRECTORY_ERROR;
             Error = new java.io.IOException(""can't create root directory"");
@@ -1678,7 +1683,7 @@ open(DirName, Result, !IO) :-
 open_2(DirName, DirPattern, Result, !IO) :-
     open_3(DirName, DirPattern, DirStream, MaybeWin32Error, !IO),
     is_maybe_win32_error(MaybeWin32Error, "cannot open directory: ",
-        MaybeIOError, !IO),
+        MaybeIOError),
     (
         MaybeIOError = yes(Error),
         Result = mfe_error(file_error(DirName, file_open, Error))
@@ -1751,6 +1756,7 @@ open_2(DirName, DirPattern, Result, !IO) :-
 "
     try {
         java.io.File file = new java.io.File(DirName);
+        // XXX ERROR: use more specific exception classes
         if (file.isDirectory()) {
             String[] list = file.list();
             if (list != null) {
@@ -1825,7 +1831,7 @@ close(DirName, DirStream, Result, !IO) :-
     % XXX The top level caller may not be dir.foldl2.
     % XXX The message is too verbose for use in a full file_error.
     is_maybe_win32_error(MaybeWin32Error,
-        "closing directory failed: ", MaybeIOError, !IO),
+        "closing directory failed: ", MaybeIOError),
     (
         MaybeIOError = yes(IOError),
         Result = mfe_error(file_error(DirName, file_close, IOError))
@@ -1886,7 +1892,7 @@ read_entry(DirStream, Result, !IO) :-
     % XXX The top level caller may not be dir.foldl2.
     % XXX The message is too verbose for use in a full file_error.
     is_maybe_win32_error(MaybeWin32Error,
-        "reading directory entry failed: ", MaybeIOError, !IO),
+        "reading directory entry failed: ", MaybeIOError),
     (
         MaybeIOError = yes(IOError),
         Result = error(IOError)
diff --git a/library/io.call_system.m b/library/io.call_system.m
index 85d168ead..55997cc6e 100644
--- a/library/io.call_system.m
+++ b/library/io.call_system.m
@@ -61,7 +61,7 @@ call_system(Command, Result, !IO) :-
         Result0 = ok(signalled(Signal)),
         string.int_to_string(Signal, SignalStr),
         ErrMsg = "system command killed by signal number " ++ SignalStr,
-        Result = error(io_error(ErrMsg))
+        Result = error(io_error_string(ErrMsg))
     ;
         Result0 = error(Error),
         Result = error(Error)
@@ -71,7 +71,7 @@ call_system(Command, Result, !IO) :-
 
 call_system_return_signal(Command, Result, !IO) :-
     call_system_code(Command, Status, Error, !IO),
-    is_error(Error, "error invoking system command: ", MaybeIOError, !IO),
+    is_error(Error, "error invoking system command: ", MaybeIOError),
     (
         MaybeIOError = yes(IOError),
         Result = error(IOError)
@@ -319,7 +319,8 @@ decode_system_command_exit_code(Code0) = Status :-
             Status = ok(signalled(Signal))
         ;
             Signalled = no,
-            Status = error(io_error("unknown result code from system command"))
+            Error = io_error_string("unknown result code from system command"),
+            Status = error(Error)
         )
     ).
 
diff --git a/library/io.environment.m b/library/io.environment.m
index 1eb88407c..c16d83c5e 100644
--- a/library/io.environment.m
+++ b/library/io.environment.m
@@ -88,11 +88,11 @@ set_environment_var(Var, Value, Res, !IO) :-
             else
                 string.format("Could not set environment variable `%s'",
                     [s(Var)], Message),
-                Res = error(io_error(Message))
+                Res = error(io_error_string(Message))
             )
         else
             Message = "Cannot set environment variables on this platform",
-            Res = error(io_error(Message))
+            Res = error(io_error_string(Message))
         )
     ).
 
diff --git a/library/io.file.m b/library/io.file.m
index 15d73e096..9d118f1a6 100644
--- a/library/io.file.m
+++ b/library/io.file.m
@@ -215,7 +215,7 @@
 
 remove_file(FileName, Result, !IO) :-
     remove_file_2(FileName, Error, !IO),
-    is_error(Error, "remove failed: ", MaybeIOError, !IO),
+    is_error(Error, "remove failed: ", MaybeIOError),
     (
         MaybeIOError = yes(IOError),
         Result = error(IOError)
@@ -249,6 +249,8 @@ remove_file(FileName, Result, !IO) :-
     [will_not_call_mercury, promise_pure, tabled_for_io, thread_safe],
 "
     try {
+        // System.IO.File.Delete() does not throw an exception
+        // if the file does not exist.
         if (System.IO.File.Exists(FileName)) {
             System.IO.File.Delete(FileName);
             Error = null;
@@ -275,6 +277,7 @@ remove_file(FileName, Result, !IO) :-
         if (file.delete()) {
             Error = null;
         } else {
+            // XXX ERROR: use FileNotFoundException?
             Error = new java.io.IOException(""remove_file failed"");
         }
     } catch (java.lang.Exception e) {
@@ -343,7 +346,7 @@ remove_directory_entry(DirName, FileName, _FileType, Continue, _, Res, !IO) :-
 
 rename_file(OldFileName, NewFileName, Result, !IO) :-
     rename_file_2(OldFileName, NewFileName, Error, !IO),
-    is_error(Error, "rename failed: ", MaybeIOError, !IO),
+    is_error(Error, "rename failed: ", MaybeIOError),
     (
         MaybeIOError = yes(IOError),
         Result = error(IOError)
@@ -381,6 +384,7 @@ rename_file(OldFileName, NewFileName, Result, !IO) :-
     [will_not_call_mercury, promise_pure, tabled_for_io, thread_safe],
 "
     try {
+        // XXX ERROR: do we really need to check for existence first?
         if (System.IO.File.Exists(OldFileName)) {
             System.IO.File.Move(OldFileName, NewFileName);
             Error = null;
@@ -405,13 +409,16 @@ rename_file(OldFileName, NewFileName, Result, !IO) :-
     try {
         java.io.File file = new java.io.File(OldFileName);
 
+        // XXX ERROR: do we really need to check for existence first?
         if (file.exists()) {
             if (file.renameTo(new java.io.File(NewFileName))) {
                 Error = null;
             } else {
+                // XXX ERROR: use FileNotFoundException?
                 Error = new java.io.IOException(""rename_file failed"");
             }
         } else {
+            // XXX ERROR: use FileNotFoundException?
             Error = new java.io.IOException(""No such file or directory"");
         }
     } catch (java.lang.Exception e) {
@@ -441,7 +448,7 @@ have_symlinks :-
 make_symlink(FileName, LinkFileName, Result, !IO) :-
     ( if io.file.have_symlinks then
         make_symlink_2(FileName, LinkFileName, Error, !IO),
-        is_error(Error, "io.make_symlink failed: ", MaybeIOError, !IO),
+        is_error(Error, "io.make_symlink failed: ", MaybeIOError),
         (
             MaybeIOError = yes(IOError),
             Result = error(IOError)
@@ -494,7 +501,7 @@ make_symlink(FileName, LinkFileName, Result, !IO) :-
 read_symlink(FileName, Result, !IO) :-
     ( if io.file.have_symlinks then
         read_symlink_2(FileName, TargetFileName, Error, !IO),
-        is_error(Error, "io.read_symlink failed: ", MaybeIOError, !IO),
+        is_error(Error, "io.read_symlink failed: ", MaybeIOError),
         (
             MaybeIOError = yes(IOError),
             Result = error(IOError)
@@ -588,7 +595,7 @@ check_file_accessibility(FileName, AccessTypes, Result, !IO) :-
         CheckExecute = pred_to_bool(contains(AccessTypes, execute)),
         check_file_accessibility_2(FileName, CheckRead, CheckWrite,
             CheckExecute, Error, !IO),
-        is_error(Error, "file not accessible: ", MaybeIOError, !IO),
+        is_error(Error, "file not accessible: ", MaybeIOError),
         (
             MaybeIOError = yes(IOError),
             Result = error(IOError)
@@ -687,6 +694,7 @@ check_file_accessibility(FileName, AccessTypes, Result, !IO) :-
         if (ok) {
             Error = null;
         } else {
+            // XXX ERROR: use this the correct exception?
             Error = new java.io.FileNotFoundException(""Permission denied"");
         }
     }
@@ -716,7 +724,7 @@ check_file_accessibility_dotnet(FileName, AccessTypes, Result, !IO) :-
         ( if FileType = directory then
             check_directory_accessibility_dotnet(FileName,
                 CheckRead, CheckWrite, Error, !IO),
-            is_error(Error, "file not accessible: ", MaybeIOError, !IO),
+            is_error(Error, "file not accessible: ", MaybeIOError),
             (
                 MaybeIOError = yes(IOError),
                 Result = error(IOError)
@@ -764,7 +772,7 @@ check_file_accessibility_dotnet(FileName, AccessTypes, Result, !IO) :-
                 CheckExec = yes
             then
                 have_dotnet_exec_permission(Error, !IO),
-                is_error(Error, "file not accessible: ", MaybeIOError, !IO),
+                is_error(Error, "file not accessible: ", MaybeIOError),
                 (
                     MaybeIOError = yes(IOError),
                     Result = error(IOError)
@@ -853,6 +861,7 @@ check_directory_accessibility_dotnet(_, _, _, Error, !IO) :-
             if ((attrs & System.IO.FileAttributes.ReadOnly) ==
                 System.IO.FileAttributes.ReadOnly)
             {
+                // XXX ERROR: use more specific exception class
                 Error = new System.Exception(""file is read-only"");
             }
         }
@@ -879,7 +888,7 @@ file_type(FollowSymLinks, FileName, Result, !IO) :-
         FollowSymLinksInt = 0
     ),
     file_type_2(FollowSymLinksInt, FileName, FileType, Error,  !IO),
-    is_error(Error, "can't find file type: ", MaybeIOError, !IO),
+    is_error(Error, "can't find file type: ", MaybeIOError),
     (
         MaybeIOError = yes(IOError),
         Result = error(IOError)
@@ -1069,6 +1078,8 @@ file_type(FollowSymLinks, FileName, Result, !IO) :-
     // The Java implementation can distinguish between regular files and
     // directories, and for everything else it just returns unknown.
 
+    // Java 7 java.nio.file.Files.readAttributes() can do better.
+
     FileType = jmercury.io__file.ML_FILE_TYPE_UNKNOWN;
     Error = null;
 
@@ -1093,7 +1104,7 @@ file_type(FollowSymLinks, FileName, Result, !IO) :-
 
 file_modification_time(File, Result, !IO) :-
     file_modification_time_2(File, Time, Error, !IO),
-    is_error(Error, "can't get file modification time: ", MaybeIOError, !IO),
+    is_error(Error, "can't get file modification time: ", MaybeIOError),
     (
         MaybeIOError = yes(IOError),
         Result = error(IOError)
@@ -1140,6 +1151,7 @@ file_modification_time(File, Result, !IO) :-
     [may_call_mercury, promise_pure, tabled_for_io, thread_safe],
 "
     try {
+        // XXX ERROR: do we really need to check for file existence first?
         if (System.IO.File.Exists(FileName)) {
             System.DateTime t = System.IO.File.GetLastWriteTime(FileName);
             Time = time.ML_construct_time_t(t);
@@ -1160,6 +1172,9 @@ file_modification_time(File, Result, !IO) :-
     [may_call_mercury, promise_pure, tabled_for_io, thread_safe,
         may_not_duplicate],
 "
+    // Java 7 java.nio.file.Files.readAttributes() presumably can
+    // distinguish a modtime of 0 from file not found or I/O error.
+
     try {
         long modtime = (new java.io.File(FileName)).lastModified();
         if (modtime == 0) {
@@ -1189,7 +1204,7 @@ make_temp_file(Result, !IO) :-
 make_temp_file(Dir, Prefix, Suffix, Result, !IO) :-
     do_make_temp(Dir, Prefix, Suffix, char_to_string(dir.directory_separator),
         Name, Error, !IO),
-    is_error(Error, "error creating temporary file: ", MaybeIOError, !IO),
+    is_error(Error, "error creating temporary file: ", MaybeIOError),
     (
         MaybeIOError = yes(IOError),
         Result = error(IOError)
@@ -1314,6 +1329,7 @@ make_temp_file(Dir, Prefix, Suffix, Result, !IO) :-
             Error = null;
         } else {
             FileName = """";
+            // XXX ERROR: more specific class name?
             Error = new java.io.IOException(""Could not create file"");
         }
     } catch (IOException e) {
@@ -1331,7 +1347,7 @@ make_temp_directory(Result, !IO) :-
 make_temp_directory(Dir, Prefix, Suffix, Result, !IO) :-
     do_make_temp_directory(Dir, Prefix, Suffix,
         char_to_string(dir.directory_separator), DirName, Error, !IO),
-    is_error(Error, "error creating temporary directory: ", MaybeIOError, !IO),
+    is_error(Error, "error creating temporary directory: ", MaybeIOError),
     (
         MaybeIOError = yes(IOError),
         Result = error(IOError)
@@ -1413,6 +1429,7 @@ make_temp_directory(Dir, Prefix, Suffix, Result, !IO) :-
                 }
                 else
                 {
+                    // XXX ERROR: more specific class?
                     Error = new System.Exception(string.Format(
                         ""Creating directory {0} failed with: {1:X}"",
                         DirName, errorNo));
@@ -1421,6 +1438,7 @@ make_temp_directory(Dir, Prefix, Suffix, Result, !IO) :-
 #endif
 
             default:
+                // XXX ERROR: more specific class?
                 Error = new System.Exception(
                     ""Changing folder permissions is not supported for: "" +
                     Environment.OSVersion);
@@ -1454,6 +1472,7 @@ make_temp_directory(Dir, Prefix, Suffix, Result, !IO) :-
         Error = null;
     } else {
         DirName = """";
+        // XXX ERROR: more specific class?
         Error = new java.io.IOException(""Couldn't create directory"");
     }
 ").
diff --git a/library/io.m b/library/io.m
index acf43f53e..0123f8cb1 100644
--- a/library/io.m
+++ b/library/io.m
@@ -130,7 +130,20 @@
     ;       eof
     ;       error(string, int). % error message, line number
 
-:- type io.error.   % Use error_message to decode it.
+    % A value indicating an error.
+    % This may or may not have an associated io.system_error value.
+    %
+:- type io.error.
+
+    % A system-dependent error value.
+    % For C backends, this is either an errno value (e.g. ENOENT)
+    % or a Windows system error code (e.g. ERROR_FILE_NOT_FOUND).
+    % For the Java and C# backends, this is an exception object.
+    %
+:- type system_error.
+:- pragma foreign_type(c, system_error, "MR_Integer").
+:- pragma foreign_type("C#", system_error, "System.Exception").
+:- pragma foreign_type(java, system_error, "java.lang.Exception").
 
     % whence denotes the base for a seek operation.
     %   set - seek relative to the start of the file
@@ -2044,15 +2057,61 @@
 % Interpreting I/O error messages.
 %
 
-    % Construct an error code including the specified error message.
+    % Construct an error value with the specified error message.
+    % The error value will not have an associated system error.
     %
 :- func make_io_error(string) = io.error.
 
-    % Look up the error message corresponding to a particular error code.
+    % Return an error message for the error value.
     %
 :- func error_message(io.error) = string.
 :- pred error_message(io.error::in, string::out) is det.
 
+    % get_system_error(Error, SystemError):
+    %
+    % Succeeds iff SystemError is a system error associated with Error.
+    %
+:- pred get_system_error(io.error::in, io.system_error::out) is semidet.
+
+    % As above, but only succeeds if the system error is an errno value.
+    %
+:- pred get_errno_error(io.error::in, io.system_error::out) is semidet.
+
+    % As above, but only succeeds if the system error is a Windows error code.
+    % XXX ERROR: should this refer to "Win32" error codes instead?
+    %
+:- pred get_windows_error(io.error::in, io.system_error::out) is semidet.
+
+    % As above, but only if the system error is a C# or Java exception object.
+    % XXX ERROR: how to name this?
+    %
+:- pred get_error_exception_object(io.error::in, io.system_error::out)
+    is semidet.
+
+    % get_system_error_name(Error, ErrorName):
+    %
+    % Succeeds if Error has an associated system error, otherwise fails.
+    % On success, ErrorName is a name for that system error as follows.
+    %
+    % For C backends, a system error is usually an errno value. If the errno
+    % value is recognised by the Mercury system, then ErrorName will be the
+    % name for that errno value as defined in <errno.h>, e.g. "ENOENT".
+    % Otherwise, ErrorName will be "errno: N" where N is a decimal number.
+    %
+    % For C backends on Windows, a system error may instead be a Windows system
+    % error code. If the error code is recognised by the Mercury system, then
+    % ErrorName will be the name for that error code in the Win32 API,
+    % e.g. "ERROR_FILE_NOT_FOUND". Otherwise, ErrorName will be
+    % "System error: 0xN" where 0xN is a hexadecimal number.
+    %
+    % For the C# backend, ErrorName will be the the fully qualified class name
+    % of an exception object, e.g. "System.IO.FileNotFoundException".
+    %
+    % For the Java backend, ErrorName will be the fully qualified class name
+    % of an exception object, e.g. "java.io.FileNotFoundException".
+    %
+:- pred get_system_error_name(io.error::in, string::out) is semidet.
+
 %---------------------------------------------------------------------------%
 %
 % Instances of the stream typeclasses.
@@ -2169,17 +2228,6 @@
     %
 :- pred have_dotnet is semidet.
 
-    % A system-dependent error indication.
-    % For C, this is 0 for success or the value of errno.
-    % (In a few cases, we pass a Win32 error as a system_error.)
-    % For Java, this is null for success or an exception object.
-    % For C#, this is null for success or an exception object.
-    %
-:- type system_error.
-:- pragma foreign_type(c, system_error, "MR_Integer").
-:- pragma foreign_type("C#", system_error, "System.Exception").
-:- pragma foreign_type(java, system_error, "java.lang.Exception").
-
     % Return a unique identifier for the given file (after following
     % symlinks in FileName).
     % XXX On Cygwin sometimes two files will have the same file_id.
@@ -2218,36 +2266,28 @@
 % Error handling.
 %
 
-    % is_error(Error, MessagePrefix, MaybeIOError, !IO):
+    % is_error(Error, MessagePrefix, MaybeIOError):
     % Returns `yes(IOError)' if Error indicates an error (not success).
-    % IOError contains an error message obtained by looking up the message
-    % for the given errno value and prepending MessagePrefix.
     %
-:- pred is_error(system_error::in, string::in, maybe(io.error)::out,
-    io::di, io::uo) is det.
+:- pred is_error(system_error::in, string::in, maybe(io.error)::out) is det.
 
-    % is_maybe_win32_error(Error, MessagePrefix, MaybeIOError, !IO):
+    % is_maybe_win32_error(Error, MessagePrefix, MaybeIOError):
     % Same as is_error except that Error is a Win32 error value on Windows.
     %
 :- pred is_maybe_win32_error(system_error::in, string::in,
-    maybe(io.error)::out, io::di, io::uo) is det.
+    maybe(io.error)::out) is det.
 
-    % make_err_msg(Error, MessagePrefix, Message, !IO):
-    % Message is an error message obtained by looking up the message for the
-    % given errno value and prepending MessagePrefix.
+    % Make an io.error from a message prefix and system error.
+    % On Windows, the system error is assumed to be a errno value.
     %
-:- pred make_err_msg(system_error::in, string::in, string::out,
-    io::di, io::uo) is det.
+:- func make_io_error_from_system_error(string, io.system_error) = io.error.
 
-    % make_maybe_win32_err_msg(Error, MessagePrefix, Message, !IO):
+    % Make an io.error from a message prefix and system error.
+    % On Windows, the system error is assumed to be a Windows system error
+    % code.
     %
-    % Message is an error message obtained by looking up the error message
-    % for Error and prepending MessagePrefix.
-    % On Win32 systems, Error is obtained by calling GetLastError.
-    % On other systems Error is obtained by reading errno.
-    %
-:- pred make_maybe_win32_err_msg(system_error::in, string::in, string::out,
-    io::di, io::uo) is det.
+:- func make_io_error_from_maybe_win32_error(string, io.system_error) =
+    io.error.
 
     % For use by bitmap.m, and other standard library modules
     % that want to do I/O.
@@ -2378,7 +2418,7 @@ io_state_compare(_, _, _) :-
 
 open_input(FileName, Result, !IO) :-
     do_open_text(FileName, "r", OpenCount, NewStream, Error, !IO),
-    is_error(Error, "can't open input file: ", MaybeIOError, !IO),
+    is_error(Error, "can't open input file: ", MaybeIOError),
     (
         MaybeIOError = yes(IOError),
         Result = error(IOError)
@@ -2391,7 +2431,7 @@ open_input(FileName, Result, !IO) :-
 
 open_binary_input(FileName, Result, !IO) :-
     do_open_binary(FileName, "rb", OpenCount, NewStream, Error, !IO),
-    is_error(Error, "can't open input file: ", MaybeIOError, !IO),
+    is_error(Error, "can't open input file: ", MaybeIOError),
     (
         MaybeIOError = yes(IOError),
         Result = error(IOError)
@@ -2406,7 +2446,7 @@ open_binary_input(FileName, Result, !IO) :-
 
 open_output(FileName, Result, !IO) :-
     do_open_text(FileName, "w", OpenCount, NewStream, Error, !IO),
-    is_error(Error, "can't open output file: ", MaybeIOError, !IO),
+    is_error(Error, "can't open output file: ", MaybeIOError),
     (
         MaybeIOError = yes(IOError),
         Result = error(IOError)
@@ -2419,7 +2459,7 @@ open_output(FileName, Result, !IO) :-
 
 open_binary_output(FileName, Result, !IO) :-
     do_open_binary(FileName, "wb", OpenCount, NewStream, Error, !IO),
-    is_error(Error, "can't open output file: ", MaybeIOError, !IO),
+    is_error(Error, "can't open output file: ", MaybeIOError),
     (
         MaybeIOError = yes(IOError),
         Result = error(IOError)
@@ -2434,7 +2474,7 @@ open_binary_output(FileName, Result, !IO) :-
 
 open_append(FileName, Result, !IO) :-
     do_open_text(FileName, "a", OpenCount, NewStream, Error, !IO),
-    is_error(Error, "can't append to file: ", MaybeIOError, !IO),
+    is_error(Error, "can't append to file: ", MaybeIOError),
     (
         MaybeIOError = yes(IOError),
         Result = error(IOError)
@@ -2447,7 +2487,7 @@ open_append(FileName, Result, !IO) :-
 
 open_binary_append(FileName, Result, !IO) :-
     do_open_binary(FileName, "ab", OpenCount, NewStream, Error, !IO),
-    is_error(Error, "can't append to file: ", MaybeIOError, !IO),
+    is_error(Error, "can't append to file: ", MaybeIOError),
     (
         MaybeIOError = yes(IOError),
         Result = error(IOError)
@@ -2712,7 +2752,7 @@ putback_char(input_stream(Stream), Character, !IO) :-
         Ok = yes
     ;
         Ok = no,
-        throw(io_error("failed to put back character"))
+        throw(io_error_string("failed to put back character"))
     ).
 
 %---------------------%
@@ -2778,7 +2818,7 @@ putback_int8(binary_input_stream(Stream), Int8, !IO) :-
         Ok = yes
     ;
         Ok = no,
-        throw(io_error("failed to put back int8"))
+        throw(io_error_string("failed to put back int8"))
     ).
 
 %---------------------%
@@ -2793,7 +2833,7 @@ putback_uint8(binary_input_stream(Stream), UInt8, !IO) :-
         Ok = yes
     ;
         Ok = no,
-        throw(io_error("failed to put back uint8"))
+        throw(io_error_string("failed to put back uint8"))
     ).
 
 %---------------------%
@@ -3443,8 +3483,8 @@ read_line(Stream, Result, !IO) :-
         Result = eof
     ;
         ResultCode = result_code_error,
-        make_err_msg(Error, "read failed: ", Msg, !IO),
-        Result = error(io_error(Msg))
+        IOError = make_io_error_from_system_error("read failed: ", Error),
+        Result = error(IOError)
     ).
 
 read_line_as_string(Result, !IO) :-
@@ -3461,11 +3501,11 @@ read_line_as_string(input_stream(Stream), Result, !IO) :-
         Result = eof
     ;
         Res = rlas_null_char,
-        Result = error(io_error("null character in input"))
+        Result = error(io_error_string("null character in input"))
     ;
         Res = rlas_error,
-        make_err_msg(Error, "read failed: ", Msg, !IO),
-        Result = error(io_error(Msg))
+        IOError = make_io_error_from_system_error("read failed: ", Error),
+        Result = error(IOError)
     ).
 
 ignore_whitespace(Result, !IO) :-
@@ -3601,18 +3641,19 @@ read_binary_from_text_input_stream(Stream, Result, !IO) :-
             ( if NewLineChar = '\n' then
                 Result = ok(T)
             else
-                Result = error(io_error("io.read_binary: missing newline"))
+                Result = error(io_error_string("io.read_binary: missing newline"))
             )
         ;
             NewLineRes = eof,
-            Result = error(io_error("io.read_binary: missing newline"))
+            Result = error(io_error_string("io.read_binary: missing newline"))
         )
     ;
         ReadResult = eof,
         Result = eof
     ;
+        % XXX ERROR: would need to change read_result(T) to return io.error
         ReadResult = error(ErrorMsg, _Line),
-        Result = error(io_error(ErrorMsg))
+        Result = error(io_error_string(ErrorMsg))
     ).
 
 %---------------------------------------------------------------------------%
@@ -3956,7 +3997,7 @@ read_file_as_string(Result, !IO) :-
 
 read_file_as_string(input_stream(Stream), Result, !IO) :-
     read_file_as_string_2(Stream, String, _NumCUs, Error, NullCharError, !IO),
-    is_error(Error, "read failed: ", MaybeIOError, !IO),
+    is_error(Error, "read failed: ", MaybeIOError),
     (
         MaybeIOError = yes(IOError),
         Result = error(String, IOError)
@@ -3964,7 +4005,7 @@ read_file_as_string(input_stream(Stream), Result, !IO) :-
         MaybeIOError = no,
         (
             NullCharError = yes,
-            Result = error("", io_error("null character in input"))
+            Result = error("", io_error_string("null character in input"))
         ;
             NullCharError = no,
             Result = ok(String)
@@ -3977,7 +4018,7 @@ read_file_as_string_and_num_code_units(Result, !IO) :-
 
 read_file_as_string_and_num_code_units(input_stream(Stream), Result, !IO) :-
     read_file_as_string_2(Stream, String, NumCUs, Error, NullCharError, !IO),
-    is_error(Error, "read failed: ", MaybeIOError, !IO),
+    is_error(Error, "read failed: ", MaybeIOError),
     (
         MaybeIOError = yes(IOError),
         Result = error2(String, NumCUs, IOError)
@@ -3985,7 +4026,7 @@ read_file_as_string_and_num_code_units(input_stream(Stream), Result, !IO) :-
         MaybeIOError = no,
         (
             NullCharError = yes,
-            Result = error2("", 0, io_error("null character in input"))
+            Result = error2("", 0, io_error_string("null character in input"))
         ;
             NullCharError = no,
             Result = ok2(String, NumCUs)
@@ -4847,19 +4888,261 @@ report_tabling_statistics(!IO) :-
 % Interpreting I/O error messages.
 %
 
-    % This definition is subject to change.
-    % Note that we use `io_error' rather than `io.error' because io.print,
-    % which may be called to print out the uncaught exception if there is
-    % no exception handler, does not print out the module name.
 :- type io.error
-    --->    io_error(string).
+    --->    io_error_string(string)
+    ;       io_error_errno(string, system_error)
+    ;       io_error_win32(string, system_error)
+    ;       io_error_exception_object(string, system_error).
 
-make_io_error(Error) = io_error(Error).
+:- type system_error_style
+    --->    syserr_errno
+    ;       syserr_errno_or_win32
+    ;       syserr_exception_object.
+
+:- pragma foreign_export_enum("C", system_error_style/0,
+    [prefix("ML_"), uppercase]).
+:- pragma foreign_export_enum("C#", system_error_style/0,
+    [prefix("ML_"), uppercase]).
+:- pragma foreign_export_enum("Java", system_error_style/0,
+    [prefix("ML_"), uppercase]).
+
+:- func native_system_error_style = system_error_style.
+
+:- pragma foreign_proc("C",
+    native_system_error_style = (SysErrStyle::out),
+    [will_not_call_mercury, promise_pure, thread_safe],
+"
+#ifdef MR_WIN32
+    SysErrStyle = ML_SYSERR_ERRNO_OR_WIN32;
+#else
+    SysErrStyle = ML_SYSERR_ERRNO;
+#endif
+").
+:- pragma foreign_proc("C#",
+    native_system_error_style = (SysErrStyle::out),
+    [will_not_call_mercury, promise_pure, thread_safe],
+"
+    SysErrStyle = io.ML_SYSERR_EXCEPTION_OBJECT;
+").
+:- pragma foreign_proc("Java",
+    native_system_error_style = (SysErrStyle::out),
+    [will_not_call_mercury, promise_pure, thread_safe],
+"
+    SysErrStyle = jmercury.io.ML_SYSERR_EXCEPTION_OBJECT;
+").
+
+%---------------------%
+
+make_io_error(Error) = io_error_string(Error).
+
+%---------------------%
 
 error_message(Error) = Msg :-
-    io.error_message(Error, Msg).
+    error_message(Error, Msg).
 
-error_message(io_error(Error), Error).
+error_message(Error, Msg) :-
+    (
+        Error = io_error_string(Msg)
+    ;
+        (
+            Error = io_error_errno(Prefix, Errno),
+            system_error_errno_message(Errno, Msg0)
+        ;
+            Error = io_error_win32(Prefix, ErrorCode),
+            system_error_win32_error_message(ErrorCode, Msg0)
+        ;
+            Error = io_error_exception_object(Prefix, Exception),
+            system_error_exception_message(Exception, Msg0)
+        ),
+        ( if Prefix = "" then
+            Msg = Msg0
+        else
+            Msg = Prefix ++ Msg0
+        )
+    ).
+
+%---------------------%
+
+get_system_error(Error, SystemError) :-
+    require_complete_switch [Error]
+    ( Error = io_error_string(_), fail
+    ; Error = io_error_errno(_, SystemError)
+    ; Error = io_error_win32(_, SystemError)
+    ; Error = io_error_exception_object(_, SystemError)
+    ).
+
+get_errno_error(Error, Errno) :-
+    Error = io_error_errno(_, Errno).
+
+get_windows_error(Error, ErrorCode) :-
+    Error = io_error_win32(_, ErrorCode).
+
+get_error_exception_object(Error, Exception) :-
+    Error = io_error_exception_object(_, Exception).
+
+%---------------------%
+
+get_system_error_name(Error, Name) :-
+    require_complete_switch [Error]
+    (
+        Error = io_error_string(_),
+        fail
+    ;
+        Error = io_error_errno(_, Errno),
+        system_error_errno_name(Errno, Name)
+    ;
+        Error = io_error_win32(_, ErrorCode),
+        system_error_win32_error_name(ErrorCode, Name)
+    ;
+        Error = io_error_exception_object(_, Exception),
+        system_error_exception_name(Exception, Name)
+    ).
+
+%---------------------%
+
+:- pred system_error_errno_name(io.system_error::in, string::out) is det.
+
+:- pragma foreign_proc("C",
+    system_error_errno_name(Errno::in, Name::out),
+    [will_not_call_mercury, promise_pure, thread_safe, may_not_export_body],
+"
+    const char *str = MR_errno_name(Errno);
+    if (str != NULL) {
+        Name = (MR_String) str;
+    } else {
+        Name = MR_make_string(MR_ALLOC_ID, ""errno: %d"", Errno);
+    }
+").
+
+system_error_errno_name(_, _) :-
+    error("io.system_error_errno_name: inapplicable back-end").
+
+%---------------------%
+
+:- pred system_error_errno_message(io.system_error::in, string::out) is det.
+
+:- pragma foreign_proc("C",
+    system_error_errno_message(Errno::in, Msg::out),
+    [will_not_call_mercury, promise_pure, thread_safe, may_not_export_body],
+"
+    char        errbuf[MR_STRERROR_BUF_SIZE];
+    const char  *errno_msg;
+
+    errno_msg = MR_strerror(Errno, errbuf, sizeof(errbuf));
+    MR_make_aligned_string_copy_msg(Msg, errno_msg, MR_ALLOC_ID);
+").
+
+system_error_errno_message(_, _) :-
+    error("io.system_error_errno_message: inapplicable back-end").
+
+%---------------------%
+
+:- pred system_error_win32_error_name(io.system_error::in, string::out) is det.
+
+:- pragma foreign_proc("C",
+    system_error_win32_error_name(ErrorCode::in, Name::out),
+    [will_not_call_mercury, promise_pure, thread_safe, may_not_export_body],
+"
+#ifdef MR_WIN32
+    const char *str = MR_win32_error_name(ErrorCode);
+    if (str != NULL) {
+        Name = (MR_String) str;
+    } else {
+        Name = MR_make_string(MR_ALLOC_ID, ""System error: 0x%X"", ErrorCode);
+    }
+#else
+    MR_fatal_error(""io.system_error_win32_error_name: not on Windows"");
+#endif
+").
+
+system_error_win32_error_name(_, _) :-
+    error("io.system_error_win32_error_name: inapplicable back-end").
+
+%---------------------%
+
+    % XXX is FormatMessage thread-safe? Nothing suggests that it is not.
+    %
+:- pred system_error_win32_error_message(io.system_error::in, string::out)
+    is det.
+
+:- pragma foreign_proc("C",
+    system_error_win32_error_message(ErrorCode::in, Name::out),
+    [will_not_call_mercury, promise_pure, thread_safe, may_not_export_body],
+"
+#ifdef MR_WIN32
+    LPVOID  err_buf;
+
+    if (FormatMessage(
+            FORMAT_MESSAGE_ALLOCATE_BUFFER
+            | FORMAT_MESSAGE_FROM_SYSTEM
+            | FORMAT_MESSAGE_IGNORE_INSERTS,
+            NULL,
+            ErrorCode,
+            MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+            (LPTSTR) &err_buf,
+            0,
+            NULL) > 0)
+    {
+        // Remove trailing CR LF sequence.
+        char *cr = strchr(err_buf, '\\r');
+        if (cr != NULL) {
+            *cr = '\\0';
+        }
+        MR_make_aligned_string_copy_msg(Name, err_buf, MR_ALLOC_ID);
+        LocalFree(err_buf);
+    } else {
+        Name = MR_make_string(MR_ALLOC_ID, ""System error: 0x%X"", ErrorCode);
+    }
+#else
+    MR_fatal_error(""io.system_error_win32_error_message: not on Windows"");
+#endif
+").
+
+system_error_win32_error_message(_, _) :-
+    error("io.system_error_win32_error_message: inapplicable back-end").
+
+%---------------------%
+
+:- pred system_error_exception_name(io.system_error::in, string::out) is det.
+
+:- pragma foreign_proc("C#",
+    system_error_exception_name(Exception::in, Name::out),
+    [will_not_call_mercury, promise_pure, thread_safe, may_not_export_body],
+"
+    Name = Exception.GetType().FullName;
+").
+:- pragma foreign_proc("Java",
+    system_error_exception_name(Exception::in, Name::out),
+    [will_not_call_mercury, promise_pure, thread_safe, may_not_export_body],
+"
+    Name = Exception.getClass().getName();
+").
+
+system_error_exception_name(_, _) :-
+    error("io.system_error_exception_name: inapplicable back-end").
+
+%---------------------%
+
+:- pred system_error_exception_message(io.system_error::in, string::out) is det.
+
+:- pragma foreign_proc("C#",
+    system_error_exception_message(Exception::in, Msg::out),
+    [will_not_call_mercury, promise_pure, thread_safe, may_not_export_body],
+"
+    Msg = Exception.Message;
+").
+:- pragma foreign_proc("Java",
+    system_error_exception_message(Exception::in, Msg::out),
+    [will_not_call_mercury, promise_pure, thread_safe, may_not_export_body],
+"
+    Msg = Exception.getMessage();
+    if (Msg == null) {
+        Msg = ""null"";
+    }
+").
+
+system_error_exception_message(_, _) :-
+    error("io.system_error_exception_message: inapplicable back-end").
 
 %---------------------------------------------------------------------------%
 %---------------------------------------------------------------------------%
@@ -5071,7 +5354,7 @@ compare_file_id_2(_, _, _) :-
 
 file_id(FileName, Result, !IO) :-
     file_id_2(FileName, FileId, Error, !IO),
-    is_error(Error, "cannot get file id: ", MaybeIOError, !IO),
+    is_error(Error, "cannot get file id: ", MaybeIOError),
     (
         MaybeIOError = yes(IOError),
         Result = error(IOError)
@@ -5576,8 +5859,8 @@ interpret_result_code0(ResultCode, Error, Result, !IO) :-
         Result = eof
     ;
         ResultCode = result_code_error,
-        make_err_msg(Error, "read failed: ", Msg, !IO),
-        Result = error(io_error(Msg))
+        IOError = make_io_error_from_system_error("read failed: ", Error),
+        Result = error(IOError)
     ).
 
 :- pred interpret_result_code1(result_code::in, system_error::in,
@@ -5593,8 +5876,8 @@ interpret_result_code1(ResultCode, Error, Value, Result, !IO) :-
         Result = eof
     ;
         ResultCode = result_code_error,
-        make_err_msg(Error, "read failed: ", Msg, !IO),
-        Result = error(io_error(Msg))
+        IOError = make_io_error_from_system_error("read failed: ", Error),
+        Result = error(IOError)
     ).
 
 %---------------------%
@@ -5630,8 +5913,8 @@ interpret_maybe_incomplete_result_code(ResultCode, Error, IncompleteBytes,
         Result = incomplete(IncompleteBytes)
     ;
         ResultCode = mirc_error,
-        make_err_msg(Error, "read failed: ", Msg, !IO),
-        Result = error(io_error(Msg))
+        IOError = make_io_error_from_system_error("read failed: ", Error),
+        Result = error(IOError)
     ).
 
 %---------------------%
@@ -5683,85 +5966,51 @@ interpret_maybe_incomplete_result_code(ResultCode, Error, IncompleteBytes,
     SUCCESS_INDICATOR = (Error == null);
 ").
 
-is_error(Error, Prefix, MaybeError, !IO) :-
+is_error(Error, Prefix, MaybeError) :-
     ( if is_success(Error) then
         MaybeError = no
     else
-        make_err_msg(Error, Prefix, Message, !IO),
-        IOError = io_error(Message),
+        IOError = make_io_error_from_system_error(Prefix, Error),
         MaybeError = yes(IOError)
     ).
 
-is_maybe_win32_error(Error, Prefix, MaybeError, !IO) :-
+is_maybe_win32_error(Error, Prefix, MaybeError) :-
     ( if is_success(Error) then
         MaybeError = no
     else
-        make_maybe_win32_err_msg(Error, Prefix, Message, !IO),
-        IOError = io_error(Message),
+        IOError = make_io_error_from_maybe_win32_error(Prefix, Error),
         MaybeError = yes(IOError)
     ).
 
-:- pragma foreign_proc("C",
-    make_err_msg(Error::in, Msg0::in, Msg::out, _IO0::di, _IO::uo),
-    [will_not_call_mercury, promise_pure, thread_safe,
-        does_not_affect_liveness, no_sharing, tabled_for_io],
-"
-    ML_make_err_msg(Error, Msg0, MR_ALLOC_ID, Msg);
-").
-
-:- pragma foreign_proc("C#",
-    make_err_msg(Error::in, Msg0::in, Msg::out, _IO0::di, _IO::uo),
-    [will_not_call_mercury, promise_pure, thread_safe],
-"
-    Msg = System.String.Concat(Msg0, Error.Message);
-").
-
-:- pragma foreign_proc("Java",
-    make_err_msg(Error::in, Msg0::in, Msg::out, _IO0::di, _IO::uo),
-    [will_not_call_mercury, promise_pure, thread_safe],
-"
-    if (Error.getMessage() != null) {
-        Msg = Msg0 + Error.getMessage();
-    } else {
-        Msg = Msg0;
-    }
-").
-
-make_maybe_win32_err_msg(Error, Msg0, Msg, !IO) :-
-    ( if have_win32 then
-        make_win32_err_msg(Error, Msg0, Msg, !IO)
-    else
-        make_err_msg(Error, Msg0, Msg, !IO)
+make_io_error_from_system_error(Error, Prefix) = IOError :-
+    SysErrStyle = native_system_error_style,
+    (
+        ( SysErrStyle = syserr_errno
+        ; SysErrStyle = syserr_errno_or_win32
+        ),
+        IOError = io_error_errno(Error, Prefix)
+    ;
+        SysErrStyle = syserr_exception_object,
+        IOError = io_error_exception_object(Error, Prefix)
     ).
 
-:- pred make_win32_err_msg(system_error::in, string::in, string::out,
-    io::di, io::uo) is det.
-
-make_win32_err_msg(_, _, "", !IO) :-
-    ( if semidet_succeed then
-        error("io.make_win32_err_msg called for non Win32 back-end")
-    else
-        true
+make_io_error_from_maybe_win32_error(Prefix, Error) = IOError :-
+    SysErrStyle = native_system_error_style,
+    (
+        SysErrStyle = syserr_errno,
+        IOError = io_error_errno(Prefix, Error)
+    ;
+        SysErrStyle = syserr_errno_or_win32,
+        IOError = io_error_win32(Prefix, Error)
+    ;
+        SysErrStyle = syserr_exception_object,
+        IOError = io_error_exception_object(Prefix, Error)
     ).
 
-    % Is FormatMessage thread-safe?
-    %
-:- pragma foreign_proc("C",
-    make_win32_err_msg(Error::in, Msg0::in, Msg::out, _IO0::di, _IO::uo),
-    [will_not_call_mercury, promise_pure, does_not_affect_liveness,
-        no_sharing, tabled_for_io],
-"
-#ifdef MR_WIN32
-    ML_make_win32_err_msg(Error, Msg0, MR_ALLOC_ID, Msg);
-#else
-    MR_fatal_error(""io.make_win32_err_msg called on non-Windows platform"");
-#endif
-").
-
 :- pred throw_on_error(system_error::in, string::in, io::di, io::uo) is det.
 
 throw_on_error(Error, Prefix, !IO) :-
-    is_error(Error, Prefix, MaybeIOError, !IO),
+    is_error(Error, Prefix, MaybeIOError),
     (
         MaybeIOError = yes(IOError),
         throw(IOError)
@@ -5793,11 +6042,13 @@ throw_on_close_error(Error, !IO) :-
 #include ""mercury_init.h""
 #include ""mercury_wrapper.h""
 #include ""mercury_type_info.h""
+#include ""mercury_errno_name.h""
 #include ""mercury_file.h""
 #include ""mercury_heap.h""
 #include ""mercury_misc.h""
 #include ""mercury_runtime_util.h""
 #include ""mercury_report_stats.h""
+#include ""mercury_win32_error_name.h""
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -5831,74 +6082,6 @@ void                    mercury_init_io(void);
     char                *ML_wide_to_utf8(const wchar_t *ws,
                             MR_AllocSiteInfoPtr alloc_id);
 #endif
-
-// ML_make_err_msg(errnum, msg, alloc_id, error_msg):
-// Append msg and a message for errnum to give error_msg.
-//
-// WARNING: this must only be called when the `hp' register is valid.
-// That means it must only be called from procedures declared
-// `[will_not_call_mercury, promise_pure]'.
-//
-// This is defined as a macro rather than a C function to avoid worrying
-// about the `hp' register being invalidated by the function call.
-
-#define ML_make_err_msg(errnum, msg, alloc_id, error_msg)                   \\
-    do {                                                                    \\
-        char    errbuf[MR_STRERROR_BUF_SIZE];                               \\
-        const char *errno_msg;                                              \\
-        size_t  total_len;                                                  \\
-                                                                            \\
-        errno_msg = MR_strerror(errnum, errbuf, sizeof(errbuf));            \\
-        total_len = strlen(msg) + strlen(errno_msg);                        \\
-        MR_allocate_aligned_string_msg((error_msg), total_len, (alloc_id)); \\
-        strcpy((error_msg), msg);                                           \\
-        strcat((error_msg), errno_msg);                                     \\
-    } while(0)
-
-// ML_make_win32_err_msg(error, msg, alloc_id, error_msg):
-// Append msg and the string returned by the Win32 API function
-// FormatMessage() for the last error to give error_msg.
-//
-// WARNING: this must only be called when the `hp' register is valid.
-// That means it must only be called from foreign_procs with the
-// will_not_call_mercury attribute.
-//
-// This is defined as a macro rather than a C function
-// to avoid worrying about the `hp' register being
-// invalidated by the function call.
-
-#ifdef MR_WIN32
-
-#define ML_make_win32_err_msg(error, msg, alloc_id, error_msg)              \\
-    do {                                                                    \\
-        size_t total_len;                                                   \\
-        LPVOID  err_buf;                                                    \\
-        MR_bool free_err_buf = MR_TRUE;                                     \\
-                                                                            \\
-        if (!FormatMessage(                                                 \\
-            FORMAT_MESSAGE_ALLOCATE_BUFFER                                  \\
-            | FORMAT_MESSAGE_FROM_SYSTEM                                    \\
-            | FORMAT_MESSAGE_IGNORE_INSERTS,                                \\
-            NULL,                                                           \\
-            error,                                                          \\
-            MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),                      \\
-            (LPTSTR) &err_buf,                                              \\
-            0,                                                              \\
-            NULL))                                                          \\
-        {                                                                   \\
-            free_err_buf = MR_FALSE;                                        \\
-            err_buf = (LPVOID) ""could not retrieve error message"";        \\
-        }                                                                   \\
-        total_len = strlen(msg) + strlen((char *) err_buf);                 \\
-        MR_allocate_aligned_string_msg((error_msg), total_len, (alloc_id)); \\
-        strcpy((error_msg), msg);                                           \\
-        strcat((error_msg), (char *) err_buf);                              \\
-        if (free_err_buf) {                                                 \\
-            LocalFree(err_buf);                                             \\
-        }                                                                   \\
-    } while(0)
-
-#endif // !MR_WIN32
 ").
 
 :- pragma foreign_code("C", "
diff --git a/library/io.text_read.m b/library/io.text_read.m
index 2633ea848..f7e030a42 100644
--- a/library/io.text_read.m
+++ b/library/io.text_read.m
@@ -346,7 +346,7 @@ read_binary_file_as_bitmap_2(Stream, Result, !IO) :-
             int.bits_per_int = 32,
             RemainingSizeInt64 > int64.from_int(int.max_int)
         then
-            Result = error(io_error("io.read_binary_file_as_bitmap: " ++
+            Result = error(io_error_string("io.read_binary_file_as_bitmap: " ++
                 "file size exceeds maximum buffer size"))
         else
             RemainingSize = int64.cast_to_int(RemainingSizeInt64),
@@ -362,7 +362,7 @@ read_binary_file_as_bitmap_2(Stream, Result, !IO) :-
                         ( if BytesRead = RemainingSize then
                             Result = ok(!.BM)
                         else
-                            Result = error(io_error(
+                            Result = error(io_error_string(
                                 "io.read_binary_file_as_bitmap: " ++
                                 "incorrect file size"))
                         )
diff --git a/mdbcomp/program_representation.m b/mdbcomp/program_representation.m
index 5a8bd3d25..80485d8db 100644
--- a/mdbcomp/program_representation.m
+++ b/mdbcomp/program_representation.m
@@ -1084,8 +1084,9 @@ new_procrep_id_string = "Mercury deep profiler procrep version 6\n".
 read_file_as_bytecode(FileName, Result, !IO) :-
     read_file_as_bytecode_2(FileName, ByteCode, Size, Error, !IO),
     ( if Size < 0 then
-        io.make_err_msg(Error, "opening " ++ FileName ++ ": ", Msg, !IO),
-        Result = error(io.make_io_error(Msg))
+        IOError = io.make_io_error_from_system_error(
+            "opening " ++ FileName ++ ": ", Error),
+        Result = error(IOError)
     else
         Result = ok(bytecode(ByteCode, Size))
     ).
diff --git a/runtime/Mmakefile b/runtime/Mmakefile
index b934f9b1d..7ccdc26d4 100644
--- a/runtime/Mmakefile
+++ b/runtime/Mmakefile
@@ -48,6 +48,7 @@ HDRS = \
 	mercury_dummy.h				\
 	mercury_dword.h				\
 	mercury_engine.h			\
+	mercury_errno_name.h			\
 	mercury_expanding_array.h		\
 	mercury_file.h				\
 	mercury_float.h				\
@@ -107,6 +108,7 @@ HDRS = \
 	mercury_typeclass_info.h		\
 	mercury_types.h				\
 	mercury_univ.h				\
+	mercury_win32_error_name.h		\
 	mercury_windows.h			\
 	mercury_wrapper.h			\
 	mercury_wsdeque.h
@@ -171,6 +173,7 @@ CFILES = \
 	mercury_dlist.c				\
 	mercury_dummy.c				\
 	mercury_engine.c			\
+	mercury_errno_name.c			\
 	mercury_file.c				\
 	mercury_float.c				\
 	mercury_getopt.c			\
@@ -217,6 +220,7 @@ CFILES = \
 	mercury_type_desc.c			\
 	mercury_type_info.c			\
 	mercury_type_tables.c			\
+	mercury_win32_error_name.c		\
 	mercury_wrapper.c			\
 	mercury_wsdeque.c
 
@@ -343,6 +347,12 @@ mercury_ho_call_codes.i: ../tools/make_spec_ho_call
 mercury_method_call_codes.i: ../tools/make_spec_method_call
 	../tools/make_spec_method_call > mercury_method_call_codes.i
 
+# mercury_errno_name.c: ../tools/generate_errno_name
+# 	../tools/generate_errno_name > mercury_errno_name.c
+
+# mercury_win32_error_name.c: ../tools/generate_win32_error_name
+# 	../tools/generate_win32_error_name > mercury_win32_error_name.c
+
 #-----------------------------------------------------------------------------#
 
 .PHONY: all
diff --git a/runtime/mercury_errno_name.c b/runtime/mercury_errno_name.c
new file mode 100644
index 000000000..fb5931cbe
--- /dev/null
+++ b/runtime/mercury_errno_name.c
@@ -0,0 +1,472 @@
+// vim: ts=4 sw=4 expandtab ft=c
+
+// Copyright (C) 2022 The Mercury team.
+// This file is distributed under the terms specified in COPYING.LIB.
+
+// Generated by generate_errno_name.
+
+#include <errno.h>
+#include <stdlib.h>
+
+#include "mercury_errno_name.h"
+
+const char *
+MR_errno_name(int errnum)
+{
+    switch (errnum) {
+#ifdef ENOSYS
+    case ENOSYS: return "ENOSYS";
+#endif
+#ifdef EPERM
+    case EPERM: return "EPERM";
+#endif
+#ifdef ENOENT
+    case ENOENT: return "ENOENT";
+#endif
+#ifdef ESRCH
+    case ESRCH: return "ESRCH";
+#endif
+#ifdef EINTR
+    case EINTR: return "EINTR";
+#endif
+#ifdef EIO
+    case EIO: return "EIO";
+#endif
+#ifdef ENXIO
+    case ENXIO: return "ENXIO";
+#endif
+#ifdef E2BIG
+    case E2BIG: return "E2BIG";
+#endif
+#ifdef ENOEXEC
+    case ENOEXEC: return "ENOEXEC";
+#endif
+#ifdef EBADF
+    case EBADF: return "EBADF";
+#endif
+#ifdef ECHILD
+    case ECHILD: return "ECHILD";
+#endif
+#ifdef EAGAIN
+    case EAGAIN: return "EAGAIN";
+#endif
+#ifdef ENOMEM
+    case ENOMEM: return "ENOMEM";
+#endif
+#ifdef EACCES
+    case EACCES: return "EACCES";
+#endif
+#ifdef EFAULT
+    case EFAULT: return "EFAULT";
+#endif
+#ifdef ENOTBLK
+    case ENOTBLK: return "ENOTBLK";
+#endif
+#ifdef EBUSY
+    case EBUSY: return "EBUSY";
+#endif
+#ifdef EEXIST
+    case EEXIST: return "EEXIST";
+#endif
+#ifdef EXDEV
+    case EXDEV: return "EXDEV";
+#endif
+#ifdef ENODEV
+    case ENODEV: return "ENODEV";
+#endif
+#ifdef ENOTDIR
+    case ENOTDIR: return "ENOTDIR";
+#endif
+#ifdef EISDIR
+    case EISDIR: return "EISDIR";
+#endif
+#ifdef EINVAL
+    case EINVAL: return "EINVAL";
+#endif
+#ifdef ENFILE
+    case ENFILE: return "ENFILE";
+#endif
+#ifdef EMFILE
+    case EMFILE: return "EMFILE";
+#endif
+#ifdef ENOTTY
+    case ENOTTY: return "ENOTTY";
+#endif
+#ifdef ETXTBSY
+    case ETXTBSY: return "ETXTBSY";
+#endif
+#ifdef EFBIG
+    case EFBIG: return "EFBIG";
+#endif
+#ifdef ENOSPC
+    case ENOSPC: return "ENOSPC";
+#endif
+#ifdef EDQUOT
+    case EDQUOT: return "EDQUOT";
+#endif
+#ifdef ESPIPE
+    case ESPIPE: return "ESPIPE";
+#endif
+#ifdef EROFS
+    case EROFS: return "EROFS";
+#endif
+#ifdef EMLINK
+    case EMLINK: return "EMLINK";
+#endif
+#ifdef EPIPE
+    case EPIPE: return "EPIPE";
+#endif
+#ifdef EDOM
+    case EDOM: return "EDOM";
+#endif
+#ifdef ERANGE
+    case ERANGE: return "ERANGE";
+#endif
+#ifdef EDEADLK
+    case EDEADLK: return "EDEADLK";
+#endif
+#ifdef ENAMETOOLONG
+    case ENAMETOOLONG: return "ENAMETOOLONG";
+#endif
+#ifdef ENOLCK
+    case ENOLCK: return "ENOLCK";
+#endif
+#ifdef ENOTEMPTY
+    case ENOTEMPTY: return "ENOTEMPTY";
+#endif
+#ifdef ELOOP
+    case ELOOP: return "ELOOP";
+#endif
+#ifdef ENOMSG
+    case ENOMSG: return "ENOMSG";
+#endif
+#ifdef EIDRM
+    case EIDRM: return "EIDRM";
+#endif
+#ifdef ETIME
+    case ETIME: return "ETIME";
+#endif
+#ifdef EPROTO
+    case EPROTO: return "EPROTO";
+#endif
+#ifdef EOVERFLOW
+    case EOVERFLOW: return "EOVERFLOW";
+#endif
+#ifdef EILSEQ
+    case EILSEQ: return "EILSEQ";
+#endif
+#ifdef EUSERS
+    case EUSERS: return "EUSERS";
+#endif
+#ifdef ENOTSOCK
+    case ENOTSOCK: return "ENOTSOCK";
+#endif
+#ifdef EDESTADDRREQ
+    case EDESTADDRREQ: return "EDESTADDRREQ";
+#endif
+#ifdef EMSGSIZE
+    case EMSGSIZE: return "EMSGSIZE";
+#endif
+#ifdef EPROTOTYPE
+    case EPROTOTYPE: return "EPROTOTYPE";
+#endif
+#ifdef ENOPROTOOPT
+    case ENOPROTOOPT: return "ENOPROTOOPT";
+#endif
+#ifdef EPROTONOSUPPORT
+    case EPROTONOSUPPORT: return "EPROTONOSUPPORT";
+#endif
+#ifdef ESOCKTNOSUPPORT
+    case ESOCKTNOSUPPORT: return "ESOCKTNOSUPPORT";
+#endif
+#ifdef EOPNOTSUPP
+    case EOPNOTSUPP: return "EOPNOTSUPP";
+#endif
+#ifdef EPFNOSUPPORT
+    case EPFNOSUPPORT: return "EPFNOSUPPORT";
+#endif
+#ifdef EAFNOSUPPORT
+    case EAFNOSUPPORT: return "EAFNOSUPPORT";
+#endif
+#ifdef EADDRINUSE
+    case EADDRINUSE: return "EADDRINUSE";
+#endif
+#ifdef EADDRNOTAVAIL
+    case EADDRNOTAVAIL: return "EADDRNOTAVAIL";
+#endif
+#ifdef ENETDOWN
+    case ENETDOWN: return "ENETDOWN";
+#endif
+#ifdef ENETUNREACH
+    case ENETUNREACH: return "ENETUNREACH";
+#endif
+#ifdef ENETRESET
+    case ENETRESET: return "ENETRESET";
+#endif
+#ifdef ECONNABORTED
+    case ECONNABORTED: return "ECONNABORTED";
+#endif
+#ifdef ECONNRESET
+    case ECONNRESET: return "ECONNRESET";
+#endif
+#ifdef ENOBUFS
+    case ENOBUFS: return "ENOBUFS";
+#endif
+#ifdef EISCONN
+    case EISCONN: return "EISCONN";
+#endif
+#ifdef ENOTCONN
+    case ENOTCONN: return "ENOTCONN";
+#endif
+#ifdef ESHUTDOWN
+    case ESHUTDOWN: return "ESHUTDOWN";
+#endif
+#ifdef ETOOMANYREFS
+    case ETOOMANYREFS: return "ETOOMANYREFS";
+#endif
+#ifdef ETIMEDOUT
+    case ETIMEDOUT: return "ETIMEDOUT";
+#endif
+#ifdef ECONNREFUSED
+    case ECONNREFUSED: return "ECONNREFUSED";
+#endif
+#ifdef EHOSTDOWN
+    case EHOSTDOWN: return "EHOSTDOWN";
+#endif
+#ifdef EHOSTUNREACH
+    case EHOSTUNREACH: return "EHOSTUNREACH";
+#endif
+#ifdef EALREADY
+    case EALREADY: return "EALREADY";
+#endif
+#ifdef EINPROGRESS
+    case EINPROGRESS: return "EINPROGRESS";
+#endif
+#ifdef ESTALE
+    case ESTALE: return "ESTALE";
+#endif
+#ifdef EREMOTE
+    case EREMOTE: return "EREMOTE";
+#endif
+#ifdef EBADRPC
+    case EBADRPC: return "EBADRPC";
+#endif
+#ifdef ERPCMISMATCH
+    case ERPCMISMATCH: return "ERPCMISMATCH";
+#endif
+#ifdef EPROGUNAVAIL
+    case EPROGUNAVAIL: return "EPROGUNAVAIL";
+#endif
+#ifdef EPROGMISMATCH
+    case EPROGMISMATCH: return "EPROGMISMATCH";
+#endif
+#ifdef EPROCUNAVAIL
+    case EPROCUNAVAIL: return "EPROCUNAVAIL";
+#endif
+#ifdef EFTYPE
+    case EFTYPE: return "EFTYPE";
+#endif
+#ifdef EAUTH
+    case EAUTH: return "EAUTH";
+#endif
+#ifdef ENEEDAUTH
+    case ENEEDAUTH: return "ENEEDAUTH";
+#endif
+#ifdef EPROCLIM
+    case EPROCLIM: return "EPROCLIM";
+#endif
+#ifdef ENOATTR
+    case ENOATTR: return "ENOATTR";
+#endif
+#ifdef EPWROFF
+    case EPWROFF: return "EPWROFF";
+#endif
+#ifdef EDEVERR
+    case EDEVERR: return "EDEVERR";
+#endif
+#ifdef EBADEXEC
+    case EBADEXEC: return "EBADEXEC";
+#endif
+#ifdef EBADARCH
+    case EBADARCH: return "EBADARCH";
+#endif
+#ifdef ESHLIBVERS
+    case ESHLIBVERS: return "ESHLIBVERS";
+#endif
+#ifdef EBADMACHO
+    case EBADMACHO: return "EBADMACHO";
+#endif
+#ifdef ENOPOLICY
+    case ENOPOLICY: return "ENOPOLICY";
+#endif
+#ifdef EBADMSG
+    case EBADMSG: return "EBADMSG";
+#endif
+#ifdef ECANCELED
+    case ECANCELED: return "ECANCELED";
+#endif
+#ifdef EOWNERDEAD
+    case EOWNERDEAD: return "EOWNERDEAD";
+#endif
+#ifdef ENOTRECOVERABLE
+    case ENOTRECOVERABLE: return "ENOTRECOVERABLE";
+#endif
+#ifdef ENONET
+    case ENONET: return "ENONET";
+#endif
+#ifdef ERESTART
+    case ERESTART: return "ERESTART";
+#endif
+#ifdef ENODATA
+    case ENODATA: return "ENODATA";
+#endif
+#ifdef ENOSR
+    case ENOSR: return "ENOSR";
+#endif
+#ifdef ENOSTR
+    case ENOSTR: return "ENOSTR";
+#endif
+#ifdef EMULTIHOP
+    case EMULTIHOP: return "EMULTIHOP";
+#endif
+#ifdef ENOLINK
+    case ENOLINK: return "ENOLINK";
+#endif
+#ifdef ENOMEDIUM
+    case ENOMEDIUM: return "ENOMEDIUM";
+#endif
+#ifdef EMEDIUMTYPE
+    case EMEDIUMTYPE: return "EMEDIUMTYPE";
+#endif
+#ifdef EBADFD
+    case EBADFD: return "EBADFD";
+#endif
+#ifdef ECHRNG
+    case ECHRNG: return "ECHRNG";
+#endif
+#ifdef EL2NSYNC
+    case EL2NSYNC: return "EL2NSYNC";
+#endif
+#ifdef EL3HLT
+    case EL3HLT: return "EL3HLT";
+#endif
+#ifdef EL3RST
+    case EL3RST: return "EL3RST";
+#endif
+#ifdef ELNRNG
+    case ELNRNG: return "ELNRNG";
+#endif
+#ifdef EUNATCH
+    case EUNATCH: return "EUNATCH";
+#endif
+#ifdef ENOCSI
+    case ENOCSI: return "ENOCSI";
+#endif
+#ifdef EL2HLT
+    case EL2HLT: return "EL2HLT";
+#endif
+#ifdef EBADE
+    case EBADE: return "EBADE";
+#endif
+#ifdef EBADR
+    case EBADR: return "EBADR";
+#endif
+#ifdef EXFULL
+    case EXFULL: return "EXFULL";
+#endif
+#ifdef ENOANO
+    case ENOANO: return "ENOANO";
+#endif
+#ifdef EBADRQC
+    case EBADRQC: return "EBADRQC";
+#endif
+#ifdef EBADSLT
+    case EBADSLT: return "EBADSLT";
+#endif
+#ifdef ENOPKG
+    case ENOPKG: return "ENOPKG";
+#endif
+#ifdef EADV
+    case EADV: return "EADV";
+#endif
+#ifdef ESRMNT
+    case ESRMNT: return "ESRMNT";
+#endif
+#ifdef ECOMM
+    case ECOMM: return "ECOMM";
+#endif
+#ifdef EDOTDOT
+    case EDOTDOT: return "EDOTDOT";
+#endif
+#ifdef ENOTUNIQ
+    case ENOTUNIQ: return "ENOTUNIQ";
+#endif
+#ifdef EREMCHG
+    case EREMCHG: return "EREMCHG";
+#endif
+#ifdef ELIBACC
+    case ELIBACC: return "ELIBACC";
+#endif
+#ifdef ELIBBAD
+    case ELIBBAD: return "ELIBBAD";
+#endif
+#ifdef ELIBSCN
+    case ELIBSCN: return "ELIBSCN";
+#endif
+#ifdef ELIBMAX
+    case ELIBMAX: return "ELIBMAX";
+#endif
+#ifdef ELIBEXEC
+    case ELIBEXEC: return "ELIBEXEC";
+#endif
+#ifdef ESTRPIPE
+    case ESTRPIPE: return "ESTRPIPE";
+#endif
+#ifdef EUCLEAN
+    case EUCLEAN: return "EUCLEAN";
+#endif
+#ifdef ENOTNAM
+    case ENOTNAM: return "ENOTNAM";
+#endif
+#ifdef ENAVAIL
+    case ENAVAIL: return "ENAVAIL";
+#endif
+#ifdef EISNAM
+    case EISNAM: return "EISNAM";
+#endif
+#ifdef EREMOTEIO
+    case EREMOTEIO: return "EREMOTEIO";
+#endif
+#ifdef ENOKEY
+    case ENOKEY: return "ENOKEY";
+#endif
+#ifdef EKEYEXPIRED
+    case EKEYEXPIRED: return "EKEYEXPIRED";
+#endif
+#ifdef EKEYREVOKED
+    case EKEYREVOKED: return "EKEYREVOKED";
+#endif
+#ifdef EKEYREJECTED
+    case EKEYREJECTED: return "EKEYREJECTED";
+#endif
+#ifdef ERFKILL
+    case ERFKILL: return "ERFKILL";
+#endif
+#ifdef EHWPOISON
+    case EHWPOISON: return "EHWPOISON";
+#endif
+#ifdef EBFONT
+    case EBFONT: return "EBFONT";
+#endif
+#if defined(EWOULDBLOCK) && !defined(EAGAIN)
+    case EWOULDBLOCK: return "EWOULDBLOCK";
+#endif
+#if defined(EDEADLOCK) && !defined(EDEADLK)
+    case EDEADLOCK: return "EDEADLOCK";
+#endif
+#if defined(ENOTSUP) && !defined(EOPNOTSUPP)
+    case ENOTSUP: return "ENOTSUP";
+#endif
+    default: return NULL;
+    }
+}
diff --git a/runtime/mercury_errno_name.h b/runtime/mercury_errno_name.h
new file mode 100644
index 000000000..30225e48b
--- /dev/null
+++ b/runtime/mercury_errno_name.h
@@ -0,0 +1,11 @@
+// vim: ts=4 sw=4 expandtab ft=c
+
+// Copyright (C) 2022 The Mercury team.
+// This file is distributed under the terms specified in COPYING.LIB.
+
+#ifndef MERCURY_ERRNO_NAME_H
+#define MERCURY_ERRNO_NAME_H
+
+extern const char   *MR_errno_name(int errnum);
+
+#endif  // MERCURY_ERRNO_NAME_H
diff --git a/runtime/mercury_win32_error_name.c b/runtime/mercury_win32_error_name.c
new file mode 100644
index 000000000..72755462a
--- /dev/null
+++ b/runtime/mercury_win32_error_name.c
@@ -0,0 +1,1784 @@
+// vim: ts=4 sw=4 expandtab ft=c
+
+// Copyright (C) 2022 The Mercury team.
+// This file is distributed under the terms specified in COPYING.LIB.
+
+// Generated by generate_win32_error_name
+
+#include <stdlib.h>
+
+#include "mercury_win32_error_name.h"
+
+#ifdef MR_WIN32
+
+const char *
+MR_win32_error_name(DWORD errcode)
+{
+    switch (errcode) {
+    case ERROR_SUCCESS: return "ERROR_SUCCESS";
+    case ERROR_INVALID_FUNCTION: return "ERROR_INVALID_FUNCTION";
+    case ERROR_FILE_NOT_FOUND: return "ERROR_FILE_NOT_FOUND";
+    case ERROR_PATH_NOT_FOUND: return "ERROR_PATH_NOT_FOUND";
+    case ERROR_TOO_MANY_OPEN_FILES: return "ERROR_TOO_MANY_OPEN_FILES";
+    case ERROR_ACCESS_DENIED: return "ERROR_ACCESS_DENIED";
+    case ERROR_INVALID_HANDLE: return "ERROR_INVALID_HANDLE";
+    case ERROR_ARENA_TRASHED: return "ERROR_ARENA_TRASHED";
+    case ERROR_NOT_ENOUGH_MEMORY: return "ERROR_NOT_ENOUGH_MEMORY";
+    case ERROR_INVALID_BLOCK: return "ERROR_INVALID_BLOCK";
+    case ERROR_BAD_ENVIRONMENT: return "ERROR_BAD_ENVIRONMENT";
+    case ERROR_BAD_FORMAT: return "ERROR_BAD_FORMAT";
+    case ERROR_INVALID_ACCESS: return "ERROR_INVALID_ACCESS";
+    case ERROR_INVALID_DATA: return "ERROR_INVALID_DATA";
+    case ERROR_OUTOFMEMORY: return "ERROR_OUTOFMEMORY";
+    case ERROR_INVALID_DRIVE: return "ERROR_INVALID_DRIVE";
+    case ERROR_CURRENT_DIRECTORY: return "ERROR_CURRENT_DIRECTORY";
+    case ERROR_NOT_SAME_DEVICE: return "ERROR_NOT_SAME_DEVICE";
+    case ERROR_NO_MORE_FILES: return "ERROR_NO_MORE_FILES";
+    case ERROR_WRITE_PROTECT: return "ERROR_WRITE_PROTECT";
+    case ERROR_BAD_UNIT: return "ERROR_BAD_UNIT";
+    case ERROR_NOT_READY: return "ERROR_NOT_READY";
+    case ERROR_BAD_COMMAND: return "ERROR_BAD_COMMAND";
+    case ERROR_CRC: return "ERROR_CRC";
+    case ERROR_BAD_LENGTH: return "ERROR_BAD_LENGTH";
+    case ERROR_SEEK: return "ERROR_SEEK";
+    case ERROR_NOT_DOS_DISK: return "ERROR_NOT_DOS_DISK";
+    case ERROR_SECTOR_NOT_FOUND: return "ERROR_SECTOR_NOT_FOUND";
+    case ERROR_OUT_OF_PAPER: return "ERROR_OUT_OF_PAPER";
+    case ERROR_WRITE_FAULT: return "ERROR_WRITE_FAULT";
+    case ERROR_READ_FAULT: return "ERROR_READ_FAULT";
+    case ERROR_GEN_FAILURE: return "ERROR_GEN_FAILURE";
+    case ERROR_SHARING_VIOLATION: return "ERROR_SHARING_VIOLATION";
+    case ERROR_LOCK_VIOLATION: return "ERROR_LOCK_VIOLATION";
+    case ERROR_WRONG_DISK: return "ERROR_WRONG_DISK";
+    case ERROR_SHARING_BUFFER_EXCEEDED: return "ERROR_SHARING_BUFFER_EXCEEDED";
+    case ERROR_HANDLE_EOF: return "ERROR_HANDLE_EOF";
+    case ERROR_HANDLE_DISK_FULL: return "ERROR_HANDLE_DISK_FULL";
+    case ERROR_NOT_SUPPORTED: return "ERROR_NOT_SUPPORTED";
+    case ERROR_REM_NOT_LIST: return "ERROR_REM_NOT_LIST";
+    case ERROR_DUP_NAME: return "ERROR_DUP_NAME";
+    case ERROR_BAD_NETPATH: return "ERROR_BAD_NETPATH";
+    case ERROR_NETWORK_BUSY: return "ERROR_NETWORK_BUSY";
+    case ERROR_DEV_NOT_EXIST: return "ERROR_DEV_NOT_EXIST";
+    case ERROR_TOO_MANY_CMDS: return "ERROR_TOO_MANY_CMDS";
+    case ERROR_ADAP_HDW_ERR: return "ERROR_ADAP_HDW_ERR";
+    case ERROR_BAD_NET_RESP: return "ERROR_BAD_NET_RESP";
+    case ERROR_UNEXP_NET_ERR: return "ERROR_UNEXP_NET_ERR";
+    case ERROR_BAD_REM_ADAP: return "ERROR_BAD_REM_ADAP";
+    case ERROR_PRINTQ_FULL: return "ERROR_PRINTQ_FULL";
+    case ERROR_NO_SPOOL_SPACE: return "ERROR_NO_SPOOL_SPACE";
+    case ERROR_PRINT_CANCELLED: return "ERROR_PRINT_CANCELLED";
+    case ERROR_NETNAME_DELETED: return "ERROR_NETNAME_DELETED";
+    case ERROR_NETWORK_ACCESS_DENIED: return "ERROR_NETWORK_ACCESS_DENIED";
+    case ERROR_BAD_DEV_TYPE: return "ERROR_BAD_DEV_TYPE";
+    case ERROR_BAD_NET_NAME: return "ERROR_BAD_NET_NAME";
+    case ERROR_TOO_MANY_NAMES: return "ERROR_TOO_MANY_NAMES";
+    case ERROR_TOO_MANY_SESS: return "ERROR_TOO_MANY_SESS";
+    case ERROR_SHARING_PAUSED: return "ERROR_SHARING_PAUSED";
+    case ERROR_REQ_NOT_ACCEP: return "ERROR_REQ_NOT_ACCEP";
+    case ERROR_REDIR_PAUSED: return "ERROR_REDIR_PAUSED";
+    case ERROR_FILE_EXISTS: return "ERROR_FILE_EXISTS";
+    case ERROR_CANNOT_MAKE: return "ERROR_CANNOT_MAKE";
+    case ERROR_FAIL_I24: return "ERROR_FAIL_I24";
+    case ERROR_OUT_OF_STRUCTURES: return "ERROR_OUT_OF_STRUCTURES";
+    case ERROR_ALREADY_ASSIGNED: return "ERROR_ALREADY_ASSIGNED";
+    case ERROR_INVALID_PASSWORD: return "ERROR_INVALID_PASSWORD";
+    case ERROR_INVALID_PARAMETER: return "ERROR_INVALID_PARAMETER";
+    case ERROR_NET_WRITE_FAULT: return "ERROR_NET_WRITE_FAULT";
+    case ERROR_NO_PROC_SLOTS: return "ERROR_NO_PROC_SLOTS";
+    case ERROR_TOO_MANY_SEMAPHORES: return "ERROR_TOO_MANY_SEMAPHORES";
+    case ERROR_EXCL_SEM_ALREADY_OWNED: return "ERROR_EXCL_SEM_ALREADY_OWNED";
+    case ERROR_SEM_IS_SET: return "ERROR_SEM_IS_SET";
+    case ERROR_TOO_MANY_SEM_REQUESTS: return "ERROR_TOO_MANY_SEM_REQUESTS";
+    case ERROR_INVALID_AT_INTERRUPT_TIME: return "ERROR_INVALID_AT_INTERRUPT_TIME";
+    case ERROR_SEM_OWNER_DIED: return "ERROR_SEM_OWNER_DIED";
+    case ERROR_SEM_USER_LIMIT: return "ERROR_SEM_USER_LIMIT";
+    case ERROR_DISK_CHANGE: return "ERROR_DISK_CHANGE";
+    case ERROR_DRIVE_LOCKED: return "ERROR_DRIVE_LOCKED";
+    case ERROR_BROKEN_PIPE: return "ERROR_BROKEN_PIPE";
+    case ERROR_OPEN_FAILED: return "ERROR_OPEN_FAILED";
+    case ERROR_BUFFER_OVERFLOW: return "ERROR_BUFFER_OVERFLOW";
+    case ERROR_DISK_FULL: return "ERROR_DISK_FULL";
+    case ERROR_NO_MORE_SEARCH_HANDLES: return "ERROR_NO_MORE_SEARCH_HANDLES";
+    case ERROR_INVALID_TARGET_HANDLE: return "ERROR_INVALID_TARGET_HANDLE";
+    case ERROR_INVALID_CATEGORY: return "ERROR_INVALID_CATEGORY";
+    case ERROR_INVALID_VERIFY_SWITCH: return "ERROR_INVALID_VERIFY_SWITCH";
+    case ERROR_BAD_DRIVER_LEVEL: return "ERROR_BAD_DRIVER_LEVEL";
+    case ERROR_CALL_NOT_IMPLEMENTED: return "ERROR_CALL_NOT_IMPLEMENTED";
+    case ERROR_SEM_TIMEOUT: return "ERROR_SEM_TIMEOUT";
+    case ERROR_INSUFFICIENT_BUFFER: return "ERROR_INSUFFICIENT_BUFFER";
+    case ERROR_INVALID_NAME: return "ERROR_INVALID_NAME";
+    case ERROR_INVALID_LEVEL: return "ERROR_INVALID_LEVEL";
+    case ERROR_NO_VOLUME_LABEL: return "ERROR_NO_VOLUME_LABEL";
+    case ERROR_MOD_NOT_FOUND: return "ERROR_MOD_NOT_FOUND";
+    case ERROR_PROC_NOT_FOUND: return "ERROR_PROC_NOT_FOUND";
+    case ERROR_WAIT_NO_CHILDREN: return "ERROR_WAIT_NO_CHILDREN";
+    case ERROR_CHILD_NOT_COMPLETE: return "ERROR_CHILD_NOT_COMPLETE";
+    case ERROR_DIRECT_ACCESS_HANDLE: return "ERROR_DIRECT_ACCESS_HANDLE";
+    case ERROR_NEGATIVE_SEEK: return "ERROR_NEGATIVE_SEEK";
+    case ERROR_SEEK_ON_DEVICE: return "ERROR_SEEK_ON_DEVICE";
+    case ERROR_IS_JOIN_TARGET: return "ERROR_IS_JOIN_TARGET";
+    case ERROR_IS_JOINED: return "ERROR_IS_JOINED";
+    case ERROR_IS_SUBSTED: return "ERROR_IS_SUBSTED";
+    case ERROR_NOT_JOINED: return "ERROR_NOT_JOINED";
+    case ERROR_NOT_SUBSTED: return "ERROR_NOT_SUBSTED";
+    case ERROR_JOIN_TO_JOIN: return "ERROR_JOIN_TO_JOIN";
+    case ERROR_SUBST_TO_SUBST: return "ERROR_SUBST_TO_SUBST";
+    case ERROR_JOIN_TO_SUBST: return "ERROR_JOIN_TO_SUBST";
+    case ERROR_SUBST_TO_JOIN: return "ERROR_SUBST_TO_JOIN";
+    case ERROR_BUSY_DRIVE: return "ERROR_BUSY_DRIVE";
+    case ERROR_SAME_DRIVE: return "ERROR_SAME_DRIVE";
+    case ERROR_DIR_NOT_ROOT: return "ERROR_DIR_NOT_ROOT";
+    case ERROR_DIR_NOT_EMPTY: return "ERROR_DIR_NOT_EMPTY";
+    case ERROR_IS_SUBST_PATH: return "ERROR_IS_SUBST_PATH";
+    case ERROR_IS_JOIN_PATH: return "ERROR_IS_JOIN_PATH";
+    case ERROR_PATH_BUSY: return "ERROR_PATH_BUSY";
+    case ERROR_IS_SUBST_TARGET: return "ERROR_IS_SUBST_TARGET";
+    case ERROR_SYSTEM_TRACE: return "ERROR_SYSTEM_TRACE";
+    case ERROR_INVALID_EVENT_COUNT: return "ERROR_INVALID_EVENT_COUNT";
+    case ERROR_TOO_MANY_MUXWAITERS: return "ERROR_TOO_MANY_MUXWAITERS";
+    case ERROR_INVALID_LIST_FORMAT: return "ERROR_INVALID_LIST_FORMAT";
+    case ERROR_LABEL_TOO_LONG: return "ERROR_LABEL_TOO_LONG";
+    case ERROR_TOO_MANY_TCBS: return "ERROR_TOO_MANY_TCBS";
+    case ERROR_SIGNAL_REFUSED: return "ERROR_SIGNAL_REFUSED";
+    case ERROR_DISCARDED: return "ERROR_DISCARDED";
+    case ERROR_NOT_LOCKED: return "ERROR_NOT_LOCKED";
+    case ERROR_BAD_THREADID_ADDR: return "ERROR_BAD_THREADID_ADDR";
+    case ERROR_BAD_ARGUMENTS: return "ERROR_BAD_ARGUMENTS";
+    case ERROR_BAD_PATHNAME: return "ERROR_BAD_PATHNAME";
+    case ERROR_SIGNAL_PENDING: return "ERROR_SIGNAL_PENDING";
+    case ERROR_MAX_THRDS_REACHED: return "ERROR_MAX_THRDS_REACHED";
+    case ERROR_LOCK_FAILED: return "ERROR_LOCK_FAILED";
+    case ERROR_BUSY: return "ERROR_BUSY";
+    case ERROR_CANCEL_VIOLATION: return "ERROR_CANCEL_VIOLATION";
+    case ERROR_ATOMIC_LOCKS_NOT_SUPPORTED: return "ERROR_ATOMIC_LOCKS_NOT_SUPPORTED";
+    case ERROR_INVALID_SEGMENT_NUMBER: return "ERROR_INVALID_SEGMENT_NUMBER";
+    case ERROR_INVALID_ORDINAL: return "ERROR_INVALID_ORDINAL";
+    case ERROR_ALREADY_EXISTS: return "ERROR_ALREADY_EXISTS";
+    case ERROR_INVALID_FLAG_NUMBER: return "ERROR_INVALID_FLAG_NUMBER";
+    case ERROR_SEM_NOT_FOUND: return "ERROR_SEM_NOT_FOUND";
+    case ERROR_INVALID_STARTING_CODESEG: return "ERROR_INVALID_STARTING_CODESEG";
+    case ERROR_INVALID_STACKSEG: return "ERROR_INVALID_STACKSEG";
+    case ERROR_INVALID_MODULETYPE: return "ERROR_INVALID_MODULETYPE";
+    case ERROR_INVALID_EXE_SIGNATURE: return "ERROR_INVALID_EXE_SIGNATURE";
+    case ERROR_EXE_MARKED_INVALID: return "ERROR_EXE_MARKED_INVALID";
+    case ERROR_BAD_EXE_FORMAT: return "ERROR_BAD_EXE_FORMAT";
+    case ERROR_ITERATED_DATA_EXCEEDS_64k: return "ERROR_ITERATED_DATA_EXCEEDS_64k";
+    case ERROR_INVALID_MINALLOCSIZE: return "ERROR_INVALID_MINALLOCSIZE";
+    case ERROR_DYNLINK_FROM_INVALID_RING: return "ERROR_DYNLINK_FROM_INVALID_RING";
+    case ERROR_IOPL_NOT_ENABLED: return "ERROR_IOPL_NOT_ENABLED";
+    case ERROR_INVALID_SEGDPL: return "ERROR_INVALID_SEGDPL";
+    case ERROR_AUTODATASEG_EXCEEDS_64k: return "ERROR_AUTODATASEG_EXCEEDS_64k";
+    case ERROR_RING2SEG_MUST_BE_MOVABLE: return "ERROR_RING2SEG_MUST_BE_MOVABLE";
+    case ERROR_RELOC_CHAIN_XEEDS_SEGLIM: return "ERROR_RELOC_CHAIN_XEEDS_SEGLIM";
+    case ERROR_INFLOOP_IN_RELOC_CHAIN: return "ERROR_INFLOOP_IN_RELOC_CHAIN";
+    case ERROR_ENVVAR_NOT_FOUND: return "ERROR_ENVVAR_NOT_FOUND";
+    case ERROR_NO_SIGNAL_SENT: return "ERROR_NO_SIGNAL_SENT";
+    case ERROR_FILENAME_EXCED_RANGE: return "ERROR_FILENAME_EXCED_RANGE";
+    case ERROR_RING2_STACK_IN_USE: return "ERROR_RING2_STACK_IN_USE";
+    case ERROR_META_EXPANSION_TOO_LONG: return "ERROR_META_EXPANSION_TOO_LONG";
+    case ERROR_INVALID_SIGNAL_NUMBER: return "ERROR_INVALID_SIGNAL_NUMBER";
+    case ERROR_THREAD_1_INACTIVE: return "ERROR_THREAD_1_INACTIVE";
+    case ERROR_LOCKED: return "ERROR_LOCKED";
+    case ERROR_TOO_MANY_MODULES: return "ERROR_TOO_MANY_MODULES";
+    case ERROR_NESTING_NOT_ALLOWED: return "ERROR_NESTING_NOT_ALLOWED";
+    case ERROR_EXE_MACHINE_TYPE_MISMATCH: return "ERROR_EXE_MACHINE_TYPE_MISMATCH";
+    case ERROR_EXE_CANNOT_MODIFY_SIGNED_BINARY: return "ERROR_EXE_CANNOT_MODIFY_SIGNED_BINARY";
+    case ERROR_EXE_CANNOT_MODIFY_STRONG_SIGNED_BINARY: return "ERROR_EXE_CANNOT_MODIFY_STRONG_SIGNED_BINARY";
+    case ERROR_FILE_CHECKED_OUT: return "ERROR_FILE_CHECKED_OUT";
+    case ERROR_CHECKOUT_REQUIRED: return "ERROR_CHECKOUT_REQUIRED";
+    case ERROR_BAD_FILE_TYPE: return "ERROR_BAD_FILE_TYPE";
+    case ERROR_FILE_TOO_LARGE: return "ERROR_FILE_TOO_LARGE";
+    case ERROR_FORMS_AUTH_REQUIRED: return "ERROR_FORMS_AUTH_REQUIRED";
+    case ERROR_PIPE_LOCAL: return "ERROR_PIPE_LOCAL";
+    case ERROR_BAD_PIPE: return "ERROR_BAD_PIPE";
+    case ERROR_PIPE_BUSY: return "ERROR_PIPE_BUSY";
+    case ERROR_NO_DATA: return "ERROR_NO_DATA";
+    case ERROR_PIPE_NOT_CONNECTED: return "ERROR_PIPE_NOT_CONNECTED";
+    case ERROR_MORE_DATA: return "ERROR_MORE_DATA";
+    case ERROR_VC_DISCONNECTED: return "ERROR_VC_DISCONNECTED";
+    case ERROR_INVALID_EA_NAME: return "ERROR_INVALID_EA_NAME";
+    case ERROR_EA_LIST_INCONSISTENT: return "ERROR_EA_LIST_INCONSISTENT";
+    case ERROR_NO_MORE_ITEMS: return "ERROR_NO_MORE_ITEMS";
+    case ERROR_CANNOT_COPY: return "ERROR_CANNOT_COPY";
+    case ERROR_DIRECTORY: return "ERROR_DIRECTORY";
+    case ERROR_EAS_DIDNT_FIT: return "ERROR_EAS_DIDNT_FIT";
+    case ERROR_EA_FILE_CORRUPT: return "ERROR_EA_FILE_CORRUPT";
+    case ERROR_EA_TABLE_FULL: return "ERROR_EA_TABLE_FULL";
+    case ERROR_INVALID_EA_HANDLE: return "ERROR_INVALID_EA_HANDLE";
+    case ERROR_EAS_NOT_SUPPORTED: return "ERROR_EAS_NOT_SUPPORTED";
+    case ERROR_NOT_OWNER: return "ERROR_NOT_OWNER";
+    case ERROR_TOO_MANY_POSTS: return "ERROR_TOO_MANY_POSTS";
+    case ERROR_PARTIAL_COPY: return "ERROR_PARTIAL_COPY";
+    case ERROR_OPLOCK_NOT_GRANTED: return "ERROR_OPLOCK_NOT_GRANTED";
+    case ERROR_INVALID_OPLOCK_PROTOCOL: return "ERROR_INVALID_OPLOCK_PROTOCOL";
+    case ERROR_DISK_TOO_FRAGMENTED: return "ERROR_DISK_TOO_FRAGMENTED";
+    case ERROR_DELETE_PENDING: return "ERROR_DELETE_PENDING";
+    case ERROR_INVALID_TOKEN: return "ERROR_INVALID_TOKEN";
+    case ERROR_MR_MID_NOT_FOUND: return "ERROR_MR_MID_NOT_FOUND";
+    case ERROR_SCOPE_NOT_FOUND: return "ERROR_SCOPE_NOT_FOUND";
+    case ERROR_OBJECT_NOT_EXTERNALLY_BACKED: return "ERROR_OBJECT_NOT_EXTERNALLY_BACKED";
+    case ERROR_EXTERNAL_BACKING_PROVIDER_UNKNOWN: return "ERROR_EXTERNAL_BACKING_PROVIDER_UNKNOWN";
+    case ERROR_COMPRESSION_NOT_BENEFICIAL: return "ERROR_COMPRESSION_NOT_BENEFICIAL";
+    case ERROR_INVALID_ADDRESS: return "ERROR_INVALID_ADDRESS";
+    case ERROR_ARITHMETIC_OVERFLOW: return "ERROR_ARITHMETIC_OVERFLOW";
+    case ERROR_PIPE_CONNECTED: return "ERROR_PIPE_CONNECTED";
+    case ERROR_PIPE_LISTENING: return "ERROR_PIPE_LISTENING";
+    case ERROR_WAKE_SYSTEM: return "ERROR_WAKE_SYSTEM";
+    case ERROR_WAIT_1: return "ERROR_WAIT_1";
+    case ERROR_WAIT_2: return "ERROR_WAIT_2";
+    case ERROR_WAIT_3: return "ERROR_WAIT_3";
+    case ERROR_WAIT_63: return "ERROR_WAIT_63";
+    case ERROR_ABANDONED_WAIT_0: return "ERROR_ABANDONED_WAIT_0";
+    case ERROR_ABANDONED_WAIT_63: return "ERROR_ABANDONED_WAIT_63";
+    case ERROR_USER_APC: return "ERROR_USER_APC";
+    case ERROR_KERNEL_APC: return "ERROR_KERNEL_APC";
+    case ERROR_ALERTED: return "ERROR_ALERTED";
+    case ERROR_EA_ACCESS_DENIED: return "ERROR_EA_ACCESS_DENIED";
+    case ERROR_OPERATION_ABORTED: return "ERROR_OPERATION_ABORTED";
+    case ERROR_IO_INCOMPLETE: return "ERROR_IO_INCOMPLETE";
+    case ERROR_IO_PENDING: return "ERROR_IO_PENDING";
+    case ERROR_NOACCESS: return "ERROR_NOACCESS";
+    case ERROR_SWAPERROR: return "ERROR_SWAPERROR";
+    case ERROR_STACK_OVERFLOW: return "ERROR_STACK_OVERFLOW";
+    case ERROR_INVALID_MESSAGE: return "ERROR_INVALID_MESSAGE";
+    case ERROR_CAN_NOT_COMPLETE: return "ERROR_CAN_NOT_COMPLETE";
+    case ERROR_INVALID_FLAGS: return "ERROR_INVALID_FLAGS";
+    case ERROR_UNRECOGNIZED_VOLUME: return "ERROR_UNRECOGNIZED_VOLUME";
+    case ERROR_FILE_INVALID: return "ERROR_FILE_INVALID";
+    case ERROR_FULLSCREEN_MODE: return "ERROR_FULLSCREEN_MODE";
+    case ERROR_NO_TOKEN: return "ERROR_NO_TOKEN";
+    case ERROR_BADDB: return "ERROR_BADDB";
+    case ERROR_BADKEY: return "ERROR_BADKEY";
+    case ERROR_CANTOPEN: return "ERROR_CANTOPEN";
+    case ERROR_CANTREAD: return "ERROR_CANTREAD";
+    case ERROR_CANTWRITE: return "ERROR_CANTWRITE";
+    case ERROR_REGISTRY_RECOVERED: return "ERROR_REGISTRY_RECOVERED";
+    case ERROR_REGISTRY_CORRUPT: return "ERROR_REGISTRY_CORRUPT";
+    case ERROR_REGISTRY_IO_FAILED: return "ERROR_REGISTRY_IO_FAILED";
+    case ERROR_NOT_REGISTRY_FILE: return "ERROR_NOT_REGISTRY_FILE";
+    case ERROR_KEY_DELETED: return "ERROR_KEY_DELETED";
+    case ERROR_NO_LOG_SPACE: return "ERROR_NO_LOG_SPACE";
+    case ERROR_KEY_HAS_CHILDREN: return "ERROR_KEY_HAS_CHILDREN";
+    case ERROR_CHILD_MUST_BE_VOLATILE: return "ERROR_CHILD_MUST_BE_VOLATILE";
+    case ERROR_NOTIFY_ENUM_DIR: return "ERROR_NOTIFY_ENUM_DIR";
+    case ERROR_DEPENDENT_SERVICES_RUNNING: return "ERROR_DEPENDENT_SERVICES_RUNNING";
+    case ERROR_INVALID_SERVICE_CONTROL: return "ERROR_INVALID_SERVICE_CONTROL";
+    case ERROR_SERVICE_REQUEST_TIMEOUT: return "ERROR_SERVICE_REQUEST_TIMEOUT";
+    case ERROR_SERVICE_NO_THREAD: return "ERROR_SERVICE_NO_THREAD";
+    case ERROR_SERVICE_DATABASE_LOCKED: return "ERROR_SERVICE_DATABASE_LOCKED";
+    case ERROR_SERVICE_ALREADY_RUNNING: return "ERROR_SERVICE_ALREADY_RUNNING";
+    case ERROR_INVALID_SERVICE_ACCOUNT: return "ERROR_INVALID_SERVICE_ACCOUNT";
+    case ERROR_SERVICE_DISABLED: return "ERROR_SERVICE_DISABLED";
+    case ERROR_CIRCULAR_DEPENDENCY: return "ERROR_CIRCULAR_DEPENDENCY";
+    case ERROR_SERVICE_DOES_NOT_EXIST: return "ERROR_SERVICE_DOES_NOT_EXIST";
+    case ERROR_SERVICE_CANNOT_ACCEPT_CTRL: return "ERROR_SERVICE_CANNOT_ACCEPT_CTRL";
+    case ERROR_SERVICE_NOT_ACTIVE: return "ERROR_SERVICE_NOT_ACTIVE";
+    case ERROR_FAILED_SERVICE_CONTROLLER_CONNECT: return "ERROR_FAILED_SERVICE_CONTROLLER_CONNECT";
+    case ERROR_EXCEPTION_IN_SERVICE: return "ERROR_EXCEPTION_IN_SERVICE";
+    case ERROR_DATABASE_DOES_NOT_EXIST: return "ERROR_DATABASE_DOES_NOT_EXIST";
+    case ERROR_SERVICE_SPECIFIC_ERROR: return "ERROR_SERVICE_SPECIFIC_ERROR";
+    case ERROR_PROCESS_ABORTED: return "ERROR_PROCESS_ABORTED";
+    case ERROR_SERVICE_DEPENDENCY_FAIL: return "ERROR_SERVICE_DEPENDENCY_FAIL";
+    case ERROR_SERVICE_LOGON_FAILED: return "ERROR_SERVICE_LOGON_FAILED";
+    case ERROR_SERVICE_START_HANG: return "ERROR_SERVICE_START_HANG";
+    case ERROR_INVALID_SERVICE_LOCK: return "ERROR_INVALID_SERVICE_LOCK";
+    case ERROR_SERVICE_MARKED_FOR_DELETE: return "ERROR_SERVICE_MARKED_FOR_DELETE";
+    case ERROR_SERVICE_EXISTS: return "ERROR_SERVICE_EXISTS";
+    case ERROR_ALREADY_RUNNING_LKG: return "ERROR_ALREADY_RUNNING_LKG";
+    case ERROR_SERVICE_DEPENDENCY_DELETED: return "ERROR_SERVICE_DEPENDENCY_DELETED";
+    case ERROR_BOOT_ALREADY_ACCEPTED: return "ERROR_BOOT_ALREADY_ACCEPTED";
+    case ERROR_SERVICE_NEVER_STARTED: return "ERROR_SERVICE_NEVER_STARTED";
+    case ERROR_DUPLICATE_SERVICE_NAME: return "ERROR_DUPLICATE_SERVICE_NAME";
+    case ERROR_DIFFERENT_SERVICE_ACCOUNT: return "ERROR_DIFFERENT_SERVICE_ACCOUNT";
+    case ERROR_CANNOT_DETECT_DRIVER_FAILURE: return "ERROR_CANNOT_DETECT_DRIVER_FAILURE";
+    case ERROR_CANNOT_DETECT_PROCESS_ABORT: return "ERROR_CANNOT_DETECT_PROCESS_ABORT";
+    case ERROR_NO_RECOVERY_PROGRAM: return "ERROR_NO_RECOVERY_PROGRAM";
+    case ERROR_SERVICE_NOT_IN_EXE: return "ERROR_SERVICE_NOT_IN_EXE";
+    case ERROR_NOT_SAFEBOOT_SERVICE: return "ERROR_NOT_SAFEBOOT_SERVICE";
+    case ERROR_END_OF_MEDIA: return "ERROR_END_OF_MEDIA";
+    case ERROR_FILEMARK_DETECTED: return "ERROR_FILEMARK_DETECTED";
+    case ERROR_BEGINNING_OF_MEDIA: return "ERROR_BEGINNING_OF_MEDIA";
+    case ERROR_SETMARK_DETECTED: return "ERROR_SETMARK_DETECTED";
+    case ERROR_NO_DATA_DETECTED: return "ERROR_NO_DATA_DETECTED";
+    case ERROR_PARTITION_FAILURE: return "ERROR_PARTITION_FAILURE";
+    case ERROR_INVALID_BLOCK_LENGTH: return "ERROR_INVALID_BLOCK_LENGTH";
+    case ERROR_DEVICE_NOT_PARTITIONED: return "ERROR_DEVICE_NOT_PARTITIONED";
+    case ERROR_UNABLE_TO_LOCK_MEDIA: return "ERROR_UNABLE_TO_LOCK_MEDIA";
+    case ERROR_UNABLE_TO_UNLOAD_MEDIA: return "ERROR_UNABLE_TO_UNLOAD_MEDIA";
+    case ERROR_MEDIA_CHANGED: return "ERROR_MEDIA_CHANGED";
+    case ERROR_BUS_RESET: return "ERROR_BUS_RESET";
+    case ERROR_NO_MEDIA_IN_DRIVE: return "ERROR_NO_MEDIA_IN_DRIVE";
+    case ERROR_NO_UNICODE_TRANSLATION: return "ERROR_NO_UNICODE_TRANSLATION";
+    case ERROR_DLL_INIT_FAILED: return "ERROR_DLL_INIT_FAILED";
+    case ERROR_SHUTDOWN_IN_PROGRESS: return "ERROR_SHUTDOWN_IN_PROGRESS";
+    case ERROR_NO_SHUTDOWN_IN_PROGRESS: return "ERROR_NO_SHUTDOWN_IN_PROGRESS";
+    case ERROR_IO_DEVICE: return "ERROR_IO_DEVICE";
+    case ERROR_SERIAL_NO_DEVICE: return "ERROR_SERIAL_NO_DEVICE";
+    case ERROR_IRQ_BUSY: return "ERROR_IRQ_BUSY";
+    case ERROR_MORE_WRITES: return "ERROR_MORE_WRITES";
+    case ERROR_COUNTER_TIMEOUT: return "ERROR_COUNTER_TIMEOUT";
+    case ERROR_FLOPPY_ID_MARK_NOT_FOUND: return "ERROR_FLOPPY_ID_MARK_NOT_FOUND";
+    case ERROR_FLOPPY_WRONG_CYLINDER: return "ERROR_FLOPPY_WRONG_CYLINDER";
+    case ERROR_FLOPPY_UNKNOWN_ERROR: return "ERROR_FLOPPY_UNKNOWN_ERROR";
+    case ERROR_FLOPPY_BAD_REGISTERS: return "ERROR_FLOPPY_BAD_REGISTERS";
+    case ERROR_DISK_RECALIBRATE_FAILED: return "ERROR_DISK_RECALIBRATE_FAILED";
+    case ERROR_DISK_OPERATION_FAILED: return "ERROR_DISK_OPERATION_FAILED";
+    case ERROR_DISK_RESET_FAILED: return "ERROR_DISK_RESET_FAILED";
+    case ERROR_EOM_OVERFLOW: return "ERROR_EOM_OVERFLOW";
+    case ERROR_NOT_ENOUGH_SERVER_MEMORY: return "ERROR_NOT_ENOUGH_SERVER_MEMORY";
+    case ERROR_POSSIBLE_DEADLOCK: return "ERROR_POSSIBLE_DEADLOCK";
+    case ERROR_MAPPED_ALIGNMENT: return "ERROR_MAPPED_ALIGNMENT";
+    case ERROR_SET_POWER_STATE_VETOED: return "ERROR_SET_POWER_STATE_VETOED";
+    case ERROR_SET_POWER_STATE_FAILED: return "ERROR_SET_POWER_STATE_FAILED";
+    case ERROR_TOO_MANY_LINKS: return "ERROR_TOO_MANY_LINKS";
+    case ERROR_OLD_WIN_VERSION: return "ERROR_OLD_WIN_VERSION";
+    case ERROR_APP_WRONG_OS: return "ERROR_APP_WRONG_OS";
+    case ERROR_SINGLE_INSTANCE_APP: return "ERROR_SINGLE_INSTANCE_APP";
+    case ERROR_RMODE_APP: return "ERROR_RMODE_APP";
+    case ERROR_INVALID_DLL: return "ERROR_INVALID_DLL";
+    case ERROR_NO_ASSOCIATION: return "ERROR_NO_ASSOCIATION";
+    case ERROR_DDE_FAIL: return "ERROR_DDE_FAIL";
+    case ERROR_DLL_NOT_FOUND: return "ERROR_DLL_NOT_FOUND";
+    case ERROR_NO_MORE_USER_HANDLES: return "ERROR_NO_MORE_USER_HANDLES";
+    case ERROR_MESSAGE_SYNC_ONLY: return "ERROR_MESSAGE_SYNC_ONLY";
+    case ERROR_SOURCE_ELEMENT_EMPTY: return "ERROR_SOURCE_ELEMENT_EMPTY";
+    case ERROR_DESTINATION_ELEMENT_FULL: return "ERROR_DESTINATION_ELEMENT_FULL";
+    case ERROR_ILLEGAL_ELEMENT_ADDRESS: return "ERROR_ILLEGAL_ELEMENT_ADDRESS";
+    case ERROR_MAGAZINE_NOT_PRESENT: return "ERROR_MAGAZINE_NOT_PRESENT";
+    case ERROR_DEVICE_REINITIALIZATION_NEEDED: return "ERROR_DEVICE_REINITIALIZATION_NEEDED";
+    case ERROR_DEVICE_REQUIRES_CLEANING: return "ERROR_DEVICE_REQUIRES_CLEANING";
+    case ERROR_DEVICE_DOOR_OPEN: return "ERROR_DEVICE_DOOR_OPEN";
+    case ERROR_DEVICE_NOT_CONNECTED: return "ERROR_DEVICE_NOT_CONNECTED";
+    case ERROR_NOT_FOUND: return "ERROR_NOT_FOUND";
+    case ERROR_NO_MATCH: return "ERROR_NO_MATCH";
+    case ERROR_SET_NOT_FOUND: return "ERROR_SET_NOT_FOUND";
+    case ERROR_POINT_NOT_FOUND: return "ERROR_POINT_NOT_FOUND";
+    case ERROR_NO_TRACKING_SERVICE: return "ERROR_NO_TRACKING_SERVICE";
+    case ERROR_NO_VOLUME_ID: return "ERROR_NO_VOLUME_ID";
+    case ERROR_UNABLE_TO_REMOVE_REPLACED: return "ERROR_UNABLE_TO_REMOVE_REPLACED";
+    case ERROR_UNABLE_TO_MOVE_REPLACEMENT: return "ERROR_UNABLE_TO_MOVE_REPLACEMENT";
+    case ERROR_UNABLE_TO_MOVE_REPLACEMENT_2: return "ERROR_UNABLE_TO_MOVE_REPLACEMENT_2";
+    case ERROR_JOURNAL_DELETE_IN_PROGRESS: return "ERROR_JOURNAL_DELETE_IN_PROGRESS";
+    case ERROR_JOURNAL_NOT_ACTIVE: return "ERROR_JOURNAL_NOT_ACTIVE";
+    case ERROR_POTENTIAL_FILE_FOUND: return "ERROR_POTENTIAL_FILE_FOUND";
+    case ERROR_JOURNAL_ENTRY_DELETED: return "ERROR_JOURNAL_ENTRY_DELETED";
+    case ERROR_BAD_DEVICE: return "ERROR_BAD_DEVICE";
+    case ERROR_CONNECTION_UNAVAIL: return "ERROR_CONNECTION_UNAVAIL";
+    case ERROR_DEVICE_ALREADY_REMEMBERED: return "ERROR_DEVICE_ALREADY_REMEMBERED";
+    case ERROR_NO_NET_OR_BAD_PATH: return "ERROR_NO_NET_OR_BAD_PATH";
+    case ERROR_BAD_PROVIDER: return "ERROR_BAD_PROVIDER";
+    case ERROR_CANNOT_OPEN_PROFILE: return "ERROR_CANNOT_OPEN_PROFILE";
+    case ERROR_BAD_PROFILE: return "ERROR_BAD_PROFILE";
+    case ERROR_NOT_CONTAINER: return "ERROR_NOT_CONTAINER";
+    case ERROR_EXTENDED_ERROR: return "ERROR_EXTENDED_ERROR";
+    case ERROR_INVALID_GROUPNAME: return "ERROR_INVALID_GROUPNAME";
+    case ERROR_INVALID_COMPUTERNAME: return "ERROR_INVALID_COMPUTERNAME";
+    case ERROR_INVALID_EVENTNAME: return "ERROR_INVALID_EVENTNAME";
+    case ERROR_INVALID_DOMAINNAME: return "ERROR_INVALID_DOMAINNAME";
+    case ERROR_INVALID_SERVICENAME: return "ERROR_INVALID_SERVICENAME";
+    case ERROR_INVALID_NETNAME: return "ERROR_INVALID_NETNAME";
+    case ERROR_INVALID_SHARENAME: return "ERROR_INVALID_SHARENAME";
+    case ERROR_INVALID_PASSWORDNAME: return "ERROR_INVALID_PASSWORDNAME";
+    case ERROR_INVALID_MESSAGENAME: return "ERROR_INVALID_MESSAGENAME";
+    case ERROR_INVALID_MESSAGEDEST: return "ERROR_INVALID_MESSAGEDEST";
+    case ERROR_SESSION_CREDENTIAL_CONFLICT: return "ERROR_SESSION_CREDENTIAL_CONFLICT";
+    case ERROR_REMOTE_SESSION_LIMIT_EXCEEDED: return "ERROR_REMOTE_SESSION_LIMIT_EXCEEDED";
+    case ERROR_DUP_DOMAINNAME: return "ERROR_DUP_DOMAINNAME";
+    case ERROR_NO_NETWORK: return "ERROR_NO_NETWORK";
+    case ERROR_CANCELLED: return "ERROR_CANCELLED";
+    case ERROR_USER_MAPPED_FILE: return "ERROR_USER_MAPPED_FILE";
+    case ERROR_CONNECTION_REFUSED: return "ERROR_CONNECTION_REFUSED";
+    case ERROR_GRACEFUL_DISCONNECT: return "ERROR_GRACEFUL_DISCONNECT";
+    case ERROR_ADDRESS_ALREADY_ASSOCIATED: return "ERROR_ADDRESS_ALREADY_ASSOCIATED";
+    case ERROR_ADDRESS_NOT_ASSOCIATED: return "ERROR_ADDRESS_NOT_ASSOCIATED";
+    case ERROR_CONNECTION_INVALID: return "ERROR_CONNECTION_INVALID";
+    case ERROR_CONNECTION_ACTIVE: return "ERROR_CONNECTION_ACTIVE";
+    case ERROR_NETWORK_UNREACHABLE: return "ERROR_NETWORK_UNREACHABLE";
+    case ERROR_HOST_UNREACHABLE: return "ERROR_HOST_UNREACHABLE";
+    case ERROR_PROTOCOL_UNREACHABLE: return "ERROR_PROTOCOL_UNREACHABLE";
+    case ERROR_PORT_UNREACHABLE: return "ERROR_PORT_UNREACHABLE";
+    case ERROR_REQUEST_ABORTED: return "ERROR_REQUEST_ABORTED";
+    case ERROR_CONNECTION_ABORTED: return "ERROR_CONNECTION_ABORTED";
+    case ERROR_RETRY: return "ERROR_RETRY";
+    case ERROR_CONNECTION_COUNT_LIMIT: return "ERROR_CONNECTION_COUNT_LIMIT";
+    case ERROR_LOGIN_TIME_RESTRICTION: return "ERROR_LOGIN_TIME_RESTRICTION";
+    case ERROR_LOGIN_WKSTA_RESTRICTION: return "ERROR_LOGIN_WKSTA_RESTRICTION";
+    case ERROR_INCORRECT_ADDRESS: return "ERROR_INCORRECT_ADDRESS";
+    case ERROR_ALREADY_REGISTERED: return "ERROR_ALREADY_REGISTERED";
+    case ERROR_SERVICE_NOT_FOUND: return "ERROR_SERVICE_NOT_FOUND";
+    case ERROR_NOT_AUTHENTICATED: return "ERROR_NOT_AUTHENTICATED";
+    case ERROR_NOT_LOGGED_ON: return "ERROR_NOT_LOGGED_ON";
+    case ERROR_CONTINUE: return "ERROR_CONTINUE";
+    case ERROR_ALREADY_INITIALIZED: return "ERROR_ALREADY_INITIALIZED";
+    case ERROR_NO_MORE_DEVICES: return "ERROR_NO_MORE_DEVICES";
+    case ERROR_NO_SUCH_SITE: return "ERROR_NO_SUCH_SITE";
+    case ERROR_DOMAIN_CONTROLLER_EXISTS: return "ERROR_DOMAIN_CONTROLLER_EXISTS";
+    case ERROR_ONLY_IF_CONNECTED: return "ERROR_ONLY_IF_CONNECTED";
+    case ERROR_OVERRIDE_NOCHANGES: return "ERROR_OVERRIDE_NOCHANGES";
+    case ERROR_BAD_USER_PROFILE: return "ERROR_BAD_USER_PROFILE";
+    case ERROR_NOT_SUPPORTED_ON_SBS: return "ERROR_NOT_SUPPORTED_ON_SBS";
+    case ERROR_SERVER_SHUTDOWN_IN_PROGRESS: return "ERROR_SERVER_SHUTDOWN_IN_PROGRESS";
+    case ERROR_HOST_DOWN: return "ERROR_HOST_DOWN";
+    case ERROR_NON_ACCOUNT_SID: return "ERROR_NON_ACCOUNT_SID";
+    case ERROR_NON_DOMAIN_SID: return "ERROR_NON_DOMAIN_SID";
+    case ERROR_APPHELP_BLOCK: return "ERROR_APPHELP_BLOCK";
+    case ERROR_ACCESS_DISABLED_BY_POLICY: return "ERROR_ACCESS_DISABLED_BY_POLICY";
+    case ERROR_REG_NAT_CONSUMPTION: return "ERROR_REG_NAT_CONSUMPTION";
+    case ERROR_CSCSHARE_OFFLINE: return "ERROR_CSCSHARE_OFFLINE";
+    case ERROR_PKINIT_FAILURE: return "ERROR_PKINIT_FAILURE";
+    case ERROR_SMARTCARD_SUBSYSTEM_FAILURE: return "ERROR_SMARTCARD_SUBSYSTEM_FAILURE";
+    case ERROR_DOWNGRADE_DETECTED: return "ERROR_DOWNGRADE_DETECTED";
+    case ERROR_MACHINE_LOCKED: return "ERROR_MACHINE_LOCKED";
+    case ERROR_CALLBACK_SUPPLIED_INVALID_DATA: return "ERROR_CALLBACK_SUPPLIED_INVALID_DATA";
+    case ERROR_SYNC_FOREGROUND_REFRESH_REQUIRED: return "ERROR_SYNC_FOREGROUND_REFRESH_REQUIRED";
+    case ERROR_DRIVER_BLOCKED: return "ERROR_DRIVER_BLOCKED";
+    case ERROR_INVALID_IMPORT_OF_NON_DLL: return "ERROR_INVALID_IMPORT_OF_NON_DLL";
+    case ERROR_ACCESS_DISABLED_WEBBLADE: return "ERROR_ACCESS_DISABLED_WEBBLADE";
+    case ERROR_ACCESS_DISABLED_WEBBLADE_TAMPER: return "ERROR_ACCESS_DISABLED_WEBBLADE_TAMPER";
+    case ERROR_RECOVERY_FAILURE: return "ERROR_RECOVERY_FAILURE";
+    case ERROR_ALREADY_FIBER: return "ERROR_ALREADY_FIBER";
+    case ERROR_ALREADY_THREAD: return "ERROR_ALREADY_THREAD";
+    case ERROR_STACK_BUFFER_OVERRUN: return "ERROR_STACK_BUFFER_OVERRUN";
+    case ERROR_PARAMETER_QUOTA_EXCEEDED: return "ERROR_PARAMETER_QUOTA_EXCEEDED";
+    case ERROR_DEBUGGER_INACTIVE: return "ERROR_DEBUGGER_INACTIVE";
+    case ERROR_DELAY_LOAD_FAILED: return "ERROR_DELAY_LOAD_FAILED";
+    case ERROR_VDM_DISALLOWED: return "ERROR_VDM_DISALLOWED";
+    case ERROR_UNIDENTIFIED_ERROR: return "ERROR_UNIDENTIFIED_ERROR";
+    case ERROR_NOT_ALL_ASSIGNED: return "ERROR_NOT_ALL_ASSIGNED";
+    case ERROR_SOME_NOT_MAPPED: return "ERROR_SOME_NOT_MAPPED";
+    case ERROR_NO_QUOTAS_FOR_ACCOUNT: return "ERROR_NO_QUOTAS_FOR_ACCOUNT";
+    case ERROR_LOCAL_USER_SESSION_KEY: return "ERROR_LOCAL_USER_SESSION_KEY";
+    case ERROR_NULL_LM_PASSWORD: return "ERROR_NULL_LM_PASSWORD";
+    case ERROR_UNKNOWN_REVISION: return "ERROR_UNKNOWN_REVISION";
+    case ERROR_REVISION_MISMATCH: return "ERROR_REVISION_MISMATCH";
+    case ERROR_INVALID_OWNER: return "ERROR_INVALID_OWNER";
+    case ERROR_INVALID_PRIMARY_GROUP: return "ERROR_INVALID_PRIMARY_GROUP";
+    case ERROR_NO_IMPERSONATION_TOKEN: return "ERROR_NO_IMPERSONATION_TOKEN";
+    case ERROR_CANT_DISABLE_MANDATORY: return "ERROR_CANT_DISABLE_MANDATORY";
+    case ERROR_NO_LOGON_SERVERS: return "ERROR_NO_LOGON_SERVERS";
+    case ERROR_NO_SUCH_LOGON_SESSION: return "ERROR_NO_SUCH_LOGON_SESSION";
+    case ERROR_NO_SUCH_PRIVILEGE: return "ERROR_NO_SUCH_PRIVILEGE";
+    case ERROR_PRIVILEGE_NOT_HELD: return "ERROR_PRIVILEGE_NOT_HELD";
+    case ERROR_INVALID_ACCOUNT_NAME: return "ERROR_INVALID_ACCOUNT_NAME";
+    case ERROR_USER_EXISTS: return "ERROR_USER_EXISTS";
+    case ERROR_NO_SUCH_USER: return "ERROR_NO_SUCH_USER";
+    case ERROR_GROUP_EXISTS: return "ERROR_GROUP_EXISTS";
+    case ERROR_NO_SUCH_GROUP: return "ERROR_NO_SUCH_GROUP";
+    case ERROR_MEMBER_IN_GROUP: return "ERROR_MEMBER_IN_GROUP";
+    case ERROR_MEMBER_NOT_IN_GROUP: return "ERROR_MEMBER_NOT_IN_GROUP";
+    case ERROR_LAST_ADMIN: return "ERROR_LAST_ADMIN";
+    case ERROR_WRONG_PASSWORD: return "ERROR_WRONG_PASSWORD";
+    case ERROR_ILL_FORMED_PASSWORD: return "ERROR_ILL_FORMED_PASSWORD";
+    case ERROR_PASSWORD_RESTRICTION: return "ERROR_PASSWORD_RESTRICTION";
+    case ERROR_LOGON_FAILURE: return "ERROR_LOGON_FAILURE";
+    case ERROR_ACCOUNT_RESTRICTION: return "ERROR_ACCOUNT_RESTRICTION";
+    case ERROR_INVALID_LOGON_HOURS: return "ERROR_INVALID_LOGON_HOURS";
+    case ERROR_INVALID_WORKSTATION: return "ERROR_INVALID_WORKSTATION";
+    case ERROR_PASSWORD_EXPIRED: return "ERROR_PASSWORD_EXPIRED";
+    case ERROR_ACCOUNT_DISABLED: return "ERROR_ACCOUNT_DISABLED";
+    case ERROR_NONE_MAPPED: return "ERROR_NONE_MAPPED";
+    case ERROR_TOO_MANY_LUIDS_REQUESTED: return "ERROR_TOO_MANY_LUIDS_REQUESTED";
+    case ERROR_LUIDS_EXHAUSTED: return "ERROR_LUIDS_EXHAUSTED";
+    case ERROR_INVALID_SUB_AUTHORITY: return "ERROR_INVALID_SUB_AUTHORITY";
+    case ERROR_INVALID_ACL: return "ERROR_INVALID_ACL";
+    case ERROR_INVALID_SID: return "ERROR_INVALID_SID";
+    case ERROR_INVALID_SECURITY_DESCR: return "ERROR_INVALID_SECURITY_DESCR";
+    case ERROR_BAD_INHERITANCE_ACL: return "ERROR_BAD_INHERITANCE_ACL";
+    case ERROR_SERVER_DISABLED: return "ERROR_SERVER_DISABLED";
+    case ERROR_SERVER_NOT_DISABLED: return "ERROR_SERVER_NOT_DISABLED";
+    case ERROR_INVALID_ID_AUTHORITY: return "ERROR_INVALID_ID_AUTHORITY";
+    case ERROR_ALLOTTED_SPACE_EXCEEDED: return "ERROR_ALLOTTED_SPACE_EXCEEDED";
+    case ERROR_INVALID_GROUP_ATTRIBUTES: return "ERROR_INVALID_GROUP_ATTRIBUTES";
+    case ERROR_BAD_IMPERSONATION_LEVEL: return "ERROR_BAD_IMPERSONATION_LEVEL";
+    case ERROR_CANT_OPEN_ANONYMOUS: return "ERROR_CANT_OPEN_ANONYMOUS";
+    case ERROR_BAD_VALIDATION_CLASS: return "ERROR_BAD_VALIDATION_CLASS";
+    case ERROR_BAD_TOKEN_TYPE: return "ERROR_BAD_TOKEN_TYPE";
+    case ERROR_NO_SECURITY_ON_OBJECT: return "ERROR_NO_SECURITY_ON_OBJECT";
+    case ERROR_CANT_ACCESS_DOMAIN_INFO: return "ERROR_CANT_ACCESS_DOMAIN_INFO";
+    case ERROR_INVALID_SERVER_STATE: return "ERROR_INVALID_SERVER_STATE";
+    case ERROR_INVALID_DOMAIN_STATE: return "ERROR_INVALID_DOMAIN_STATE";
+    case ERROR_INVALID_DOMAIN_ROLE: return "ERROR_INVALID_DOMAIN_ROLE";
+    case ERROR_NO_SUCH_DOMAIN: return "ERROR_NO_SUCH_DOMAIN";
+    case ERROR_DOMAIN_EXISTS: return "ERROR_DOMAIN_EXISTS";
+    case ERROR_DOMAIN_LIMIT_EXCEEDED: return "ERROR_DOMAIN_LIMIT_EXCEEDED";
+    case ERROR_INTERNAL_DB_CORRUPTION: return "ERROR_INTERNAL_DB_CORRUPTION";
+    case ERROR_INTERNAL_ERROR: return "ERROR_INTERNAL_ERROR";
+    case ERROR_GENERIC_NOT_MAPPED: return "ERROR_GENERIC_NOT_MAPPED";
+    case ERROR_BAD_DESCRIPTOR_FORMAT: return "ERROR_BAD_DESCRIPTOR_FORMAT";
+    case ERROR_NOT_LOGON_PROCESS: return "ERROR_NOT_LOGON_PROCESS";
+    case ERROR_LOGON_SESSION_EXISTS: return "ERROR_LOGON_SESSION_EXISTS";
+    case ERROR_NO_SUCH_PACKAGE: return "ERROR_NO_SUCH_PACKAGE";
+    case ERROR_BAD_LOGON_SESSION_STATE: return "ERROR_BAD_LOGON_SESSION_STATE";
+    case ERROR_LOGON_SESSION_COLLISION: return "ERROR_LOGON_SESSION_COLLISION";
+    case ERROR_INVALID_LOGON_TYPE: return "ERROR_INVALID_LOGON_TYPE";
+    case ERROR_CANNOT_IMPERSONATE: return "ERROR_CANNOT_IMPERSONATE";
+    case ERROR_RXACT_INVALID_STATE: return "ERROR_RXACT_INVALID_STATE";
+    case ERROR_RXACT_COMMIT_FAILURE: return "ERROR_RXACT_COMMIT_FAILURE";
+    case ERROR_SPECIAL_ACCOUNT: return "ERROR_SPECIAL_ACCOUNT";
+    case ERROR_SPECIAL_GROUP: return "ERROR_SPECIAL_GROUP";
+    case ERROR_SPECIAL_USER: return "ERROR_SPECIAL_USER";
+    case ERROR_MEMBERS_PRIMARY_GROUP: return "ERROR_MEMBERS_PRIMARY_GROUP";
+    case ERROR_TOKEN_ALREADY_IN_USE: return "ERROR_TOKEN_ALREADY_IN_USE";
+    case ERROR_NO_SUCH_ALIAS: return "ERROR_NO_SUCH_ALIAS";
+    case ERROR_MEMBER_NOT_IN_ALIAS: return "ERROR_MEMBER_NOT_IN_ALIAS";
+    case ERROR_MEMBER_IN_ALIAS: return "ERROR_MEMBER_IN_ALIAS";
+    case ERROR_ALIAS_EXISTS: return "ERROR_ALIAS_EXISTS";
+    case ERROR_LOGON_NOT_GRANTED: return "ERROR_LOGON_NOT_GRANTED";
+    case ERROR_TOO_MANY_SECRETS: return "ERROR_TOO_MANY_SECRETS";
+    case ERROR_SECRET_TOO_LONG: return "ERROR_SECRET_TOO_LONG";
+    case ERROR_INTERNAL_DB_ERROR: return "ERROR_INTERNAL_DB_ERROR";
+    case ERROR_TOO_MANY_CONTEXT_IDS: return "ERROR_TOO_MANY_CONTEXT_IDS";
+    case ERROR_LOGON_TYPE_NOT_GRANTED: return "ERROR_LOGON_TYPE_NOT_GRANTED";
+    case ERROR_NT_CROSS_ENCRYPTION_REQUIRED: return "ERROR_NT_CROSS_ENCRYPTION_REQUIRED";
+    case ERROR_NO_SUCH_MEMBER: return "ERROR_NO_SUCH_MEMBER";
+    case ERROR_INVALID_MEMBER: return "ERROR_INVALID_MEMBER";
+    case ERROR_TOO_MANY_SIDS: return "ERROR_TOO_MANY_SIDS";
+    case ERROR_LM_CROSS_ENCRYPTION_REQUIRED: return "ERROR_LM_CROSS_ENCRYPTION_REQUIRED";
+    case ERROR_NO_INHERITANCE: return "ERROR_NO_INHERITANCE";
+    case ERROR_FILE_CORRUPT: return "ERROR_FILE_CORRUPT";
+    case ERROR_DISK_CORRUPT: return "ERROR_DISK_CORRUPT";
+    case ERROR_NO_USER_SESSION_KEY: return "ERROR_NO_USER_SESSION_KEY";
+    case ERROR_LICENSE_QUOTA_EXCEEDED: return "ERROR_LICENSE_QUOTA_EXCEEDED";
+    case ERROR_WRONG_TARGET_NAME: return "ERROR_WRONG_TARGET_NAME";
+    case ERROR_MUTUAL_AUTH_FAILED: return "ERROR_MUTUAL_AUTH_FAILED";
+    case ERROR_TIME_SKEW: return "ERROR_TIME_SKEW";
+    case ERROR_CURRENT_DOMAIN_NOT_ALLOWED: return "ERROR_CURRENT_DOMAIN_NOT_ALLOWED";
+    case ERROR_INVALID_WINDOW_HANDLE: return "ERROR_INVALID_WINDOW_HANDLE";
+    case ERROR_INVALID_MENU_HANDLE: return "ERROR_INVALID_MENU_HANDLE";
+    case ERROR_INVALID_CURSOR_HANDLE: return "ERROR_INVALID_CURSOR_HANDLE";
+    case ERROR_INVALID_ACCEL_HANDLE: return "ERROR_INVALID_ACCEL_HANDLE";
+    case ERROR_INVALID_HOOK_HANDLE: return "ERROR_INVALID_HOOK_HANDLE";
+    case ERROR_INVALID_DWP_HANDLE: return "ERROR_INVALID_DWP_HANDLE";
+    case ERROR_TLW_WITH_WSCHILD: return "ERROR_TLW_WITH_WSCHILD";
+    case ERROR_CANNOT_FIND_WND_CLASS: return "ERROR_CANNOT_FIND_WND_CLASS";
+    case ERROR_WINDOW_OF_OTHER_THREAD: return "ERROR_WINDOW_OF_OTHER_THREAD";
+    case ERROR_HOTKEY_ALREADY_REGISTERED: return "ERROR_HOTKEY_ALREADY_REGISTERED";
+    case ERROR_CLASS_ALREADY_EXISTS: return "ERROR_CLASS_ALREADY_EXISTS";
+    case ERROR_CLASS_DOES_NOT_EXIST: return "ERROR_CLASS_DOES_NOT_EXIST";
+    case ERROR_CLASS_HAS_WINDOWS: return "ERROR_CLASS_HAS_WINDOWS";
+    case ERROR_INVALID_INDEX: return "ERROR_INVALID_INDEX";
+    case ERROR_INVALID_ICON_HANDLE: return "ERROR_INVALID_ICON_HANDLE";
+    case ERROR_PRIVATE_DIALOG_INDEX: return "ERROR_PRIVATE_DIALOG_INDEX";
+    case ERROR_LISTBOX_ID_NOT_FOUND: return "ERROR_LISTBOX_ID_NOT_FOUND";
+    case ERROR_NO_WILDCARD_CHARACTERS: return "ERROR_NO_WILDCARD_CHARACTERS";
+    case ERROR_CLIPBOARD_NOT_OPEN: return "ERROR_CLIPBOARD_NOT_OPEN";
+    case ERROR_HOTKEY_NOT_REGISTERED: return "ERROR_HOTKEY_NOT_REGISTERED";
+    case ERROR_WINDOW_NOT_DIALOG: return "ERROR_WINDOW_NOT_DIALOG";
+    case ERROR_CONTROL_ID_NOT_FOUND: return "ERROR_CONTROL_ID_NOT_FOUND";
+    case ERROR_INVALID_COMBOBOX_MESSAGE: return "ERROR_INVALID_COMBOBOX_MESSAGE";
+    case ERROR_WINDOW_NOT_COMBOBOX: return "ERROR_WINDOW_NOT_COMBOBOX";
+    case ERROR_INVALID_EDIT_HEIGHT: return "ERROR_INVALID_EDIT_HEIGHT";
+    case ERROR_DC_NOT_FOUND: return "ERROR_DC_NOT_FOUND";
+    case ERROR_INVALID_HOOK_FILTER: return "ERROR_INVALID_HOOK_FILTER";
+    case ERROR_INVALID_FILTER_PROC: return "ERROR_INVALID_FILTER_PROC";
+    case ERROR_HOOK_NEEDS_HMOD: return "ERROR_HOOK_NEEDS_HMOD";
+    case ERROR_GLOBAL_ONLY_HOOK: return "ERROR_GLOBAL_ONLY_HOOK";
+    case ERROR_JOURNAL_HOOK_SET: return "ERROR_JOURNAL_HOOK_SET";
+    case ERROR_HOOK_NOT_INSTALLED: return "ERROR_HOOK_NOT_INSTALLED";
+    case ERROR_INVALID_LB_MESSAGE: return "ERROR_INVALID_LB_MESSAGE";
+    case ERROR_SETCOUNT_ON_BAD_LB: return "ERROR_SETCOUNT_ON_BAD_LB";
+    case ERROR_LB_WITHOUT_TABSTOPS: return "ERROR_LB_WITHOUT_TABSTOPS";
+    case ERROR_DESTROY_OBJECT_OF_OTHER_THREAD: return "ERROR_DESTROY_OBJECT_OF_OTHER_THREAD";
+    case ERROR_CHILD_WINDOW_MENU: return "ERROR_CHILD_WINDOW_MENU";
+    case ERROR_NO_SYSTEM_MENU: return "ERROR_NO_SYSTEM_MENU";
+    case ERROR_INVALID_MSGBOX_STYLE: return "ERROR_INVALID_MSGBOX_STYLE";
+    case ERROR_INVALID_SPI_VALUE: return "ERROR_INVALID_SPI_VALUE";
+    case ERROR_SCREEN_ALREADY_LOCKED: return "ERROR_SCREEN_ALREADY_LOCKED";
+    case ERROR_HWNDS_HAVE_DIFF_PARENT: return "ERROR_HWNDS_HAVE_DIFF_PARENT";
+    case ERROR_NOT_CHILD_WINDOW: return "ERROR_NOT_CHILD_WINDOW";
+    case ERROR_INVALID_GW_COMMAND: return "ERROR_INVALID_GW_COMMAND";
+    case ERROR_INVALID_THREAD_ID: return "ERROR_INVALID_THREAD_ID";
+    case ERROR_NON_MDICHILD_WINDOW: return "ERROR_NON_MDICHILD_WINDOW";
+    case ERROR_POPUP_ALREADY_ACTIVE: return "ERROR_POPUP_ALREADY_ACTIVE";
+    case ERROR_NO_SCROLLBARS: return "ERROR_NO_SCROLLBARS";
+    case ERROR_INVALID_SCROLLBAR_RANGE: return "ERROR_INVALID_SCROLLBAR_RANGE";
+    case ERROR_INVALID_SHOWWIN_COMMAND: return "ERROR_INVALID_SHOWWIN_COMMAND";
+    case ERROR_NO_SYSTEM_RESOURCES: return "ERROR_NO_SYSTEM_RESOURCES";
+    case ERROR_NONPAGED_SYSTEM_RESOURCES: return "ERROR_NONPAGED_SYSTEM_RESOURCES";
+    case ERROR_PAGED_SYSTEM_RESOURCES: return "ERROR_PAGED_SYSTEM_RESOURCES";
+    case ERROR_WORKING_SET_QUOTA: return "ERROR_WORKING_SET_QUOTA";
+    case ERROR_PAGEFILE_QUOTA: return "ERROR_PAGEFILE_QUOTA";
+    case ERROR_COMMITMENT_LIMIT: return "ERROR_COMMITMENT_LIMIT";
+    case ERROR_MENU_ITEM_NOT_FOUND: return "ERROR_MENU_ITEM_NOT_FOUND";
+    case ERROR_INVALID_KEYBOARD_HANDLE: return "ERROR_INVALID_KEYBOARD_HANDLE";
+    case ERROR_HOOK_TYPE_NOT_ALLOWED: return "ERROR_HOOK_TYPE_NOT_ALLOWED";
+    case ERROR_REQUIRES_INTERACTIVE_WINDOWSTATION: return "ERROR_REQUIRES_INTERACTIVE_WINDOWSTATION";
+    case ERROR_TIMEOUT: return "ERROR_TIMEOUT";
+    case ERROR_INVALID_MONITOR_HANDLE: return "ERROR_INVALID_MONITOR_HANDLE";
+    case ERROR_INCORRECT_SIZE: return "ERROR_INCORRECT_SIZE";
+    case ERROR_SYMLINK_CLASS_DISABLED: return "ERROR_SYMLINK_CLASS_DISABLED";
+    case ERROR_SYMLINK_NOT_SUPPORTED: return "ERROR_SYMLINK_NOT_SUPPORTED";
+    case ERROR_XML_PARSE_ERROR: return "ERROR_XML_PARSE_ERROR";
+    case ERROR_XMLDSIG_ERROR: return "ERROR_XMLDSIG_ERROR";
+    case ERROR_RESTART_APPLICATION: return "ERROR_RESTART_APPLICATION";
+    case ERROR_WRONG_COMPARTMENT: return "ERROR_WRONG_COMPARTMENT";
+    case ERROR_AUTHIP_FAILURE: return "ERROR_AUTHIP_FAILURE";
+    case ERROR_NO_NVRAM_RESOURCES: return "ERROR_NO_NVRAM_RESOURCES";
+    case ERROR_NOT_GUI_PROCESS: return "ERROR_NOT_GUI_PROCESS";
+    case ERROR_EVENTLOG_FILE_CORRUPT: return "ERROR_EVENTLOG_FILE_CORRUPT";
+    case ERROR_EVENTLOG_CANT_START: return "ERROR_EVENTLOG_CANT_START";
+    case ERROR_LOG_FILE_FULL: return "ERROR_LOG_FILE_FULL";
+    case ERROR_EVENTLOG_FILE_CHANGED: return "ERROR_EVENTLOG_FILE_CHANGED";
+    case ERROR_INSTALL_SERVICE_FAILURE: return "ERROR_INSTALL_SERVICE_FAILURE";
+    case ERROR_INSTALL_USEREXIT: return "ERROR_INSTALL_USEREXIT";
+    case ERROR_INSTALL_FAILURE: return "ERROR_INSTALL_FAILURE";
+    case ERROR_INSTALL_SUSPEND: return "ERROR_INSTALL_SUSPEND";
+    case ERROR_UNKNOWN_PRODUCT: return "ERROR_UNKNOWN_PRODUCT";
+    case ERROR_UNKNOWN_FEATURE: return "ERROR_UNKNOWN_FEATURE";
+    case ERROR_UNKNOWN_COMPONENT: return "ERROR_UNKNOWN_COMPONENT";
+    case ERROR_UNKNOWN_PROPERTY: return "ERROR_UNKNOWN_PROPERTY";
+    case ERROR_INVALID_HANDLE_STATE: return "ERROR_INVALID_HANDLE_STATE";
+    case ERROR_BAD_CONFIGURATION: return "ERROR_BAD_CONFIGURATION";
+    case ERROR_INDEX_ABSENT: return "ERROR_INDEX_ABSENT";
+    case ERROR_INSTALL_SOURCE_ABSENT: return "ERROR_INSTALL_SOURCE_ABSENT";
+    case ERROR_INSTALL_PACKAGE_VERSION: return "ERROR_INSTALL_PACKAGE_VERSION";
+    case ERROR_PRODUCT_UNINSTALLED: return "ERROR_PRODUCT_UNINSTALLED";
+    case ERROR_BAD_QUERY_SYNTAX: return "ERROR_BAD_QUERY_SYNTAX";
+    case ERROR_INVALID_FIELD: return "ERROR_INVALID_FIELD";
+    case ERROR_DEVICE_REMOVED: return "ERROR_DEVICE_REMOVED";
+    case ERROR_INSTALL_ALREADY_RUNNING: return "ERROR_INSTALL_ALREADY_RUNNING";
+    case ERROR_INSTALL_PACKAGE_OPEN_FAILED: return "ERROR_INSTALL_PACKAGE_OPEN_FAILED";
+    case ERROR_INSTALL_PACKAGE_INVALID: return "ERROR_INSTALL_PACKAGE_INVALID";
+    case ERROR_INSTALL_UI_FAILURE: return "ERROR_INSTALL_UI_FAILURE";
+    case ERROR_INSTALL_LOG_FAILURE: return "ERROR_INSTALL_LOG_FAILURE";
+    case ERROR_INSTALL_LANGUAGE_UNSUPPORTED: return "ERROR_INSTALL_LANGUAGE_UNSUPPORTED";
+    case ERROR_INSTALL_TRANSFORM_FAILURE: return "ERROR_INSTALL_TRANSFORM_FAILURE";
+    case ERROR_INSTALL_PACKAGE_REJECTED: return "ERROR_INSTALL_PACKAGE_REJECTED";
+    case ERROR_FUNCTION_NOT_CALLED: return "ERROR_FUNCTION_NOT_CALLED";
+    case ERROR_FUNCTION_FAILED: return "ERROR_FUNCTION_FAILED";
+    case ERROR_INVALID_TABLE: return "ERROR_INVALID_TABLE";
+    case ERROR_DATATYPE_MISMATCH: return "ERROR_DATATYPE_MISMATCH";
+    case ERROR_UNSUPPORTED_TYPE: return "ERROR_UNSUPPORTED_TYPE";
+    case ERROR_CREATE_FAILED: return "ERROR_CREATE_FAILED";
+    case ERROR_INSTALL_TEMP_UNWRITABLE: return "ERROR_INSTALL_TEMP_UNWRITABLE";
+    case ERROR_INSTALL_PLATFORM_UNSUPPORTED: return "ERROR_INSTALL_PLATFORM_UNSUPPORTED";
+    case ERROR_INSTALL_NOTUSED: return "ERROR_INSTALL_NOTUSED";
+    case ERROR_PATCH_PACKAGE_OPEN_FAILED: return "ERROR_PATCH_PACKAGE_OPEN_FAILED";
+    case ERROR_PATCH_PACKAGE_INVALID: return "ERROR_PATCH_PACKAGE_INVALID";
+    case ERROR_PATCH_PACKAGE_UNSUPPORTED: return "ERROR_PATCH_PACKAGE_UNSUPPORTED";
+    case ERROR_PRODUCT_VERSION: return "ERROR_PRODUCT_VERSION";
+    case ERROR_INVALID_COMMAND_LINE: return "ERROR_INVALID_COMMAND_LINE";
+    case ERROR_INSTALL_REMOTE_DISALLOWED: return "ERROR_INSTALL_REMOTE_DISALLOWED";
+    case ERROR_SUCCESS_REBOOT_INITIATED: return "ERROR_SUCCESS_REBOOT_INITIATED";
+    case ERROR_PATCH_TARGET_NOT_FOUND: return "ERROR_PATCH_TARGET_NOT_FOUND";
+    case ERROR_PATCH_PACKAGE_REJECTED: return "ERROR_PATCH_PACKAGE_REJECTED";
+    case ERROR_INSTALL_TRANSFORM_REJECTED: return "ERROR_INSTALL_TRANSFORM_REJECTED";
+    case ERROR_INSTALL_REMOTE_PROHIBITED: return "ERROR_INSTALL_REMOTE_PROHIBITED";
+    case ERROR_INVALID_USER_BUFFER: return "ERROR_INVALID_USER_BUFFER";
+    case ERROR_UNRECOGNIZED_MEDIA: return "ERROR_UNRECOGNIZED_MEDIA";
+    case ERROR_NO_TRUST_LSA_SECRET: return "ERROR_NO_TRUST_LSA_SECRET";
+    case ERROR_NO_TRUST_SAM_ACCOUNT: return "ERROR_NO_TRUST_SAM_ACCOUNT";
+    case ERROR_TRUSTED_DOMAIN_FAILURE: return "ERROR_TRUSTED_DOMAIN_FAILURE";
+    case ERROR_TRUSTED_RELATIONSHIP_FAILURE: return "ERROR_TRUSTED_RELATIONSHIP_FAILURE";
+    case ERROR_TRUST_FAILURE: return "ERROR_TRUST_FAILURE";
+    case ERROR_NETLOGON_NOT_STARTED: return "ERROR_NETLOGON_NOT_STARTED";
+    case ERROR_ACCOUNT_EXPIRED: return "ERROR_ACCOUNT_EXPIRED";
+    case ERROR_REDIRECTOR_HAS_OPEN_HANDLES: return "ERROR_REDIRECTOR_HAS_OPEN_HANDLES";
+    case ERROR_PRINTER_DRIVER_ALREADY_INSTALLED: return "ERROR_PRINTER_DRIVER_ALREADY_INSTALLED";
+    case ERROR_UNKNOWN_PORT: return "ERROR_UNKNOWN_PORT";
+    case ERROR_UNKNOWN_PRINTER_DRIVER: return "ERROR_UNKNOWN_PRINTER_DRIVER";
+    case ERROR_UNKNOWN_PRINTPROCESSOR: return "ERROR_UNKNOWN_PRINTPROCESSOR";
+    case ERROR_INVALID_SEPARATOR_FILE: return "ERROR_INVALID_SEPARATOR_FILE";
+    case ERROR_INVALID_PRIORITY: return "ERROR_INVALID_PRIORITY";
+    case ERROR_INVALID_PRINTER_NAME: return "ERROR_INVALID_PRINTER_NAME";
+    case ERROR_PRINTER_ALREADY_EXISTS: return "ERROR_PRINTER_ALREADY_EXISTS";
+    case ERROR_INVALID_PRINTER_COMMAND: return "ERROR_INVALID_PRINTER_COMMAND";
+    case ERROR_INVALID_DATATYPE: return "ERROR_INVALID_DATATYPE";
+    case ERROR_INVALID_ENVIRONMENT: return "ERROR_INVALID_ENVIRONMENT";
+    case ERROR_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT: return "ERROR_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT";
+    case ERROR_NOLOGON_WORKSTATION_TRUST_ACCOUNT: return "ERROR_NOLOGON_WORKSTATION_TRUST_ACCOUNT";
+    case ERROR_NOLOGON_SERVER_TRUST_ACCOUNT: return "ERROR_NOLOGON_SERVER_TRUST_ACCOUNT";
+    case ERROR_DOMAIN_TRUST_INCONSISTENT: return "ERROR_DOMAIN_TRUST_INCONSISTENT";
+    case ERROR_SERVER_HAS_OPEN_HANDLES: return "ERROR_SERVER_HAS_OPEN_HANDLES";
+    case ERROR_RESOURCE_DATA_NOT_FOUND: return "ERROR_RESOURCE_DATA_NOT_FOUND";
+    case ERROR_RESOURCE_TYPE_NOT_FOUND: return "ERROR_RESOURCE_TYPE_NOT_FOUND";
+    case ERROR_RESOURCE_NAME_NOT_FOUND: return "ERROR_RESOURCE_NAME_NOT_FOUND";
+    case ERROR_RESOURCE_LANG_NOT_FOUND: return "ERROR_RESOURCE_LANG_NOT_FOUND";
+    case ERROR_NOT_ENOUGH_QUOTA: return "ERROR_NOT_ENOUGH_QUOTA";
+    case ERROR_INVALID_TIME: return "ERROR_INVALID_TIME";
+    case ERROR_INVALID_FORM_NAME: return "ERROR_INVALID_FORM_NAME";
+    case ERROR_INVALID_FORM_SIZE: return "ERROR_INVALID_FORM_SIZE";
+    case ERROR_ALREADY_WAITING: return "ERROR_ALREADY_WAITING";
+    case ERROR_PRINTER_DELETED: return "ERROR_PRINTER_DELETED";
+    case ERROR_INVALID_PRINTER_STATE: return "ERROR_INVALID_PRINTER_STATE";
+    case ERROR_PASSWORD_MUST_CHANGE: return "ERROR_PASSWORD_MUST_CHANGE";
+    case ERROR_DOMAIN_CONTROLLER_NOT_FOUND: return "ERROR_DOMAIN_CONTROLLER_NOT_FOUND";
+    case ERROR_ACCOUNT_LOCKED_OUT: return "ERROR_ACCOUNT_LOCKED_OUT";
+    case ERROR_NO_SITENAME: return "ERROR_NO_SITENAME";
+    case ERROR_CANT_ACCESS_FILE: return "ERROR_CANT_ACCESS_FILE";
+    case ERROR_CANT_RESOLVE_FILENAME: return "ERROR_CANT_RESOLVE_FILENAME";
+    case ERROR_KM_DRIVER_BLOCKED: return "ERROR_KM_DRIVER_BLOCKED";
+    case ERROR_CONTEXT_EXPIRED: return "ERROR_CONTEXT_EXPIRED";
+    case ERROR_PER_USER_TRUST_QUOTA_EXCEEDED: return "ERROR_PER_USER_TRUST_QUOTA_EXCEEDED";
+    case ERROR_ALL_USER_TRUST_QUOTA_EXCEEDED: return "ERROR_ALL_USER_TRUST_QUOTA_EXCEEDED";
+    case ERROR_USER_DELETE_TRUST_QUOTA_EXCEEDED: return "ERROR_USER_DELETE_TRUST_QUOTA_EXCEEDED";
+    case ERROR_AUTHENTICATION_FIREWALL_FAILED: return "ERROR_AUTHENTICATION_FIREWALL_FAILED";
+    case ERROR_REMOTE_PRINT_CONNECTIONS_BLOCKED: return "ERROR_REMOTE_PRINT_CONNECTIONS_BLOCKED";
+    case ERROR_INVALID_PIXEL_FORMAT: return "ERROR_INVALID_PIXEL_FORMAT";
+    case ERROR_BAD_DRIVER: return "ERROR_BAD_DRIVER";
+    case ERROR_INVALID_WINDOW_STYLE: return "ERROR_INVALID_WINDOW_STYLE";
+    case ERROR_METAFILE_NOT_SUPPORTED: return "ERROR_METAFILE_NOT_SUPPORTED";
+    case ERROR_TRANSFORM_NOT_SUPPORTED: return "ERROR_TRANSFORM_NOT_SUPPORTED";
+    case ERROR_CLIPPING_NOT_SUPPORTED: return "ERROR_CLIPPING_NOT_SUPPORTED";
+    case ERROR_INVALID_CMM: return "ERROR_INVALID_CMM";
+    case ERROR_INVALID_PROFILE: return "ERROR_INVALID_PROFILE";
+    case ERROR_TAG_NOT_FOUND: return "ERROR_TAG_NOT_FOUND";
+    case ERROR_TAG_NOT_PRESENT: return "ERROR_TAG_NOT_PRESENT";
+    case ERROR_DUPLICATE_TAG: return "ERROR_DUPLICATE_TAG";
+    case ERROR_PROFILE_NOT_ASSOCIATED_WITH_DEVICE: return "ERROR_PROFILE_NOT_ASSOCIATED_WITH_DEVICE";
+    case ERROR_PROFILE_NOT_FOUND: return "ERROR_PROFILE_NOT_FOUND";
+    case ERROR_INVALID_COLORSPACE: return "ERROR_INVALID_COLORSPACE";
+    case ERROR_ICM_NOT_ENABLED: return "ERROR_ICM_NOT_ENABLED";
+    case ERROR_DELETING_ICM_XFORM: return "ERROR_DELETING_ICM_XFORM";
+    case ERROR_INVALID_TRANSFORM: return "ERROR_INVALID_TRANSFORM";
+    case ERROR_COLORSPACE_MISMATCH: return "ERROR_COLORSPACE_MISMATCH";
+    case ERROR_INVALID_COLORINDEX: return "ERROR_INVALID_COLORINDEX";
+    case ERROR_CONNECTED_OTHER_PASSWORD: return "ERROR_CONNECTED_OTHER_PASSWORD";
+    case ERROR_CONNECTED_OTHER_PASSWORD_DEFAULT: return "ERROR_CONNECTED_OTHER_PASSWORD_DEFAULT";
+    case ERROR_BAD_USERNAME: return "ERROR_BAD_USERNAME";
+    case ERROR_NOT_CONNECTED: return "ERROR_NOT_CONNECTED";
+    case ERROR_OPEN_FILES: return "ERROR_OPEN_FILES";
+    case ERROR_ACTIVE_CONNECTIONS: return "ERROR_ACTIVE_CONNECTIONS";
+    case ERROR_DEVICE_IN_USE: return "ERROR_DEVICE_IN_USE";
+    case ERROR_UNKNOWN_PRINT_MONITOR: return "ERROR_UNKNOWN_PRINT_MONITOR";
+    case ERROR_PRINTER_DRIVER_IN_USE: return "ERROR_PRINTER_DRIVER_IN_USE";
+    case ERROR_SPOOL_FILE_NOT_FOUND: return "ERROR_SPOOL_FILE_NOT_FOUND";
+    case ERROR_SPL_NO_STARTDOC: return "ERROR_SPL_NO_STARTDOC";
+    case ERROR_SPL_NO_ADDJOB: return "ERROR_SPL_NO_ADDJOB";
+    case ERROR_PRINT_PROCESSOR_ALREADY_INSTALLED: return "ERROR_PRINT_PROCESSOR_ALREADY_INSTALLED";
+    case ERROR_PRINT_MONITOR_ALREADY_INSTALLED: return "ERROR_PRINT_MONITOR_ALREADY_INSTALLED";
+    case ERROR_INVALID_PRINT_MONITOR: return "ERROR_INVALID_PRINT_MONITOR";
+    case ERROR_PRINT_MONITOR_IN_USE: return "ERROR_PRINT_MONITOR_IN_USE";
+    case ERROR_PRINTER_HAS_JOBS_QUEUED: return "ERROR_PRINTER_HAS_JOBS_QUEUED";
+    case ERROR_SUCCESS_REBOOT_REQUIRED: return "ERROR_SUCCESS_REBOOT_REQUIRED";
+    case ERROR_SUCCESS_RESTART_REQUIRED: return "ERROR_SUCCESS_RESTART_REQUIRED";
+    case ERROR_PRINTER_NOT_FOUND: return "ERROR_PRINTER_NOT_FOUND";
+    case ERROR_PRINTER_DRIVER_WARNED: return "ERROR_PRINTER_DRIVER_WARNED";
+    case ERROR_PRINTER_DRIVER_BLOCKED: return "ERROR_PRINTER_DRIVER_BLOCKED";
+    case ERROR_WINS_INTERNAL: return "ERROR_WINS_INTERNAL";
+    case ERROR_CAN_NOT_DEL_LOCAL_WINS: return "ERROR_CAN_NOT_DEL_LOCAL_WINS";
+    case ERROR_STATIC_INIT: return "ERROR_STATIC_INIT";
+    case ERROR_INC_BACKUP: return "ERROR_INC_BACKUP";
+    case ERROR_FULL_BACKUP: return "ERROR_FULL_BACKUP";
+    case ERROR_REC_NON_EXISTENT: return "ERROR_REC_NON_EXISTENT";
+    case ERROR_RPL_NOT_ALLOWED: return "ERROR_RPL_NOT_ALLOWED";
+    case ERROR_DHCP_ADDRESS_CONFLICT: return "ERROR_DHCP_ADDRESS_CONFLICT";
+    case ERROR_WMI_GUID_NOT_FOUND: return "ERROR_WMI_GUID_NOT_FOUND";
+    case ERROR_WMI_INSTANCE_NOT_FOUND: return "ERROR_WMI_INSTANCE_NOT_FOUND";
+    case ERROR_WMI_ITEMID_NOT_FOUND: return "ERROR_WMI_ITEMID_NOT_FOUND";
+    case ERROR_WMI_TRY_AGAIN: return "ERROR_WMI_TRY_AGAIN";
+    case ERROR_WMI_DP_NOT_FOUND: return "ERROR_WMI_DP_NOT_FOUND";
+    case ERROR_WMI_UNRESOLVED_INSTANCE_REF: return "ERROR_WMI_UNRESOLVED_INSTANCE_REF";
+    case ERROR_WMI_ALREADY_ENABLED: return "ERROR_WMI_ALREADY_ENABLED";
+    case ERROR_WMI_GUID_DISCONNECTED: return "ERROR_WMI_GUID_DISCONNECTED";
+    case ERROR_WMI_SERVER_UNAVAILABLE: return "ERROR_WMI_SERVER_UNAVAILABLE";
+    case ERROR_WMI_DP_FAILED: return "ERROR_WMI_DP_FAILED";
+    case ERROR_WMI_INVALID_MOF: return "ERROR_WMI_INVALID_MOF";
+    case ERROR_WMI_INVALID_REGINFO: return "ERROR_WMI_INVALID_REGINFO";
+    case ERROR_WMI_ALREADY_DISABLED: return "ERROR_WMI_ALREADY_DISABLED";
+    case ERROR_WMI_READ_ONLY: return "ERROR_WMI_READ_ONLY";
+    case ERROR_WMI_SET_FAILURE: return "ERROR_WMI_SET_FAILURE";
+    case ERROR_INVALID_MEDIA: return "ERROR_INVALID_MEDIA";
+    case ERROR_INVALID_LIBRARY: return "ERROR_INVALID_LIBRARY";
+    case ERROR_INVALID_MEDIA_POOL: return "ERROR_INVALID_MEDIA_POOL";
+    case ERROR_DRIVE_MEDIA_MISMATCH: return "ERROR_DRIVE_MEDIA_MISMATCH";
+    case ERROR_MEDIA_OFFLINE: return "ERROR_MEDIA_OFFLINE";
+    case ERROR_LIBRARY_OFFLINE: return "ERROR_LIBRARY_OFFLINE";
+    case ERROR_EMPTY: return "ERROR_EMPTY";
+    case ERROR_NOT_EMPTY: return "ERROR_NOT_EMPTY";
+    case ERROR_MEDIA_UNAVAILABLE: return "ERROR_MEDIA_UNAVAILABLE";
+    case ERROR_RESOURCE_DISABLED: return "ERROR_RESOURCE_DISABLED";
+    case ERROR_INVALID_CLEANER: return "ERROR_INVALID_CLEANER";
+    case ERROR_UNABLE_TO_CLEAN: return "ERROR_UNABLE_TO_CLEAN";
+    case ERROR_OBJECT_NOT_FOUND: return "ERROR_OBJECT_NOT_FOUND";
+    case ERROR_DATABASE_FAILURE: return "ERROR_DATABASE_FAILURE";
+    case ERROR_DATABASE_FULL: return "ERROR_DATABASE_FULL";
+    case ERROR_MEDIA_INCOMPATIBLE: return "ERROR_MEDIA_INCOMPATIBLE";
+    case ERROR_RESOURCE_NOT_PRESENT: return "ERROR_RESOURCE_NOT_PRESENT";
+    case ERROR_INVALID_OPERATION: return "ERROR_INVALID_OPERATION";
+    case ERROR_MEDIA_NOT_AVAILABLE: return "ERROR_MEDIA_NOT_AVAILABLE";
+    case ERROR_DEVICE_NOT_AVAILABLE: return "ERROR_DEVICE_NOT_AVAILABLE";
+    case ERROR_REQUEST_REFUSED: return "ERROR_REQUEST_REFUSED";
+    case ERROR_INVALID_DRIVE_OBJECT: return "ERROR_INVALID_DRIVE_OBJECT";
+    case ERROR_LIBRARY_FULL: return "ERROR_LIBRARY_FULL";
+    case ERROR_MEDIUM_NOT_ACCESSIBLE: return "ERROR_MEDIUM_NOT_ACCESSIBLE";
+    case ERROR_UNABLE_TO_LOAD_MEDIUM: return "ERROR_UNABLE_TO_LOAD_MEDIUM";
+    case ERROR_UNABLE_TO_INVENTORY_DRIVE: return "ERROR_UNABLE_TO_INVENTORY_DRIVE";
+    case ERROR_UNABLE_TO_INVENTORY_SLOT: return "ERROR_UNABLE_TO_INVENTORY_SLOT";
+    case ERROR_UNABLE_TO_INVENTORY_TRANSPORT: return "ERROR_UNABLE_TO_INVENTORY_TRANSPORT";
+    case ERROR_TRANSPORT_FULL: return "ERROR_TRANSPORT_FULL";
+    case ERROR_CONTROLLING_IEPORT: return "ERROR_CONTROLLING_IEPORT";
+    case ERROR_UNABLE_TO_EJECT_MOUNTED_MEDIA: return "ERROR_UNABLE_TO_EJECT_MOUNTED_MEDIA";
+    case ERROR_CLEANER_SLOT_SET: return "ERROR_CLEANER_SLOT_SET";
+    case ERROR_CLEANER_SLOT_NOT_SET: return "ERROR_CLEANER_SLOT_NOT_SET";
+    case ERROR_CLEANER_CARTRIDGE_SPENT: return "ERROR_CLEANER_CARTRIDGE_SPENT";
+    case ERROR_UNEXPECTED_OMID: return "ERROR_UNEXPECTED_OMID";
+    case ERROR_CANT_DELETE_LAST_ITEM: return "ERROR_CANT_DELETE_LAST_ITEM";
+    case ERROR_MESSAGE_EXCEEDS_MAX_SIZE: return "ERROR_MESSAGE_EXCEEDS_MAX_SIZE";
+    case ERROR_VOLUME_CONTAINS_SYS_FILES: return "ERROR_VOLUME_CONTAINS_SYS_FILES";
+    case ERROR_INDIGENOUS_TYPE: return "ERROR_INDIGENOUS_TYPE";
+    case ERROR_NO_SUPPORTING_DRIVES: return "ERROR_NO_SUPPORTING_DRIVES";
+    case ERROR_CLEANER_CARTRIDGE_INSTALLED: return "ERROR_CLEANER_CARTRIDGE_INSTALLED";
+    case ERROR_IEPORT_FULL: return "ERROR_IEPORT_FULL";
+    case ERROR_FILE_OFFLINE: return "ERROR_FILE_OFFLINE";
+    case ERROR_REMOTE_STORAGE_NOT_ACTIVE: return "ERROR_REMOTE_STORAGE_NOT_ACTIVE";
+    case ERROR_REMOTE_STORAGE_MEDIA_ERROR: return "ERROR_REMOTE_STORAGE_MEDIA_ERROR";
+    case ERROR_NOT_A_REPARSE_POINT: return "ERROR_NOT_A_REPARSE_POINT";
+    case ERROR_REPARSE_ATTRIBUTE_CONFLICT: return "ERROR_REPARSE_ATTRIBUTE_CONFLICT";
+    case ERROR_INVALID_REPARSE_DATA: return "ERROR_INVALID_REPARSE_DATA";
+    case ERROR_REPARSE_TAG_INVALID: return "ERROR_REPARSE_TAG_INVALID";
+    case ERROR_REPARSE_TAG_MISMATCH: return "ERROR_REPARSE_TAG_MISMATCH";
+    case ERROR_VOLUME_NOT_SIS_ENABLED: return "ERROR_VOLUME_NOT_SIS_ENABLED";
+    case ERROR_DEPENDENT_RESOURCE_EXISTS: return "ERROR_DEPENDENT_RESOURCE_EXISTS";
+    case ERROR_DEPENDENCY_NOT_FOUND: return "ERROR_DEPENDENCY_NOT_FOUND";
+    case ERROR_DEPENDENCY_ALREADY_EXISTS: return "ERROR_DEPENDENCY_ALREADY_EXISTS";
+    case ERROR_RESOURCE_NOT_ONLINE: return "ERROR_RESOURCE_NOT_ONLINE";
+    case ERROR_HOST_NODE_NOT_AVAILABLE: return "ERROR_HOST_NODE_NOT_AVAILABLE";
+    case ERROR_RESOURCE_NOT_AVAILABLE: return "ERROR_RESOURCE_NOT_AVAILABLE";
+    case ERROR_RESOURCE_NOT_FOUND: return "ERROR_RESOURCE_NOT_FOUND";
+    case ERROR_SHUTDOWN_CLUSTER: return "ERROR_SHUTDOWN_CLUSTER";
+    case ERROR_CANT_EVICT_ACTIVE_NODE: return "ERROR_CANT_EVICT_ACTIVE_NODE";
+    case ERROR_OBJECT_ALREADY_EXISTS: return "ERROR_OBJECT_ALREADY_EXISTS";
+    case ERROR_OBJECT_IN_LIST: return "ERROR_OBJECT_IN_LIST";
+    case ERROR_GROUP_NOT_AVAILABLE: return "ERROR_GROUP_NOT_AVAILABLE";
+    case ERROR_GROUP_NOT_FOUND: return "ERROR_GROUP_NOT_FOUND";
+    case ERROR_GROUP_NOT_ONLINE: return "ERROR_GROUP_NOT_ONLINE";
+    case ERROR_HOST_NODE_NOT_RESOURCE_OWNER: return "ERROR_HOST_NODE_NOT_RESOURCE_OWNER";
+    case ERROR_HOST_NODE_NOT_GROUP_OWNER: return "ERROR_HOST_NODE_NOT_GROUP_OWNER";
+    case ERROR_RESMON_CREATE_FAILED: return "ERROR_RESMON_CREATE_FAILED";
+    case ERROR_RESMON_ONLINE_FAILED: return "ERROR_RESMON_ONLINE_FAILED";
+    case ERROR_RESOURCE_ONLINE: return "ERROR_RESOURCE_ONLINE";
+    case ERROR_QUORUM_RESOURCE: return "ERROR_QUORUM_RESOURCE";
+    case ERROR_NOT_QUORUM_CAPABLE: return "ERROR_NOT_QUORUM_CAPABLE";
+    case ERROR_CLUSTER_SHUTTING_DOWN: return "ERROR_CLUSTER_SHUTTING_DOWN";
+    case ERROR_INVALID_STATE: return "ERROR_INVALID_STATE";
+    case ERROR_RESOURCE_PROPERTIES_STORED: return "ERROR_RESOURCE_PROPERTIES_STORED";
+    case ERROR_NOT_QUORUM_CLASS: return "ERROR_NOT_QUORUM_CLASS";
+    case ERROR_CORE_RESOURCE: return "ERROR_CORE_RESOURCE";
+    case ERROR_QUORUM_RESOURCE_ONLINE_FAILED: return "ERROR_QUORUM_RESOURCE_ONLINE_FAILED";
+    case ERROR_QUORUMLOG_OPEN_FAILED: return "ERROR_QUORUMLOG_OPEN_FAILED";
+    case ERROR_CLUSTERLOG_CORRUPT: return "ERROR_CLUSTERLOG_CORRUPT";
+    case ERROR_CLUSTERLOG_RECORD_EXCEEDS_MAXSIZE: return "ERROR_CLUSTERLOG_RECORD_EXCEEDS_MAXSIZE";
+    case ERROR_CLUSTERLOG_EXCEEDS_MAXSIZE: return "ERROR_CLUSTERLOG_EXCEEDS_MAXSIZE";
+    case ERROR_CLUSTERLOG_CHKPOINT_NOT_FOUND: return "ERROR_CLUSTERLOG_CHKPOINT_NOT_FOUND";
+    case ERROR_CLUSTERLOG_NOT_ENOUGH_SPACE: return "ERROR_CLUSTERLOG_NOT_ENOUGH_SPACE";
+    case ERROR_QUORUM_OWNER_ALIVE: return "ERROR_QUORUM_OWNER_ALIVE";
+    case ERROR_NETWORK_NOT_AVAILABLE: return "ERROR_NETWORK_NOT_AVAILABLE";
+    case ERROR_NODE_NOT_AVAILABLE: return "ERROR_NODE_NOT_AVAILABLE";
+    case ERROR_ALL_NODES_NOT_AVAILABLE: return "ERROR_ALL_NODES_NOT_AVAILABLE";
+    case ERROR_RESOURCE_FAILED: return "ERROR_RESOURCE_FAILED";
+    case ERROR_CLUSTER_INVALID_NODE: return "ERROR_CLUSTER_INVALID_NODE";
+    case ERROR_CLUSTER_NODE_EXISTS: return "ERROR_CLUSTER_NODE_EXISTS";
+    case ERROR_CLUSTER_JOIN_IN_PROGRESS: return "ERROR_CLUSTER_JOIN_IN_PROGRESS";
+    case ERROR_CLUSTER_NODE_NOT_FOUND: return "ERROR_CLUSTER_NODE_NOT_FOUND";
+    case ERROR_CLUSTER_LOCAL_NODE_NOT_FOUND: return "ERROR_CLUSTER_LOCAL_NODE_NOT_FOUND";
+    case ERROR_CLUSTER_NETWORK_EXISTS: return "ERROR_CLUSTER_NETWORK_EXISTS";
+    case ERROR_CLUSTER_NETWORK_NOT_FOUND: return "ERROR_CLUSTER_NETWORK_NOT_FOUND";
+    case ERROR_CLUSTER_NETINTERFACE_EXISTS: return "ERROR_CLUSTER_NETINTERFACE_EXISTS";
+    case ERROR_CLUSTER_NETINTERFACE_NOT_FOUND: return "ERROR_CLUSTER_NETINTERFACE_NOT_FOUND";
+    case ERROR_CLUSTER_INVALID_REQUEST: return "ERROR_CLUSTER_INVALID_REQUEST";
+    case ERROR_CLUSTER_INVALID_NETWORK_PROVIDER: return "ERROR_CLUSTER_INVALID_NETWORK_PROVIDER";
+    case ERROR_CLUSTER_NODE_DOWN: return "ERROR_CLUSTER_NODE_DOWN";
+    case ERROR_CLUSTER_NODE_UNREACHABLE: return "ERROR_CLUSTER_NODE_UNREACHABLE";
+    case ERROR_CLUSTER_NODE_NOT_MEMBER: return "ERROR_CLUSTER_NODE_NOT_MEMBER";
+    case ERROR_CLUSTER_JOIN_NOT_IN_PROGRESS: return "ERROR_CLUSTER_JOIN_NOT_IN_PROGRESS";
+    case ERROR_CLUSTER_INVALID_NETWORK: return "ERROR_CLUSTER_INVALID_NETWORK";
+    case ERROR_CLUSTER_NODE_UP: return "ERROR_CLUSTER_NODE_UP";
+    case ERROR_CLUSTER_IPADDR_IN_USE: return "ERROR_CLUSTER_IPADDR_IN_USE";
+    case ERROR_CLUSTER_NODE_NOT_PAUSED: return "ERROR_CLUSTER_NODE_NOT_PAUSED";
+    case ERROR_CLUSTER_NO_SECURITY_CONTEXT: return "ERROR_CLUSTER_NO_SECURITY_CONTEXT";
+    case ERROR_CLUSTER_NETWORK_NOT_INTERNAL: return "ERROR_CLUSTER_NETWORK_NOT_INTERNAL";
+    case ERROR_CLUSTER_NODE_ALREADY_UP: return "ERROR_CLUSTER_NODE_ALREADY_UP";
+    case ERROR_CLUSTER_NODE_ALREADY_DOWN: return "ERROR_CLUSTER_NODE_ALREADY_DOWN";
+    case ERROR_CLUSTER_NETWORK_ALREADY_ONLINE: return "ERROR_CLUSTER_NETWORK_ALREADY_ONLINE";
+    case ERROR_CLUSTER_NETWORK_ALREADY_OFFLINE: return "ERROR_CLUSTER_NETWORK_ALREADY_OFFLINE";
+    case ERROR_CLUSTER_NODE_ALREADY_MEMBER: return "ERROR_CLUSTER_NODE_ALREADY_MEMBER";
+    case ERROR_CLUSTER_LAST_INTERNAL_NETWORK: return "ERROR_CLUSTER_LAST_INTERNAL_NETWORK";
+    case ERROR_CLUSTER_NETWORK_HAS_DEPENDENTS: return "ERROR_CLUSTER_NETWORK_HAS_DEPENDENTS";
+    case ERROR_INVALID_OPERATION_ON_QUORUM: return "ERROR_INVALID_OPERATION_ON_QUORUM";
+    case ERROR_DEPENDENCY_NOT_ALLOWED: return "ERROR_DEPENDENCY_NOT_ALLOWED";
+    case ERROR_CLUSTER_NODE_PAUSED: return "ERROR_CLUSTER_NODE_PAUSED";
+    case ERROR_NODE_CANT_HOST_RESOURCE: return "ERROR_NODE_CANT_HOST_RESOURCE";
+    case ERROR_CLUSTER_NODE_NOT_READY: return "ERROR_CLUSTER_NODE_NOT_READY";
+    case ERROR_CLUSTER_NODE_SHUTTING_DOWN: return "ERROR_CLUSTER_NODE_SHUTTING_DOWN";
+    case ERROR_CLUSTER_JOIN_ABORTED: return "ERROR_CLUSTER_JOIN_ABORTED";
+    case ERROR_CLUSTER_INCOMPATIBLE_VERSIONS: return "ERROR_CLUSTER_INCOMPATIBLE_VERSIONS";
+    case ERROR_CLUSTER_MAXNUM_OF_RESOURCES_EXCEEDED: return "ERROR_CLUSTER_MAXNUM_OF_RESOURCES_EXCEEDED";
+    case ERROR_CLUSTER_SYSTEM_CONFIG_CHANGED: return "ERROR_CLUSTER_SYSTEM_CONFIG_CHANGED";
+    case ERROR_CLUSTER_RESOURCE_TYPE_NOT_FOUND: return "ERROR_CLUSTER_RESOURCE_TYPE_NOT_FOUND";
+    case ERROR_CLUSTER_RESTYPE_NOT_SUPPORTED: return "ERROR_CLUSTER_RESTYPE_NOT_SUPPORTED";
+    case ERROR_CLUSTER_RESNAME_NOT_FOUND: return "ERROR_CLUSTER_RESNAME_NOT_FOUND";
+    case ERROR_CLUSTER_NO_RPC_PACKAGES_REGISTERED: return "ERROR_CLUSTER_NO_RPC_PACKAGES_REGISTERED";
+    case ERROR_CLUSTER_OWNER_NOT_IN_PREFLIST: return "ERROR_CLUSTER_OWNER_NOT_IN_PREFLIST";
+    case ERROR_CLUSTER_DATABASE_SEQMISMATCH: return "ERROR_CLUSTER_DATABASE_SEQMISMATCH";
+    case ERROR_RESMON_INVALID_STATE: return "ERROR_RESMON_INVALID_STATE";
+    case ERROR_CLUSTER_GUM_NOT_LOCKER: return "ERROR_CLUSTER_GUM_NOT_LOCKER";
+    case ERROR_QUORUM_DISK_NOT_FOUND: return "ERROR_QUORUM_DISK_NOT_FOUND";
+    case ERROR_DATABASE_BACKUP_CORRUPT: return "ERROR_DATABASE_BACKUP_CORRUPT";
+    case ERROR_CLUSTER_NODE_ALREADY_HAS_DFS_ROOT: return "ERROR_CLUSTER_NODE_ALREADY_HAS_DFS_ROOT";
+    case ERROR_RESOURCE_PROPERTY_UNCHANGEABLE: return "ERROR_RESOURCE_PROPERTY_UNCHANGEABLE";
+    case ERROR_CLUSTER_MEMBERSHIP_INVALID_STATE: return "ERROR_CLUSTER_MEMBERSHIP_INVALID_STATE";
+    case ERROR_CLUSTER_QUORUMLOG_NOT_FOUND: return "ERROR_CLUSTER_QUORUMLOG_NOT_FOUND";
+    case ERROR_CLUSTER_MEMBERSHIP_HALT: return "ERROR_CLUSTER_MEMBERSHIP_HALT";
+    case ERROR_CLUSTER_INSTANCE_ID_MISMATCH: return "ERROR_CLUSTER_INSTANCE_ID_MISMATCH";
+    case ERROR_CLUSTER_NETWORK_NOT_FOUND_FOR_IP: return "ERROR_CLUSTER_NETWORK_NOT_FOUND_FOR_IP";
+    case ERROR_CLUSTER_PROPERTY_DATA_TYPE_MISMATCH: return "ERROR_CLUSTER_PROPERTY_DATA_TYPE_MISMATCH";
+    case ERROR_CLUSTER_EVICT_WITHOUT_CLEANUP: return "ERROR_CLUSTER_EVICT_WITHOUT_CLEANUP";
+    case ERROR_CLUSTER_PARAMETER_MISMATCH: return "ERROR_CLUSTER_PARAMETER_MISMATCH";
+    case ERROR_NODE_CANNOT_BE_CLUSTERED: return "ERROR_NODE_CANNOT_BE_CLUSTERED";
+    case ERROR_CLUSTER_WRONG_OS_VERSION: return "ERROR_CLUSTER_WRONG_OS_VERSION";
+    case ERROR_CLUSTER_CANT_CREATE_DUP_CLUSTER_NAME: return "ERROR_CLUSTER_CANT_CREATE_DUP_CLUSTER_NAME";
+    case ERROR_CLUSCFG_ALREADY_COMMITTED: return "ERROR_CLUSCFG_ALREADY_COMMITTED";
+    case ERROR_CLUSCFG_ROLLBACK_FAILED: return "ERROR_CLUSCFG_ROLLBACK_FAILED";
+    case ERROR_CLUSCFG_SYSTEM_DISK_DRIVE_LETTER_CONFLICT: return "ERROR_CLUSCFG_SYSTEM_DISK_DRIVE_LETTER_CONFLICT";
+    case ERROR_CLUSTER_OLD_VERSION: return "ERROR_CLUSTER_OLD_VERSION";
+    case ERROR_CLUSTER_MISMATCHED_COMPUTER_ACCT_NAME: return "ERROR_CLUSTER_MISMATCHED_COMPUTER_ACCT_NAME";
+    case ERROR_ENCRYPTION_FAILED: return "ERROR_ENCRYPTION_FAILED";
+    case ERROR_DECRYPTION_FAILED: return "ERROR_DECRYPTION_FAILED";
+    case ERROR_FILE_ENCRYPTED: return "ERROR_FILE_ENCRYPTED";
+    case ERROR_NO_RECOVERY_POLICY: return "ERROR_NO_RECOVERY_POLICY";
+    case ERROR_NO_EFS: return "ERROR_NO_EFS";
+    case ERROR_WRONG_EFS: return "ERROR_WRONG_EFS";
+    case ERROR_NO_USER_KEYS: return "ERROR_NO_USER_KEYS";
+    case ERROR_FILE_NOT_ENCRYPTED: return "ERROR_FILE_NOT_ENCRYPTED";
+    case ERROR_NOT_EXPORT_FORMAT: return "ERROR_NOT_EXPORT_FORMAT";
+    case ERROR_FILE_READ_ONLY: return "ERROR_FILE_READ_ONLY";
+    case ERROR_DIR_EFS_DISALLOWED: return "ERROR_DIR_EFS_DISALLOWED";
+    case ERROR_EFS_SERVER_NOT_TRUSTED: return "ERROR_EFS_SERVER_NOT_TRUSTED";
+    case ERROR_BAD_RECOVERY_POLICY: return "ERROR_BAD_RECOVERY_POLICY";
+    case ERROR_EFS_ALG_BLOB_TOO_BIG: return "ERROR_EFS_ALG_BLOB_TOO_BIG";
+    case ERROR_VOLUME_NOT_SUPPORT_EFS: return "ERROR_VOLUME_NOT_SUPPORT_EFS";
+    case ERROR_EFS_DISABLED: return "ERROR_EFS_DISABLED";
+    case ERROR_EFS_VERSION_NOT_SUPPORT: return "ERROR_EFS_VERSION_NOT_SUPPORT";
+    case ERROR_NO_BROWSER_SERVERS_FOUND: return "ERROR_NO_BROWSER_SERVERS_FOUND";
+    case ERROR_CTX_WINSTATION_NAME_INVALID: return "ERROR_CTX_WINSTATION_NAME_INVALID";
+    case ERROR_CTX_INVALID_PD: return "ERROR_CTX_INVALID_PD";
+    case ERROR_CTX_PD_NOT_FOUND: return "ERROR_CTX_PD_NOT_FOUND";
+    case ERROR_CTX_WD_NOT_FOUND: return "ERROR_CTX_WD_NOT_FOUND";
+    case ERROR_CTX_CANNOT_MAKE_EVENTLOG_ENTRY: return "ERROR_CTX_CANNOT_MAKE_EVENTLOG_ENTRY";
+    case ERROR_CTX_SERVICE_NAME_COLLISION: return "ERROR_CTX_SERVICE_NAME_COLLISION";
+    case ERROR_CTX_CLOSE_PENDING: return "ERROR_CTX_CLOSE_PENDING";
+    case ERROR_CTX_NO_OUTBUF: return "ERROR_CTX_NO_OUTBUF";
+    case ERROR_CTX_MODEM_INF_NOT_FOUND: return "ERROR_CTX_MODEM_INF_NOT_FOUND";
+    case ERROR_CTX_INVALID_MODEMNAME: return "ERROR_CTX_INVALID_MODEMNAME";
+    case ERROR_CTX_MODEM_RESPONSE_ERROR: return "ERROR_CTX_MODEM_RESPONSE_ERROR";
+    case ERROR_CTX_MODEM_RESPONSE_TIMEOUT: return "ERROR_CTX_MODEM_RESPONSE_TIMEOUT";
+    case ERROR_CTX_MODEM_RESPONSE_NO_CARRIER: return "ERROR_CTX_MODEM_RESPONSE_NO_CARRIER";
+    case ERROR_CTX_MODEM_RESPONSE_NO_DIALTONE: return "ERROR_CTX_MODEM_RESPONSE_NO_DIALTONE";
+    case ERROR_CTX_MODEM_RESPONSE_BUSY: return "ERROR_CTX_MODEM_RESPONSE_BUSY";
+    case ERROR_CTX_MODEM_RESPONSE_VOICE: return "ERROR_CTX_MODEM_RESPONSE_VOICE";
+    case ERROR_CTX_TD_ERROR: return "ERROR_CTX_TD_ERROR";
+    case ERROR_CTX_WINSTATION_NOT_FOUND: return "ERROR_CTX_WINSTATION_NOT_FOUND";
+    case ERROR_CTX_WINSTATION_ALREADY_EXISTS: return "ERROR_CTX_WINSTATION_ALREADY_EXISTS";
+    case ERROR_CTX_WINSTATION_BUSY: return "ERROR_CTX_WINSTATION_BUSY";
+    case ERROR_CTX_BAD_VIDEO_MODE: return "ERROR_CTX_BAD_VIDEO_MODE";
+    case ERROR_CTX_GRAPHICS_INVALID: return "ERROR_CTX_GRAPHICS_INVALID";
+    case ERROR_CTX_LOGON_DISABLED: return "ERROR_CTX_LOGON_DISABLED";
+    case ERROR_CTX_NOT_CONSOLE: return "ERROR_CTX_NOT_CONSOLE";
+    case ERROR_CTX_CLIENT_QUERY_TIMEOUT: return "ERROR_CTX_CLIENT_QUERY_TIMEOUT";
+    case ERROR_CTX_CONSOLE_DISCONNECT: return "ERROR_CTX_CONSOLE_DISCONNECT";
+    case ERROR_CTX_CONSOLE_CONNECT: return "ERROR_CTX_CONSOLE_CONNECT";
+    case ERROR_CTX_SHADOW_DENIED: return "ERROR_CTX_SHADOW_DENIED";
+    case ERROR_CTX_WINSTATION_ACCESS_DENIED: return "ERROR_CTX_WINSTATION_ACCESS_DENIED";
+    case ERROR_CTX_INVALID_WD: return "ERROR_CTX_INVALID_WD";
+    case ERROR_CTX_SHADOW_INVALID: return "ERROR_CTX_SHADOW_INVALID";
+    case ERROR_CTX_SHADOW_DISABLED: return "ERROR_CTX_SHADOW_DISABLED";
+    case ERROR_CTX_CLIENT_LICENSE_IN_USE: return "ERROR_CTX_CLIENT_LICENSE_IN_USE";
+    case ERROR_CTX_CLIENT_LICENSE_NOT_SET: return "ERROR_CTX_CLIENT_LICENSE_NOT_SET";
+    case ERROR_CTX_LICENSE_NOT_AVAILABLE: return "ERROR_CTX_LICENSE_NOT_AVAILABLE";
+    case ERROR_CTX_LICENSE_CLIENT_INVALID: return "ERROR_CTX_LICENSE_CLIENT_INVALID";
+    case ERROR_CTX_LICENSE_EXPIRED: return "ERROR_CTX_LICENSE_EXPIRED";
+    case ERROR_CTX_SHADOW_NOT_RUNNING: return "ERROR_CTX_SHADOW_NOT_RUNNING";
+    case ERROR_CTX_SHADOW_ENDED_BY_MODE_CHANGE: return "ERROR_CTX_SHADOW_ENDED_BY_MODE_CHANGE";
+    case ERROR_ACTIVATION_COUNT_EXCEEDED: return "ERROR_ACTIVATION_COUNT_EXCEEDED";
+    case ERROR_DS_NOT_INSTALLED: return "ERROR_DS_NOT_INSTALLED";
+    case ERROR_DS_MEMBERSHIP_EVALUATED_LOCALLY: return "ERROR_DS_MEMBERSHIP_EVALUATED_LOCALLY";
+    case ERROR_DS_NO_ATTRIBUTE_OR_VALUE: return "ERROR_DS_NO_ATTRIBUTE_OR_VALUE";
+    case ERROR_DS_INVALID_ATTRIBUTE_SYNTAX: return "ERROR_DS_INVALID_ATTRIBUTE_SYNTAX";
+    case ERROR_DS_ATTRIBUTE_TYPE_UNDEFINED: return "ERROR_DS_ATTRIBUTE_TYPE_UNDEFINED";
+    case ERROR_DS_ATTRIBUTE_OR_VALUE_EXISTS: return "ERROR_DS_ATTRIBUTE_OR_VALUE_EXISTS";
+    case ERROR_DS_BUSY: return "ERROR_DS_BUSY";
+    case ERROR_DS_UNAVAILABLE: return "ERROR_DS_UNAVAILABLE";
+    case ERROR_DS_NO_RIDS_ALLOCATED: return "ERROR_DS_NO_RIDS_ALLOCATED";
+    case ERROR_DS_NO_MORE_RIDS: return "ERROR_DS_NO_MORE_RIDS";
+    case ERROR_DS_INCORRECT_ROLE_OWNER: return "ERROR_DS_INCORRECT_ROLE_OWNER";
+    case ERROR_DS_RIDMGR_INIT_ERROR: return "ERROR_DS_RIDMGR_INIT_ERROR";
+    case ERROR_DS_OBJ_CLASS_VIOLATION: return "ERROR_DS_OBJ_CLASS_VIOLATION";
+    case ERROR_DS_CANT_ON_NON_LEAF: return "ERROR_DS_CANT_ON_NON_LEAF";
+    case ERROR_DS_CANT_ON_RDN: return "ERROR_DS_CANT_ON_RDN";
+    case ERROR_DS_CANT_MOD_OBJ_CLASS: return "ERROR_DS_CANT_MOD_OBJ_CLASS";
+    case ERROR_DS_CROSS_DOM_MOVE_ERROR: return "ERROR_DS_CROSS_DOM_MOVE_ERROR";
+    case ERROR_DS_GC_NOT_AVAILABLE: return "ERROR_DS_GC_NOT_AVAILABLE";
+    case ERROR_SHARED_POLICY: return "ERROR_SHARED_POLICY";
+    case ERROR_POLICY_OBJECT_NOT_FOUND: return "ERROR_POLICY_OBJECT_NOT_FOUND";
+    case ERROR_POLICY_ONLY_IN_DS: return "ERROR_POLICY_ONLY_IN_DS";
+    case ERROR_PROMOTION_ACTIVE: return "ERROR_PROMOTION_ACTIVE";
+    case ERROR_NO_PROMOTION_ACTIVE: return "ERROR_NO_PROMOTION_ACTIVE";
+    case ERROR_DS_OPERATIONS_ERROR: return "ERROR_DS_OPERATIONS_ERROR";
+    case ERROR_DS_PROTOCOL_ERROR: return "ERROR_DS_PROTOCOL_ERROR";
+    case ERROR_DS_TIMELIMIT_EXCEEDED: return "ERROR_DS_TIMELIMIT_EXCEEDED";
+    case ERROR_DS_SIZELIMIT_EXCEEDED: return "ERROR_DS_SIZELIMIT_EXCEEDED";
+    case ERROR_DS_ADMIN_LIMIT_EXCEEDED: return "ERROR_DS_ADMIN_LIMIT_EXCEEDED";
+    case ERROR_DS_COMPARE_FALSE: return "ERROR_DS_COMPARE_FALSE";
+    case ERROR_DS_COMPARE_TRUE: return "ERROR_DS_COMPARE_TRUE";
+    case ERROR_DS_AUTH_METHOD_NOT_SUPPORTED: return "ERROR_DS_AUTH_METHOD_NOT_SUPPORTED";
+    case ERROR_DS_STRONG_AUTH_REQUIRED: return "ERROR_DS_STRONG_AUTH_REQUIRED";
+    case ERROR_DS_INAPPROPRIATE_AUTH: return "ERROR_DS_INAPPROPRIATE_AUTH";
+    case ERROR_DS_AUTH_UNKNOWN: return "ERROR_DS_AUTH_UNKNOWN";
+    case ERROR_DS_REFERRAL: return "ERROR_DS_REFERRAL";
+    case ERROR_DS_UNAVAILABLE_CRIT_EXTENSION: return "ERROR_DS_UNAVAILABLE_CRIT_EXTENSION";
+    case ERROR_DS_CONFIDENTIALITY_REQUIRED: return "ERROR_DS_CONFIDENTIALITY_REQUIRED";
+    case ERROR_DS_INAPPROPRIATE_MATCHING: return "ERROR_DS_INAPPROPRIATE_MATCHING";
+    case ERROR_DS_CONSTRAINT_VIOLATION: return "ERROR_DS_CONSTRAINT_VIOLATION";
+    case ERROR_DS_NO_SUCH_OBJECT: return "ERROR_DS_NO_SUCH_OBJECT";
+    case ERROR_DS_ALIAS_PROBLEM: return "ERROR_DS_ALIAS_PROBLEM";
+    case ERROR_DS_INVALID_DN_SYNTAX: return "ERROR_DS_INVALID_DN_SYNTAX";
+    case ERROR_DS_IS_LEAF: return "ERROR_DS_IS_LEAF";
+    case ERROR_DS_ALIAS_DEREF_PROBLEM: return "ERROR_DS_ALIAS_DEREF_PROBLEM";
+    case ERROR_DS_UNWILLING_TO_PERFORM: return "ERROR_DS_UNWILLING_TO_PERFORM";
+    case ERROR_DS_LOOP_DETECT: return "ERROR_DS_LOOP_DETECT";
+    case ERROR_DS_NAMING_VIOLATION: return "ERROR_DS_NAMING_VIOLATION";
+    case ERROR_DS_OBJECT_RESULTS_TOO_LARGE: return "ERROR_DS_OBJECT_RESULTS_TOO_LARGE";
+    case ERROR_DS_AFFECTS_MULTIPLE_DSAS: return "ERROR_DS_AFFECTS_MULTIPLE_DSAS";
+    case ERROR_DS_SERVER_DOWN: return "ERROR_DS_SERVER_DOWN";
+    case ERROR_DS_LOCAL_ERROR: return "ERROR_DS_LOCAL_ERROR";
+    case ERROR_DS_ENCODING_ERROR: return "ERROR_DS_ENCODING_ERROR";
+    case ERROR_DS_DECODING_ERROR: return "ERROR_DS_DECODING_ERROR";
+    case ERROR_DS_FILTER_UNKNOWN: return "ERROR_DS_FILTER_UNKNOWN";
+    case ERROR_DS_PARAM_ERROR: return "ERROR_DS_PARAM_ERROR";
+    case ERROR_DS_NOT_SUPPORTED: return "ERROR_DS_NOT_SUPPORTED";
+    case ERROR_DS_NO_RESULTS_RETURNED: return "ERROR_DS_NO_RESULTS_RETURNED";
+    case ERROR_DS_CONTROL_NOT_FOUND: return "ERROR_DS_CONTROL_NOT_FOUND";
+    case ERROR_DS_CLIENT_LOOP: return "ERROR_DS_CLIENT_LOOP";
+    case ERROR_DS_REFERRAL_LIMIT_EXCEEDED: return "ERROR_DS_REFERRAL_LIMIT_EXCEEDED";
+    case ERROR_DS_SORT_CONTROL_MISSING: return "ERROR_DS_SORT_CONTROL_MISSING";
+    case ERROR_DS_OFFSET_RANGE_ERROR: return "ERROR_DS_OFFSET_RANGE_ERROR";
+    case ERROR_DS_ROOT_MUST_BE_NC: return "ERROR_DS_ROOT_MUST_BE_NC";
+    case ERROR_DS_ADD_REPLICA_INHIBITED: return "ERROR_DS_ADD_REPLICA_INHIBITED";
+    case ERROR_DS_ATT_NOT_DEF_IN_SCHEMA: return "ERROR_DS_ATT_NOT_DEF_IN_SCHEMA";
+    case ERROR_DS_MAX_OBJ_SIZE_EXCEEDED: return "ERROR_DS_MAX_OBJ_SIZE_EXCEEDED";
+    case ERROR_DS_OBJ_STRING_NAME_EXISTS: return "ERROR_DS_OBJ_STRING_NAME_EXISTS";
+    case ERROR_DS_NO_RDN_DEFINED_IN_SCHEMA: return "ERROR_DS_NO_RDN_DEFINED_IN_SCHEMA";
+    case ERROR_DS_RDN_DOESNT_MATCH_SCHEMA: return "ERROR_DS_RDN_DOESNT_MATCH_SCHEMA";
+    case ERROR_DS_NO_REQUESTED_ATTS_FOUND: return "ERROR_DS_NO_REQUESTED_ATTS_FOUND";
+    case ERROR_DS_USER_BUFFER_TO_SMALL: return "ERROR_DS_USER_BUFFER_TO_SMALL";
+    case ERROR_DS_ATT_IS_NOT_ON_OBJ: return "ERROR_DS_ATT_IS_NOT_ON_OBJ";
+    case ERROR_DS_ILLEGAL_MOD_OPERATION: return "ERROR_DS_ILLEGAL_MOD_OPERATION";
+    case ERROR_DS_OBJ_TOO_LARGE: return "ERROR_DS_OBJ_TOO_LARGE";
+    case ERROR_DS_BAD_INSTANCE_TYPE: return "ERROR_DS_BAD_INSTANCE_TYPE";
+    case ERROR_DS_MASTERDSA_REQUIRED: return "ERROR_DS_MASTERDSA_REQUIRED";
+    case ERROR_DS_OBJECT_CLASS_REQUIRED: return "ERROR_DS_OBJECT_CLASS_REQUIRED";
+    case ERROR_DS_MISSING_REQUIRED_ATT: return "ERROR_DS_MISSING_REQUIRED_ATT";
+    case ERROR_DS_ATT_NOT_DEF_FOR_CLASS: return "ERROR_DS_ATT_NOT_DEF_FOR_CLASS";
+    case ERROR_DS_ATT_ALREADY_EXISTS: return "ERROR_DS_ATT_ALREADY_EXISTS";
+    case ERROR_DS_CANT_ADD_ATT_VALUES: return "ERROR_DS_CANT_ADD_ATT_VALUES";
+    case ERROR_DS_SINGLE_VALUE_CONSTRAINT: return "ERROR_DS_SINGLE_VALUE_CONSTRAINT";
+    case ERROR_DS_RANGE_CONSTRAINT: return "ERROR_DS_RANGE_CONSTRAINT";
+    case ERROR_DS_ATT_VAL_ALREADY_EXISTS: return "ERROR_DS_ATT_VAL_ALREADY_EXISTS";
+    case ERROR_DS_CANT_REM_MISSING_ATT: return "ERROR_DS_CANT_REM_MISSING_ATT";
+    case ERROR_DS_CANT_REM_MISSING_ATT_VAL: return "ERROR_DS_CANT_REM_MISSING_ATT_VAL";
+    case ERROR_DS_ROOT_CANT_BE_SUBREF: return "ERROR_DS_ROOT_CANT_BE_SUBREF";
+    case ERROR_DS_NO_CHAINING: return "ERROR_DS_NO_CHAINING";
+    case ERROR_DS_NO_CHAINED_EVAL: return "ERROR_DS_NO_CHAINED_EVAL";
+    case ERROR_DS_NO_PARENT_OBJECT: return "ERROR_DS_NO_PARENT_OBJECT";
+    case ERROR_DS_PARENT_IS_AN_ALIAS: return "ERROR_DS_PARENT_IS_AN_ALIAS";
+    case ERROR_DS_CANT_MIX_MASTER_AND_REPS: return "ERROR_DS_CANT_MIX_MASTER_AND_REPS";
+    case ERROR_DS_CHILDREN_EXIST: return "ERROR_DS_CHILDREN_EXIST";
+    case ERROR_DS_OBJ_NOT_FOUND: return "ERROR_DS_OBJ_NOT_FOUND";
+    case ERROR_DS_ALIASED_OBJ_MISSING: return "ERROR_DS_ALIASED_OBJ_MISSING";
+    case ERROR_DS_BAD_NAME_SYNTAX: return "ERROR_DS_BAD_NAME_SYNTAX";
+    case ERROR_DS_ALIAS_POINTS_TO_ALIAS: return "ERROR_DS_ALIAS_POINTS_TO_ALIAS";
+    case ERROR_DS_CANT_DEREF_ALIAS: return "ERROR_DS_CANT_DEREF_ALIAS";
+    case ERROR_DS_OUT_OF_SCOPE: return "ERROR_DS_OUT_OF_SCOPE";
+    case ERROR_DS_OBJECT_BEING_REMOVED: return "ERROR_DS_OBJECT_BEING_REMOVED";
+    case ERROR_DS_CANT_DELETE_DSA_OBJ: return "ERROR_DS_CANT_DELETE_DSA_OBJ";
+    case ERROR_DS_GENERIC_ERROR: return "ERROR_DS_GENERIC_ERROR";
+    case ERROR_DS_DSA_MUST_BE_INT_MASTER: return "ERROR_DS_DSA_MUST_BE_INT_MASTER";
+    case ERROR_DS_CLASS_NOT_DSA: return "ERROR_DS_CLASS_NOT_DSA";
+    case ERROR_DS_INSUFF_ACCESS_RIGHTS: return "ERROR_DS_INSUFF_ACCESS_RIGHTS";
+    case ERROR_DS_ILLEGAL_SUPERIOR: return "ERROR_DS_ILLEGAL_SUPERIOR";
+    case ERROR_DS_ATTRIBUTE_OWNED_BY_SAM: return "ERROR_DS_ATTRIBUTE_OWNED_BY_SAM";
+    case ERROR_DS_NAME_TOO_MANY_PARTS: return "ERROR_DS_NAME_TOO_MANY_PARTS";
+    case ERROR_DS_NAME_TOO_LONG: return "ERROR_DS_NAME_TOO_LONG";
+    case ERROR_DS_NAME_VALUE_TOO_LONG: return "ERROR_DS_NAME_VALUE_TOO_LONG";
+    case ERROR_DS_NAME_UNPARSEABLE: return "ERROR_DS_NAME_UNPARSEABLE";
+    case ERROR_DS_NAME_TYPE_UNKNOWN: return "ERROR_DS_NAME_TYPE_UNKNOWN";
+    case ERROR_DS_NOT_AN_OBJECT: return "ERROR_DS_NOT_AN_OBJECT";
+    case ERROR_DS_SEC_DESC_TOO_SHORT: return "ERROR_DS_SEC_DESC_TOO_SHORT";
+    case ERROR_DS_SEC_DESC_INVALID: return "ERROR_DS_SEC_DESC_INVALID";
+    case ERROR_DS_NO_DELETED_NAME: return "ERROR_DS_NO_DELETED_NAME";
+    case ERROR_DS_SUBREF_MUST_HAVE_PARENT: return "ERROR_DS_SUBREF_MUST_HAVE_PARENT";
+    case ERROR_DS_NCNAME_MUST_BE_NC: return "ERROR_DS_NCNAME_MUST_BE_NC";
+    case ERROR_DS_CANT_ADD_SYSTEM_ONLY: return "ERROR_DS_CANT_ADD_SYSTEM_ONLY";
+    case ERROR_DS_CLASS_MUST_BE_CONCRETE: return "ERROR_DS_CLASS_MUST_BE_CONCRETE";
+    case ERROR_DS_INVALID_DMD: return "ERROR_DS_INVALID_DMD";
+    case ERROR_DS_OBJ_GUID_EXISTS: return "ERROR_DS_OBJ_GUID_EXISTS";
+    case ERROR_DS_NOT_ON_BACKLINK: return "ERROR_DS_NOT_ON_BACKLINK";
+    case ERROR_DS_NO_CROSSREF_FOR_NC: return "ERROR_DS_NO_CROSSREF_FOR_NC";
+    case ERROR_DS_SHUTTING_DOWN: return "ERROR_DS_SHUTTING_DOWN";
+    case ERROR_DS_UNKNOWN_OPERATION: return "ERROR_DS_UNKNOWN_OPERATION";
+    case ERROR_DS_INVALID_ROLE_OWNER: return "ERROR_DS_INVALID_ROLE_OWNER";
+    case ERROR_DS_COULDNT_CONTACT_FSMO: return "ERROR_DS_COULDNT_CONTACT_FSMO";
+    case ERROR_DS_CROSS_NC_DN_RENAME: return "ERROR_DS_CROSS_NC_DN_RENAME";
+    case ERROR_DS_CANT_MOD_SYSTEM_ONLY: return "ERROR_DS_CANT_MOD_SYSTEM_ONLY";
+    case ERROR_DS_REPLICATOR_ONLY: return "ERROR_DS_REPLICATOR_ONLY";
+    case ERROR_DS_OBJ_CLASS_NOT_DEFINED: return "ERROR_DS_OBJ_CLASS_NOT_DEFINED";
+    case ERROR_DS_OBJ_CLASS_NOT_SUBCLASS: return "ERROR_DS_OBJ_CLASS_NOT_SUBCLASS";
+    case ERROR_DS_NAME_REFERENCE_INVALID: return "ERROR_DS_NAME_REFERENCE_INVALID";
+    case ERROR_DS_CROSS_REF_EXISTS: return "ERROR_DS_CROSS_REF_EXISTS";
+    case ERROR_DS_CANT_DEL_MASTER_CROSSREF: return "ERROR_DS_CANT_DEL_MASTER_CROSSREF";
+    case ERROR_DS_SUBTREE_NOTIFY_NOT_NC_HEAD: return "ERROR_DS_SUBTREE_NOTIFY_NOT_NC_HEAD";
+    case ERROR_DS_NOTIFY_FILTER_TOO_COMPLEX: return "ERROR_DS_NOTIFY_FILTER_TOO_COMPLEX";
+    case ERROR_DS_DUP_RDN: return "ERROR_DS_DUP_RDN";
+    case ERROR_DS_DUP_OID: return "ERROR_DS_DUP_OID";
+    case ERROR_DS_DUP_MAPI_ID: return "ERROR_DS_DUP_MAPI_ID";
+    case ERROR_DS_DUP_SCHEMA_ID_GUID: return "ERROR_DS_DUP_SCHEMA_ID_GUID";
+    case ERROR_DS_DUP_LDAP_DISPLAY_NAME: return "ERROR_DS_DUP_LDAP_DISPLAY_NAME";
+    case ERROR_DS_SEMANTIC_ATT_TEST: return "ERROR_DS_SEMANTIC_ATT_TEST";
+    case ERROR_DS_SYNTAX_MISMATCH: return "ERROR_DS_SYNTAX_MISMATCH";
+    case ERROR_DS_EXISTS_IN_MUST_HAVE: return "ERROR_DS_EXISTS_IN_MUST_HAVE";
+    case ERROR_DS_EXISTS_IN_MAY_HAVE: return "ERROR_DS_EXISTS_IN_MAY_HAVE";
+    case ERROR_DS_NONEXISTENT_MAY_HAVE: return "ERROR_DS_NONEXISTENT_MAY_HAVE";
+    case ERROR_DS_NONEXISTENT_MUST_HAVE: return "ERROR_DS_NONEXISTENT_MUST_HAVE";
+    case ERROR_DS_AUX_CLS_TEST_FAIL: return "ERROR_DS_AUX_CLS_TEST_FAIL";
+    case ERROR_DS_NONEXISTENT_POSS_SUP: return "ERROR_DS_NONEXISTENT_POSS_SUP";
+    case ERROR_DS_SUB_CLS_TEST_FAIL: return "ERROR_DS_SUB_CLS_TEST_FAIL";
+    case ERROR_DS_BAD_RDN_ATT_ID_SYNTAX: return "ERROR_DS_BAD_RDN_ATT_ID_SYNTAX";
+    case ERROR_DS_EXISTS_IN_AUX_CLS: return "ERROR_DS_EXISTS_IN_AUX_CLS";
+    case ERROR_DS_EXISTS_IN_SUB_CLS: return "ERROR_DS_EXISTS_IN_SUB_CLS";
+    case ERROR_DS_EXISTS_IN_POSS_SUP: return "ERROR_DS_EXISTS_IN_POSS_SUP";
+    case ERROR_DS_RECALCSCHEMA_FAILED: return "ERROR_DS_RECALCSCHEMA_FAILED";
+    case ERROR_DS_TREE_DELETE_NOT_FINISHED: return "ERROR_DS_TREE_DELETE_NOT_FINISHED";
+    case ERROR_DS_CANT_DELETE: return "ERROR_DS_CANT_DELETE";
+    case ERROR_DS_ATT_SCHEMA_REQ_ID: return "ERROR_DS_ATT_SCHEMA_REQ_ID";
+    case ERROR_DS_BAD_ATT_SCHEMA_SYNTAX: return "ERROR_DS_BAD_ATT_SCHEMA_SYNTAX";
+    case ERROR_DS_CANT_CACHE_ATT: return "ERROR_DS_CANT_CACHE_ATT";
+    case ERROR_DS_CANT_CACHE_CLASS: return "ERROR_DS_CANT_CACHE_CLASS";
+    case ERROR_DS_CANT_REMOVE_ATT_CACHE: return "ERROR_DS_CANT_REMOVE_ATT_CACHE";
+    case ERROR_DS_CANT_REMOVE_CLASS_CACHE: return "ERROR_DS_CANT_REMOVE_CLASS_CACHE";
+    case ERROR_DS_CANT_RETRIEVE_DN: return "ERROR_DS_CANT_RETRIEVE_DN";
+    case ERROR_DS_MISSING_SUPREF: return "ERROR_DS_MISSING_SUPREF";
+    case ERROR_DS_CANT_RETRIEVE_INSTANCE: return "ERROR_DS_CANT_RETRIEVE_INSTANCE";
+    case ERROR_DS_CODE_INCONSISTENCY: return "ERROR_DS_CODE_INCONSISTENCY";
+    case ERROR_DS_DATABASE_ERROR: return "ERROR_DS_DATABASE_ERROR";
+    case ERROR_DS_GOVERNSID_MISSING: return "ERROR_DS_GOVERNSID_MISSING";
+    case ERROR_DS_MISSING_EXPECTED_ATT: return "ERROR_DS_MISSING_EXPECTED_ATT";
+    case ERROR_DS_NCNAME_MISSING_CR_REF: return "ERROR_DS_NCNAME_MISSING_CR_REF";
+    case ERROR_DS_SECURITY_CHECKING_ERROR: return "ERROR_DS_SECURITY_CHECKING_ERROR";
+    case ERROR_DS_SCHEMA_NOT_LOADED: return "ERROR_DS_SCHEMA_NOT_LOADED";
+    case ERROR_DS_SCHEMA_ALLOC_FAILED: return "ERROR_DS_SCHEMA_ALLOC_FAILED";
+    case ERROR_DS_ATT_SCHEMA_REQ_SYNTAX: return "ERROR_DS_ATT_SCHEMA_REQ_SYNTAX";
+    case ERROR_DS_GCVERIFY_ERROR: return "ERROR_DS_GCVERIFY_ERROR";
+    case ERROR_DS_DRA_SCHEMA_MISMATCH: return "ERROR_DS_DRA_SCHEMA_MISMATCH";
+    case ERROR_DS_CANT_FIND_DSA_OBJ: return "ERROR_DS_CANT_FIND_DSA_OBJ";
+    case ERROR_DS_CANT_FIND_EXPECTED_NC: return "ERROR_DS_CANT_FIND_EXPECTED_NC";
+    case ERROR_DS_CANT_FIND_NC_IN_CACHE: return "ERROR_DS_CANT_FIND_NC_IN_CACHE";
+    case ERROR_DS_CANT_RETRIEVE_CHILD: return "ERROR_DS_CANT_RETRIEVE_CHILD";
+    case ERROR_DS_SECURITY_ILLEGAL_MODIFY: return "ERROR_DS_SECURITY_ILLEGAL_MODIFY";
+    case ERROR_DS_CANT_REPLACE_HIDDEN_REC: return "ERROR_DS_CANT_REPLACE_HIDDEN_REC";
+    case ERROR_DS_BAD_HIERARCHY_FILE: return "ERROR_DS_BAD_HIERARCHY_FILE";
+    case ERROR_DS_BUILD_HIERARCHY_TABLE_FAILED: return "ERROR_DS_BUILD_HIERARCHY_TABLE_FAILED";
+    case ERROR_DS_CONFIG_PARAM_MISSING: return "ERROR_DS_CONFIG_PARAM_MISSING";
+    case ERROR_DS_COUNTING_AB_INDICES_FAILED: return "ERROR_DS_COUNTING_AB_INDICES_FAILED";
+    case ERROR_DS_HIERARCHY_TABLE_MALLOC_FAILED: return "ERROR_DS_HIERARCHY_TABLE_MALLOC_FAILED";
+    case ERROR_DS_INTERNAL_FAILURE: return "ERROR_DS_INTERNAL_FAILURE";
+    case ERROR_DS_UNKNOWN_ERROR: return "ERROR_DS_UNKNOWN_ERROR";
+    case ERROR_DS_ROOT_REQUIRES_CLASS_TOP: return "ERROR_DS_ROOT_REQUIRES_CLASS_TOP";
+    case ERROR_DS_REFUSING_FSMO_ROLES: return "ERROR_DS_REFUSING_FSMO_ROLES";
+    case ERROR_DS_MISSING_FSMO_SETTINGS: return "ERROR_DS_MISSING_FSMO_SETTINGS";
+    case ERROR_DS_UNABLE_TO_SURRENDER_ROLES: return "ERROR_DS_UNABLE_TO_SURRENDER_ROLES";
+    case ERROR_DS_DRA_GENERIC: return "ERROR_DS_DRA_GENERIC";
+    case ERROR_DS_DRA_INVALID_PARAMETER: return "ERROR_DS_DRA_INVALID_PARAMETER";
+    case ERROR_DS_DRA_BUSY: return "ERROR_DS_DRA_BUSY";
+    case ERROR_DS_DRA_BAD_DN: return "ERROR_DS_DRA_BAD_DN";
+    case ERROR_DS_DRA_BAD_NC: return "ERROR_DS_DRA_BAD_NC";
+    case ERROR_DS_DRA_DN_EXISTS: return "ERROR_DS_DRA_DN_EXISTS";
+    case ERROR_DS_DRA_INTERNAL_ERROR: return "ERROR_DS_DRA_INTERNAL_ERROR";
+    case ERROR_DS_DRA_INCONSISTENT_DIT: return "ERROR_DS_DRA_INCONSISTENT_DIT";
+    case ERROR_DS_DRA_CONNECTION_FAILED: return "ERROR_DS_DRA_CONNECTION_FAILED";
+    case ERROR_DS_DRA_BAD_INSTANCE_TYPE: return "ERROR_DS_DRA_BAD_INSTANCE_TYPE";
+    case ERROR_DS_DRA_OUT_OF_MEM: return "ERROR_DS_DRA_OUT_OF_MEM";
+    case ERROR_DS_DRA_MAIL_PROBLEM: return "ERROR_DS_DRA_MAIL_PROBLEM";
+    case ERROR_DS_DRA_REF_ALREADY_EXISTS: return "ERROR_DS_DRA_REF_ALREADY_EXISTS";
+    case ERROR_DS_DRA_REF_NOT_FOUND: return "ERROR_DS_DRA_REF_NOT_FOUND";
+    case ERROR_DS_DRA_OBJ_IS_REP_SOURCE: return "ERROR_DS_DRA_OBJ_IS_REP_SOURCE";
+    case ERROR_DS_DRA_DB_ERROR: return "ERROR_DS_DRA_DB_ERROR";
+    case ERROR_DS_DRA_NO_REPLICA: return "ERROR_DS_DRA_NO_REPLICA";
+    case ERROR_DS_DRA_ACCESS_DENIED: return "ERROR_DS_DRA_ACCESS_DENIED";
+    case ERROR_DS_DRA_NOT_SUPPORTED: return "ERROR_DS_DRA_NOT_SUPPORTED";
+    case ERROR_DS_DRA_RPC_CANCELLED: return "ERROR_DS_DRA_RPC_CANCELLED";
+    case ERROR_DS_DRA_SOURCE_DISABLED: return "ERROR_DS_DRA_SOURCE_DISABLED";
+    case ERROR_DS_DRA_SINK_DISABLED: return "ERROR_DS_DRA_SINK_DISABLED";
+    case ERROR_DS_DRA_NAME_COLLISION: return "ERROR_DS_DRA_NAME_COLLISION";
+    case ERROR_DS_DRA_SOURCE_REINSTALLED: return "ERROR_DS_DRA_SOURCE_REINSTALLED";
+    case ERROR_DS_DRA_MISSING_PARENT: return "ERROR_DS_DRA_MISSING_PARENT";
+    case ERROR_DS_DRA_PREEMPTED: return "ERROR_DS_DRA_PREEMPTED";
+    case ERROR_DS_DRA_ABANDON_SYNC: return "ERROR_DS_DRA_ABANDON_SYNC";
+    case ERROR_DS_DRA_SHUTDOWN: return "ERROR_DS_DRA_SHUTDOWN";
+    case ERROR_DS_DRA_INCOMPATIBLE_PARTIAL_SET: return "ERROR_DS_DRA_INCOMPATIBLE_PARTIAL_SET";
+    case ERROR_DS_DRA_SOURCE_IS_PARTIAL_REPLICA: return "ERROR_DS_DRA_SOURCE_IS_PARTIAL_REPLICA";
+    case ERROR_DS_DRA_EXTN_CONNECTION_FAILED: return "ERROR_DS_DRA_EXTN_CONNECTION_FAILED";
+    case ERROR_DS_INSTALL_SCHEMA_MISMATCH: return "ERROR_DS_INSTALL_SCHEMA_MISMATCH";
+    case ERROR_DS_DUP_LINK_ID: return "ERROR_DS_DUP_LINK_ID";
+    case ERROR_DS_NAME_ERROR_RESOLVING: return "ERROR_DS_NAME_ERROR_RESOLVING";
+    case ERROR_DS_NAME_ERROR_NOT_FOUND: return "ERROR_DS_NAME_ERROR_NOT_FOUND";
+    case ERROR_DS_NAME_ERROR_NOT_UNIQUE: return "ERROR_DS_NAME_ERROR_NOT_UNIQUE";
+    case ERROR_DS_NAME_ERROR_NO_MAPPING: return "ERROR_DS_NAME_ERROR_NO_MAPPING";
+    case ERROR_DS_NAME_ERROR_DOMAIN_ONLY: return "ERROR_DS_NAME_ERROR_DOMAIN_ONLY";
+    case ERROR_DS_NAME_ERROR_NO_SYNTACTICAL_MAPPING: return "ERROR_DS_NAME_ERROR_NO_SYNTACTICAL_MAPPING";
+    case ERROR_DS_CONSTRUCTED_ATT_MOD: return "ERROR_DS_CONSTRUCTED_ATT_MOD";
+    case ERROR_DS_WRONG_OM_OBJ_CLASS: return "ERROR_DS_WRONG_OM_OBJ_CLASS";
+    case ERROR_DS_DRA_REPL_PENDING: return "ERROR_DS_DRA_REPL_PENDING";
+    case ERROR_DS_DS_REQUIRED: return "ERROR_DS_DS_REQUIRED";
+    case ERROR_DS_INVALID_LDAP_DISPLAY_NAME: return "ERROR_DS_INVALID_LDAP_DISPLAY_NAME";
+    case ERROR_DS_NON_BASE_SEARCH: return "ERROR_DS_NON_BASE_SEARCH";
+    case ERROR_DS_CANT_RETRIEVE_ATTS: return "ERROR_DS_CANT_RETRIEVE_ATTS";
+    case ERROR_DS_BACKLINK_WITHOUT_LINK: return "ERROR_DS_BACKLINK_WITHOUT_LINK";
+    case ERROR_DS_EPOCH_MISMATCH: return "ERROR_DS_EPOCH_MISMATCH";
+    case ERROR_DS_SRC_NAME_MISMATCH: return "ERROR_DS_SRC_NAME_MISMATCH";
+    case ERROR_DS_SRC_AND_DST_NC_IDENTICAL: return "ERROR_DS_SRC_AND_DST_NC_IDENTICAL";
+    case ERROR_DS_DST_NC_MISMATCH: return "ERROR_DS_DST_NC_MISMATCH";
+    case ERROR_DS_NOT_AUTHORITIVE_FOR_DST_NC: return "ERROR_DS_NOT_AUTHORITIVE_FOR_DST_NC";
+    case ERROR_DS_SRC_GUID_MISMATCH: return "ERROR_DS_SRC_GUID_MISMATCH";
+    case ERROR_DS_CANT_MOVE_DELETED_OBJECT: return "ERROR_DS_CANT_MOVE_DELETED_OBJECT";
+    case ERROR_DS_PDC_OPERATION_IN_PROGRESS: return "ERROR_DS_PDC_OPERATION_IN_PROGRESS";
+    case ERROR_DS_CROSS_DOMAIN_CLEANUP_REQD: return "ERROR_DS_CROSS_DOMAIN_CLEANUP_REQD";
+    case ERROR_DS_ILLEGAL_XDOM_MOVE_OPERATION: return "ERROR_DS_ILLEGAL_XDOM_MOVE_OPERATION";
+    case ERROR_DS_CANT_WITH_ACCT_GROUP_MEMBERSHPS: return "ERROR_DS_CANT_WITH_ACCT_GROUP_MEMBERSHPS";
+    case ERROR_DS_NC_MUST_HAVE_NC_PARENT: return "ERROR_DS_NC_MUST_HAVE_NC_PARENT";
+    case ERROR_DS_CR_IMPOSSIBLE_TO_VALIDATE: return "ERROR_DS_CR_IMPOSSIBLE_TO_VALIDATE";
+    case ERROR_DS_DST_DOMAIN_NOT_NATIVE: return "ERROR_DS_DST_DOMAIN_NOT_NATIVE";
+    case ERROR_DS_MISSING_INFRASTRUCTURE_CONTAINER: return "ERROR_DS_MISSING_INFRASTRUCTURE_CONTAINER";
+    case ERROR_DS_CANT_MOVE_ACCOUNT_GROUP: return "ERROR_DS_CANT_MOVE_ACCOUNT_GROUP";
+    case ERROR_DS_CANT_MOVE_RESOURCE_GROUP: return "ERROR_DS_CANT_MOVE_RESOURCE_GROUP";
+    case ERROR_DS_INVALID_SEARCH_FLAG: return "ERROR_DS_INVALID_SEARCH_FLAG";
+    case ERROR_DS_NO_TREE_DELETE_ABOVE_NC: return "ERROR_DS_NO_TREE_DELETE_ABOVE_NC";
+    case ERROR_DS_COULDNT_LOCK_TREE_FOR_DELETE: return "ERROR_DS_COULDNT_LOCK_TREE_FOR_DELETE";
+    case ERROR_DS_COULDNT_IDENTIFY_OBJECTS_FOR_TREE_DELETE: return "ERROR_DS_COULDNT_IDENTIFY_OBJECTS_FOR_TREE_DELETE";
+    case ERROR_DS_SAM_INIT_FAILURE: return "ERROR_DS_SAM_INIT_FAILURE";
+    case ERROR_DS_SENSITIVE_GROUP_VIOLATION: return "ERROR_DS_SENSITIVE_GROUP_VIOLATION";
+    case ERROR_DS_CANT_MOD_PRIMARYGROUPID: return "ERROR_DS_CANT_MOD_PRIMARYGROUPID";
+    case ERROR_DS_ILLEGAL_BASE_SCHEMA_MOD: return "ERROR_DS_ILLEGAL_BASE_SCHEMA_MOD";
+    case ERROR_DS_NONSAFE_SCHEMA_CHANGE: return "ERROR_DS_NONSAFE_SCHEMA_CHANGE";
+    case ERROR_DS_SCHEMA_UPDATE_DISALLOWED: return "ERROR_DS_SCHEMA_UPDATE_DISALLOWED";
+    case ERROR_DS_CANT_CREATE_UNDER_SCHEMA: return "ERROR_DS_CANT_CREATE_UNDER_SCHEMA";
+    case ERROR_DS_INSTALL_NO_SRC_SCH_VERSION: return "ERROR_DS_INSTALL_NO_SRC_SCH_VERSION";
+    case ERROR_DS_INSTALL_NO_SCH_VERSION_IN_INIFILE: return "ERROR_DS_INSTALL_NO_SCH_VERSION_IN_INIFILE";
+    case ERROR_DS_INVALID_GROUP_TYPE: return "ERROR_DS_INVALID_GROUP_TYPE";
+    case ERROR_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN: return "ERROR_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN";
+    case ERROR_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN: return "ERROR_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN";
+    case ERROR_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER: return "ERROR_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER";
+    case ERROR_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER: return "ERROR_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER";
+    case ERROR_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER: return "ERROR_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER";
+    case ERROR_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER: return "ERROR_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER";
+    case ERROR_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER: return "ERROR_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER";
+    case ERROR_DS_HAVE_PRIMARY_MEMBERS: return "ERROR_DS_HAVE_PRIMARY_MEMBERS";
+    case ERROR_DS_STRING_SD_CONVERSION_FAILED: return "ERROR_DS_STRING_SD_CONVERSION_FAILED";
+    case ERROR_DS_NAMING_MASTER_GC: return "ERROR_DS_NAMING_MASTER_GC";
+    case ERROR_DS_DNS_LOOKUP_FAILURE: return "ERROR_DS_DNS_LOOKUP_FAILURE";
+    case ERROR_DS_COULDNT_UPDATE_SPNS: return "ERROR_DS_COULDNT_UPDATE_SPNS";
+    case ERROR_DS_CANT_RETRIEVE_SD: return "ERROR_DS_CANT_RETRIEVE_SD";
+    case ERROR_DS_KEY_NOT_UNIQUE: return "ERROR_DS_KEY_NOT_UNIQUE";
+    case ERROR_DS_WRONG_LINKED_ATT_SYNTAX: return "ERROR_DS_WRONG_LINKED_ATT_SYNTAX";
+    case ERROR_DS_SAM_NEED_BOOTKEY_PASSWORD: return "ERROR_DS_SAM_NEED_BOOTKEY_PASSWORD";
+    case ERROR_DS_SAM_NEED_BOOTKEY_FLOPPY: return "ERROR_DS_SAM_NEED_BOOTKEY_FLOPPY";
+    case ERROR_DS_CANT_START: return "ERROR_DS_CANT_START";
+    case ERROR_DS_INIT_FAILURE: return "ERROR_DS_INIT_FAILURE";
+    case ERROR_DS_NO_PKT_PRIVACY_ON_CONNECTION: return "ERROR_DS_NO_PKT_PRIVACY_ON_CONNECTION";
+    case ERROR_DS_SOURCE_DOMAIN_IN_FOREST: return "ERROR_DS_SOURCE_DOMAIN_IN_FOREST";
+    case ERROR_DS_DESTINATION_DOMAIN_NOT_IN_FOREST: return "ERROR_DS_DESTINATION_DOMAIN_NOT_IN_FOREST";
+    case ERROR_DS_DESTINATION_AUDITING_NOT_ENABLED: return "ERROR_DS_DESTINATION_AUDITING_NOT_ENABLED";
+    case ERROR_DS_CANT_FIND_DC_FOR_SRC_DOMAIN: return "ERROR_DS_CANT_FIND_DC_FOR_SRC_DOMAIN";
+    case ERROR_DS_SRC_OBJ_NOT_GROUP_OR_USER: return "ERROR_DS_SRC_OBJ_NOT_GROUP_OR_USER";
+    case ERROR_DS_SRC_SID_EXISTS_IN_FOREST: return "ERROR_DS_SRC_SID_EXISTS_IN_FOREST";
+    case ERROR_DS_SRC_AND_DST_OBJECT_CLASS_MISMATCH: return "ERROR_DS_SRC_AND_DST_OBJECT_CLASS_MISMATCH";
+    case ERROR_SAM_INIT_FAILURE: return "ERROR_SAM_INIT_FAILURE";
+    case ERROR_DS_DRA_SCHEMA_INFO_SHIP: return "ERROR_DS_DRA_SCHEMA_INFO_SHIP";
+    case ERROR_DS_DRA_SCHEMA_CONFLICT: return "ERROR_DS_DRA_SCHEMA_CONFLICT";
+    case ERROR_DS_DRA_EARLIER_SCHEMA_CONFLICT: return "ERROR_DS_DRA_EARLIER_SCHEMA_CONFLICT";
+    case ERROR_DS_DRA_OBJ_NC_MISMATCH: return "ERROR_DS_DRA_OBJ_NC_MISMATCH";
+    case ERROR_DS_NC_STILL_HAS_DSAS: return "ERROR_DS_NC_STILL_HAS_DSAS";
+    case ERROR_DS_GC_REQUIRED: return "ERROR_DS_GC_REQUIRED";
+    case ERROR_DS_LOCAL_MEMBER_OF_LOCAL_ONLY: return "ERROR_DS_LOCAL_MEMBER_OF_LOCAL_ONLY";
+    case ERROR_DS_NO_FPO_IN_UNIVERSAL_GROUPS: return "ERROR_DS_NO_FPO_IN_UNIVERSAL_GROUPS";
+    case ERROR_DS_CANT_ADD_TO_GC: return "ERROR_DS_CANT_ADD_TO_GC";
+    case ERROR_DS_NO_CHECKPOINT_WITH_PDC: return "ERROR_DS_NO_CHECKPOINT_WITH_PDC";
+    case ERROR_DS_SOURCE_AUDITING_NOT_ENABLED: return "ERROR_DS_SOURCE_AUDITING_NOT_ENABLED";
+    case ERROR_DS_CANT_CREATE_IN_NONDOMAIN_NC: return "ERROR_DS_CANT_CREATE_IN_NONDOMAIN_NC";
+    case ERROR_DS_INVALID_NAME_FOR_SPN: return "ERROR_DS_INVALID_NAME_FOR_SPN";
+    case ERROR_DS_FILTER_USES_CONTRUCTED_ATTRS: return "ERROR_DS_FILTER_USES_CONTRUCTED_ATTRS";
+    case ERROR_DS_UNICODEPWD_NOT_IN_QUOTES: return "ERROR_DS_UNICODEPWD_NOT_IN_QUOTES";
+    case ERROR_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED: return "ERROR_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED";
+    case ERROR_DS_MUST_BE_RUN_ON_DST_DC: return "ERROR_DS_MUST_BE_RUN_ON_DST_DC";
+    case ERROR_DS_SRC_DC_MUST_BE_SP4_OR_GREATER: return "ERROR_DS_SRC_DC_MUST_BE_SP4_OR_GREATER";
+    case ERROR_DS_CANT_TREE_DELETE_CRITICAL_OBJ: return "ERROR_DS_CANT_TREE_DELETE_CRITICAL_OBJ";
+    case ERROR_DS_INIT_FAILURE_CONSOLE: return "ERROR_DS_INIT_FAILURE_CONSOLE";
+    case ERROR_DS_SAM_INIT_FAILURE_CONSOLE: return "ERROR_DS_SAM_INIT_FAILURE_CONSOLE";
+    case ERROR_DS_FOREST_VERSION_TOO_HIGH: return "ERROR_DS_FOREST_VERSION_TOO_HIGH";
+    case ERROR_DS_DOMAIN_VERSION_TOO_HIGH: return "ERROR_DS_DOMAIN_VERSION_TOO_HIGH";
+    case ERROR_DS_FOREST_VERSION_TOO_LOW: return "ERROR_DS_FOREST_VERSION_TOO_LOW";
+    case ERROR_DS_DOMAIN_VERSION_TOO_LOW: return "ERROR_DS_DOMAIN_VERSION_TOO_LOW";
+    case ERROR_DS_INCOMPATIBLE_VERSION: return "ERROR_DS_INCOMPATIBLE_VERSION";
+    case ERROR_DS_LOW_DSA_VERSION: return "ERROR_DS_LOW_DSA_VERSION";
+    case ERROR_DS_NO_BEHAVIOR_VERSION_IN_MIXEDDOMAIN: return "ERROR_DS_NO_BEHAVIOR_VERSION_IN_MIXEDDOMAIN";
+    case ERROR_DS_NOT_SUPPORTED_SORT_ORDER: return "ERROR_DS_NOT_SUPPORTED_SORT_ORDER";
+    case ERROR_DS_NAME_NOT_UNIQUE: return "ERROR_DS_NAME_NOT_UNIQUE";
+    case ERROR_DS_MACHINE_ACCOUNT_CREATED_PRENT4: return "ERROR_DS_MACHINE_ACCOUNT_CREATED_PRENT4";
+    case ERROR_DS_OUT_OF_VERSION_STORE: return "ERROR_DS_OUT_OF_VERSION_STORE";
+    case ERROR_DS_INCOMPATIBLE_CONTROLS_USED: return "ERROR_DS_INCOMPATIBLE_CONTROLS_USED";
+    case ERROR_DS_NO_REF_DOMAIN: return "ERROR_DS_NO_REF_DOMAIN";
+    case ERROR_DS_RESERVED_LINK_ID: return "ERROR_DS_RESERVED_LINK_ID";
+    case ERROR_DS_LINK_ID_NOT_AVAILABLE: return "ERROR_DS_LINK_ID_NOT_AVAILABLE";
+    case ERROR_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER: return "ERROR_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER";
+    case ERROR_DS_MODIFYDN_DISALLOWED_BY_INSTANCE_TYPE: return "ERROR_DS_MODIFYDN_DISALLOWED_BY_INSTANCE_TYPE";
+    case ERROR_DS_NO_OBJECT_MOVE_IN_SCHEMA_NC: return "ERROR_DS_NO_OBJECT_MOVE_IN_SCHEMA_NC";
+    case ERROR_DS_MODIFYDN_DISALLOWED_BY_FLAG: return "ERROR_DS_MODIFYDN_DISALLOWED_BY_FLAG";
+    case ERROR_DS_MODIFYDN_WRONG_GRANDPARENT: return "ERROR_DS_MODIFYDN_WRONG_GRANDPARENT";
+    case ERROR_DS_NAME_ERROR_TRUST_REFERRAL: return "ERROR_DS_NAME_ERROR_TRUST_REFERRAL";
+    case ERROR_NOT_SUPPORTED_ON_STANDARD_SERVER: return "ERROR_NOT_SUPPORTED_ON_STANDARD_SERVER";
+    case ERROR_DS_CANT_ACCESS_REMOTE_PART_OF_AD: return "ERROR_DS_CANT_ACCESS_REMOTE_PART_OF_AD";
+    case ERROR_DS_CR_IMPOSSIBLE_TO_VALIDATE_V2: return "ERROR_DS_CR_IMPOSSIBLE_TO_VALIDATE_V2";
+    case ERROR_DS_THREAD_LIMIT_EXCEEDED: return "ERROR_DS_THREAD_LIMIT_EXCEEDED";
+    case ERROR_DS_NOT_CLOSEST: return "ERROR_DS_NOT_CLOSEST";
+    case ERROR_DS_CANT_DERIVE_SPN_WITHOUT_SERVER_REF: return "ERROR_DS_CANT_DERIVE_SPN_WITHOUT_SERVER_REF";
+    case ERROR_DS_SINGLE_USER_MODE_FAILED: return "ERROR_DS_SINGLE_USER_MODE_FAILED";
+    case ERROR_DS_NTDSCRIPT_SYNTAX_ERROR: return "ERROR_DS_NTDSCRIPT_SYNTAX_ERROR";
+    case ERROR_DS_NTDSCRIPT_PROCESS_ERROR: return "ERROR_DS_NTDSCRIPT_PROCESS_ERROR";
+    case ERROR_DS_DIFFERENT_REPL_EPOCHS: return "ERROR_DS_DIFFERENT_REPL_EPOCHS";
+    case ERROR_DS_DRS_EXTENSIONS_CHANGED: return "ERROR_DS_DRS_EXTENSIONS_CHANGED";
+    case ERROR_DS_REPLICA_SET_CHANGE_NOT_ALLOWED_ON_DISABLED_CR: return "ERROR_DS_REPLICA_SET_CHANGE_NOT_ALLOWED_ON_DISABLED_CR";
+    case ERROR_DS_NO_MSDS_INTID: return "ERROR_DS_NO_MSDS_INTID";
+    case ERROR_DS_DUP_MSDS_INTID: return "ERROR_DS_DUP_MSDS_INTID";
+    case ERROR_DS_EXISTS_IN_RDNATTID: return "ERROR_DS_EXISTS_IN_RDNATTID";
+    case ERROR_DS_AUTHORIZATION_FAILED: return "ERROR_DS_AUTHORIZATION_FAILED";
+    case ERROR_DS_INVALID_SCRIPT: return "ERROR_DS_INVALID_SCRIPT";
+    case ERROR_DS_REMOTE_CROSSREF_OP_FAILED: return "ERROR_DS_REMOTE_CROSSREF_OP_FAILED";
+    case ERROR_DS_CROSS_REF_BUSY: return "ERROR_DS_CROSS_REF_BUSY";
+    case ERROR_DS_CANT_DERIVE_SPN_FOR_DELETED_DOMAIN: return "ERROR_DS_CANT_DERIVE_SPN_FOR_DELETED_DOMAIN";
+    case ERROR_DS_CANT_DEMOTE_WITH_WRITEABLE_NC: return "ERROR_DS_CANT_DEMOTE_WITH_WRITEABLE_NC";
+    case ERROR_DS_DUPLICATE_ID_FOUND: return "ERROR_DS_DUPLICATE_ID_FOUND";
+    case ERROR_DS_INSUFFICIENT_ATTR_TO_CREATE_OBJECT: return "ERROR_DS_INSUFFICIENT_ATTR_TO_CREATE_OBJECT";
+    case ERROR_DS_GROUP_CONVERSION_ERROR: return "ERROR_DS_GROUP_CONVERSION_ERROR";
+    case ERROR_DS_CANT_MOVE_APP_BASIC_GROUP: return "ERROR_DS_CANT_MOVE_APP_BASIC_GROUP";
+    case ERROR_DS_CANT_MOVE_APP_QUERY_GROUP: return "ERROR_DS_CANT_MOVE_APP_QUERY_GROUP";
+    case ERROR_DS_ROLE_NOT_VERIFIED: return "ERROR_DS_ROLE_NOT_VERIFIED";
+    case ERROR_DS_WKO_CONTAINER_CANNOT_BE_SPECIAL: return "ERROR_DS_WKO_CONTAINER_CANNOT_BE_SPECIAL";
+    case ERROR_DS_DOMAIN_RENAME_IN_PROGRESS: return "ERROR_DS_DOMAIN_RENAME_IN_PROGRESS";
+    case ERROR_DS_EXISTING_AD_CHILD_NC: return "ERROR_DS_EXISTING_AD_CHILD_NC";
+    case ERROR_DS_REPL_LIFETIME_EXCEEDED: return "ERROR_DS_REPL_LIFETIME_EXCEEDED";
+    case ERROR_DS_DISALLOWED_IN_SYSTEM_CONTAINER: return "ERROR_DS_DISALLOWED_IN_SYSTEM_CONTAINER";
+    case ERROR_DS_LDAP_SEND_QUEUE_FULL: return "ERROR_DS_LDAP_SEND_QUEUE_FULL";
+    case ERROR_DS_DRA_OUT_SCHEDULE_WINDOW: return "ERROR_DS_DRA_OUT_SCHEDULE_WINDOW";
+    case ERROR_SXS_SECTION_NOT_FOUND: return "ERROR_SXS_SECTION_NOT_FOUND";
+    case ERROR_SXS_CANT_GEN_ACTCTX: return "ERROR_SXS_CANT_GEN_ACTCTX";
+    case ERROR_SXS_INVALID_ACTCTXDATA_FORMAT: return "ERROR_SXS_INVALID_ACTCTXDATA_FORMAT";
+    case ERROR_SXS_ASSEMBLY_NOT_FOUND: return "ERROR_SXS_ASSEMBLY_NOT_FOUND";
+    case ERROR_SXS_MANIFEST_FORMAT_ERROR: return "ERROR_SXS_MANIFEST_FORMAT_ERROR";
+    case ERROR_SXS_MANIFEST_PARSE_ERROR: return "ERROR_SXS_MANIFEST_PARSE_ERROR";
+    case ERROR_SXS_ACTIVATION_CONTEXT_DISABLED: return "ERROR_SXS_ACTIVATION_CONTEXT_DISABLED";
+    case ERROR_SXS_KEY_NOT_FOUND: return "ERROR_SXS_KEY_NOT_FOUND";
+    case ERROR_SXS_VERSION_CONFLICT: return "ERROR_SXS_VERSION_CONFLICT";
+    case ERROR_SXS_WRONG_SECTION_TYPE: return "ERROR_SXS_WRONG_SECTION_TYPE";
+    case ERROR_SXS_THREAD_QUERIES_DISABLED: return "ERROR_SXS_THREAD_QUERIES_DISABLED";
+    case ERROR_SXS_PROCESS_DEFAULT_ALREADY_SET: return "ERROR_SXS_PROCESS_DEFAULT_ALREADY_SET";
+    case ERROR_SXS_UNKNOWN_ENCODING_GROUP: return "ERROR_SXS_UNKNOWN_ENCODING_GROUP";
+    case ERROR_SXS_UNKNOWN_ENCODING: return "ERROR_SXS_UNKNOWN_ENCODING";
+    case ERROR_SXS_INVALID_XML_NAMESPACE_URI: return "ERROR_SXS_INVALID_XML_NAMESPACE_URI";
+    case ERROR_SXS_ROOT_MANIFEST_DEPENDENCY_NOT_INSTALLED: return "ERROR_SXS_ROOT_MANIFEST_DEPENDENCY_NOT_INSTALLED";
+    case ERROR_SXS_LEAF_MANIFEST_DEPENDENCY_NOT_INSTALLED: return "ERROR_SXS_LEAF_MANIFEST_DEPENDENCY_NOT_INSTALLED";
+    case ERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE: return "ERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE";
+    case ERROR_SXS_MANIFEST_MISSING_REQUIRED_DEFAULT_NAMESPACE: return "ERROR_SXS_MANIFEST_MISSING_REQUIRED_DEFAULT_NAMESPACE";
+    case ERROR_SXS_MANIFEST_INVALID_REQUIRED_DEFAULT_NAMESPACE: return "ERROR_SXS_MANIFEST_INVALID_REQUIRED_DEFAULT_NAMESPACE";
+    case ERROR_SXS_PRIVATE_MANIFEST_CROSS_PATH_WITH_REPARSE_POINT: return "ERROR_SXS_PRIVATE_MANIFEST_CROSS_PATH_WITH_REPARSE_POINT";
+    case ERROR_SXS_DUPLICATE_DLL_NAME: return "ERROR_SXS_DUPLICATE_DLL_NAME";
+    case ERROR_SXS_DUPLICATE_WINDOWCLASS_NAME: return "ERROR_SXS_DUPLICATE_WINDOWCLASS_NAME";
+    case ERROR_SXS_DUPLICATE_CLSID: return "ERROR_SXS_DUPLICATE_CLSID";
+    case ERROR_SXS_DUPLICATE_IID: return "ERROR_SXS_DUPLICATE_IID";
+    case ERROR_SXS_DUPLICATE_TLBID: return "ERROR_SXS_DUPLICATE_TLBID";
+    case ERROR_SXS_DUPLICATE_PROGID: return "ERROR_SXS_DUPLICATE_PROGID";
+    case ERROR_SXS_DUPLICATE_ASSEMBLY_NAME: return "ERROR_SXS_DUPLICATE_ASSEMBLY_NAME";
+    case ERROR_SXS_FILE_HASH_MISMATCH: return "ERROR_SXS_FILE_HASH_MISMATCH";
+    case ERROR_SXS_POLICY_PARSE_ERROR: return "ERROR_SXS_POLICY_PARSE_ERROR";
+    case ERROR_SXS_XML_E_MISSINGQUOTE: return "ERROR_SXS_XML_E_MISSINGQUOTE";
+    case ERROR_SXS_XML_E_COMMENTSYNTAX: return "ERROR_SXS_XML_E_COMMENTSYNTAX";
+    case ERROR_SXS_XML_E_BADSTARTNAMECHAR: return "ERROR_SXS_XML_E_BADSTARTNAMECHAR";
+    case ERROR_SXS_XML_E_BADNAMECHAR: return "ERROR_SXS_XML_E_BADNAMECHAR";
+    case ERROR_SXS_XML_E_BADCHARINSTRING: return "ERROR_SXS_XML_E_BADCHARINSTRING";
+    case ERROR_SXS_XML_E_XMLDECLSYNTAX: return "ERROR_SXS_XML_E_XMLDECLSYNTAX";
+    case ERROR_SXS_XML_E_BADCHARDATA: return "ERROR_SXS_XML_E_BADCHARDATA";
+    case ERROR_SXS_XML_E_MISSINGWHITESPACE: return "ERROR_SXS_XML_E_MISSINGWHITESPACE";
+    case ERROR_SXS_XML_E_EXPECTINGTAGEND: return "ERROR_SXS_XML_E_EXPECTINGTAGEND";
+    case ERROR_SXS_XML_E_MISSINGSEMICOLON: return "ERROR_SXS_XML_E_MISSINGSEMICOLON";
+    case ERROR_SXS_XML_E_UNBALANCEDPAREN: return "ERROR_SXS_XML_E_UNBALANCEDPAREN";
+    case ERROR_SXS_XML_E_INTERNALERROR: return "ERROR_SXS_XML_E_INTERNALERROR";
+    case ERROR_SXS_XML_E_UNEXPECTED_WHITESPACE: return "ERROR_SXS_XML_E_UNEXPECTED_WHITESPACE";
+    case ERROR_SXS_XML_E_INCOMPLETE_ENCODING: return "ERROR_SXS_XML_E_INCOMPLETE_ENCODING";
+    case ERROR_SXS_XML_E_MISSING_PAREN: return "ERROR_SXS_XML_E_MISSING_PAREN";
+    case ERROR_SXS_XML_E_EXPECTINGCLOSEQUOTE: return "ERROR_SXS_XML_E_EXPECTINGCLOSEQUOTE";
+    case ERROR_SXS_XML_E_MULTIPLE_COLONS: return "ERROR_SXS_XML_E_MULTIPLE_COLONS";
+    case ERROR_SXS_XML_E_INVALID_DECIMAL: return "ERROR_SXS_XML_E_INVALID_DECIMAL";
+    case ERROR_SXS_XML_E_INVALID_HEXIDECIMAL: return "ERROR_SXS_XML_E_INVALID_HEXIDECIMAL";
+    case ERROR_SXS_XML_E_INVALID_UNICODE: return "ERROR_SXS_XML_E_INVALID_UNICODE";
+    case ERROR_SXS_XML_E_WHITESPACEORQUESTIONMARK: return "ERROR_SXS_XML_E_WHITESPACEORQUESTIONMARK";
+    case ERROR_SXS_XML_E_UNEXPECTEDENDTAG: return "ERROR_SXS_XML_E_UNEXPECTEDENDTAG";
+    case ERROR_SXS_XML_E_UNCLOSEDTAG: return "ERROR_SXS_XML_E_UNCLOSEDTAG";
+    case ERROR_SXS_XML_E_DUPLICATEATTRIBUTE: return "ERROR_SXS_XML_E_DUPLICATEATTRIBUTE";
+    case ERROR_SXS_XML_E_MULTIPLEROOTS: return "ERROR_SXS_XML_E_MULTIPLEROOTS";
+    case ERROR_SXS_XML_E_INVALIDATROOTLEVEL: return "ERROR_SXS_XML_E_INVALIDATROOTLEVEL";
+    case ERROR_SXS_XML_E_BADXMLDECL: return "ERROR_SXS_XML_E_BADXMLDECL";
+    case ERROR_SXS_XML_E_MISSINGROOT: return "ERROR_SXS_XML_E_MISSINGROOT";
+    case ERROR_SXS_XML_E_UNEXPECTEDEOF: return "ERROR_SXS_XML_E_UNEXPECTEDEOF";
+    case ERROR_SXS_XML_E_BADPEREFINSUBSET: return "ERROR_SXS_XML_E_BADPEREFINSUBSET";
+    case ERROR_SXS_XML_E_UNCLOSEDSTARTTAG: return "ERROR_SXS_XML_E_UNCLOSEDSTARTTAG";
+    case ERROR_SXS_XML_E_UNCLOSEDENDTAG: return "ERROR_SXS_XML_E_UNCLOSEDENDTAG";
+    case ERROR_SXS_XML_E_UNCLOSEDSTRING: return "ERROR_SXS_XML_E_UNCLOSEDSTRING";
+    case ERROR_SXS_XML_E_UNCLOSEDCOMMENT: return "ERROR_SXS_XML_E_UNCLOSEDCOMMENT";
+    case ERROR_SXS_XML_E_UNCLOSEDDECL: return "ERROR_SXS_XML_E_UNCLOSEDDECL";
+    case ERROR_SXS_XML_E_UNCLOSEDCDATA: return "ERROR_SXS_XML_E_UNCLOSEDCDATA";
+    case ERROR_SXS_XML_E_RESERVEDNAMESPACE: return "ERROR_SXS_XML_E_RESERVEDNAMESPACE";
+    case ERROR_SXS_XML_E_INVALIDENCODING: return "ERROR_SXS_XML_E_INVALIDENCODING";
+    case ERROR_SXS_XML_E_INVALIDSWITCH: return "ERROR_SXS_XML_E_INVALIDSWITCH";
+    case ERROR_SXS_XML_E_BADXMLCASE: return "ERROR_SXS_XML_E_BADXMLCASE";
+    case ERROR_SXS_XML_E_INVALID_STANDALONE: return "ERROR_SXS_XML_E_INVALID_STANDALONE";
+    case ERROR_SXS_XML_E_UNEXPECTED_STANDALONE: return "ERROR_SXS_XML_E_UNEXPECTED_STANDALONE";
+    case ERROR_SXS_XML_E_INVALID_VERSION: return "ERROR_SXS_XML_E_INVALID_VERSION";
+    case ERROR_SXS_XML_E_MISSINGEQUALS: return "ERROR_SXS_XML_E_MISSINGEQUALS";
+    case ERROR_SXS_PROTECTION_RECOVERY_FAILED: return "ERROR_SXS_PROTECTION_RECOVERY_FAILED";
+    case ERROR_SXS_PROTECTION_PUBLIC_KEY_TOO_SHORT: return "ERROR_SXS_PROTECTION_PUBLIC_KEY_TOO_SHORT";
+    case ERROR_SXS_PROTECTION_CATALOG_NOT_VALID: return "ERROR_SXS_PROTECTION_CATALOG_NOT_VALID";
+    case ERROR_SXS_UNTRANSLATABLE_HRESULT: return "ERROR_SXS_UNTRANSLATABLE_HRESULT";
+    case ERROR_SXS_PROTECTION_CATALOG_FILE_MISSING: return "ERROR_SXS_PROTECTION_CATALOG_FILE_MISSING";
+    case ERROR_SXS_MISSING_ASSEMBLY_IDENTITY_ATTRIBUTE: return "ERROR_SXS_MISSING_ASSEMBLY_IDENTITY_ATTRIBUTE";
+    case ERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE_NAME: return "ERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE_NAME";
+    case ERROR_SXS_ASSEMBLY_MISSING: return "ERROR_SXS_ASSEMBLY_MISSING";
+    case ERROR_SXS_CORRUPT_ACTIVATION_STACK: return "ERROR_SXS_CORRUPT_ACTIVATION_STACK";
+    case ERROR_SXS_CORRUPTION: return "ERROR_SXS_CORRUPTION";
+    case ERROR_SXS_EARLY_DEACTIVATION: return "ERROR_SXS_EARLY_DEACTIVATION";
+    case ERROR_SXS_INVALID_DEACTIVATION: return "ERROR_SXS_INVALID_DEACTIVATION";
+    case ERROR_SXS_MULTIPLE_DEACTIVATION: return "ERROR_SXS_MULTIPLE_DEACTIVATION";
+    case ERROR_SXS_PROCESS_TERMINATION_REQUESTED: return "ERROR_SXS_PROCESS_TERMINATION_REQUESTED";
+    case ERROR_SXS_RELEASE_ACTIVATION_CONTEXT: return "ERROR_SXS_RELEASE_ACTIVATION_CONTEXT";
+    case ERROR_SXS_SYSTEM_DEFAULT_ACTIVATION_CONTEXT_EMPTY: return "ERROR_SXS_SYSTEM_DEFAULT_ACTIVATION_CONTEXT_EMPTY";
+    case ERROR_SXS_INVALID_IDENTITY_ATTRIBUTE_VALUE: return "ERROR_SXS_INVALID_IDENTITY_ATTRIBUTE_VALUE";
+    case ERROR_SXS_INVALID_IDENTITY_ATTRIBUTE_NAME: return "ERROR_SXS_INVALID_IDENTITY_ATTRIBUTE_NAME";
+    case ERROR_SXS_IDENTITY_DUPLICATE_ATTRIBUTE: return "ERROR_SXS_IDENTITY_DUPLICATE_ATTRIBUTE";
+    case ERROR_SXS_IDENTITY_PARSE_ERROR: return "ERROR_SXS_IDENTITY_PARSE_ERROR";
+    case ERROR_MALFORMED_SUBSTITUTION_STRING: return "ERROR_MALFORMED_SUBSTITUTION_STRING";
+    case ERROR_SXS_INCORRECT_PUBLIC_KEY_TOKEN: return "ERROR_SXS_INCORRECT_PUBLIC_KEY_TOKEN";
+    case ERROR_UNMAPPED_SUBSTITUTION_STRING: return "ERROR_UNMAPPED_SUBSTITUTION_STRING";
+    case ERROR_SXS_ASSEMBLY_NOT_LOCKED: return "ERROR_SXS_ASSEMBLY_NOT_LOCKED";
+    case ERROR_SXS_COMPONENT_STORE_CORRUPT: return "ERROR_SXS_COMPONENT_STORE_CORRUPT";
+    case ERROR_ADVANCED_INSTALLER_FAILED: return "ERROR_ADVANCED_INSTALLER_FAILED";
+    case ERROR_XML_ENCODING_MISMATCH: return "ERROR_XML_ENCODING_MISMATCH";
+    case ERROR_SXS_MANIFEST_IDENTITY_SAME_BUT_CONTENTS_DIFFERENT: return "ERROR_SXS_MANIFEST_IDENTITY_SAME_BUT_CONTENTS_DIFFERENT";
+    case ERROR_SXS_IDENTITIES_DIFFERENT: return "ERROR_SXS_IDENTITIES_DIFFERENT";
+    case ERROR_SXS_ASSEMBLY_IS_NOT_A_DEPLOYMENT: return "ERROR_SXS_ASSEMBLY_IS_NOT_A_DEPLOYMENT";
+    case ERROR_SXS_FILE_NOT_PART_OF_ASSEMBLY: return "ERROR_SXS_FILE_NOT_PART_OF_ASSEMBLY";
+    case ERROR_SXS_MANIFEST_TOO_BIG: return "ERROR_SXS_MANIFEST_TOO_BIG";
+    case ERROR_SXS_SETTING_NOT_REGISTERED: return "ERROR_SXS_SETTING_NOT_REGISTERED";
+    case ERROR_SXS_TRANSACTION_CLOSURE_INCOMPLETE: return "ERROR_SXS_TRANSACTION_CLOSURE_INCOMPLETE";
+    case ERROR_SMI_PRIMITIVE_INSTALLER_FAILED: return "ERROR_SMI_PRIMITIVE_INSTALLER_FAILED";
+    case ERROR_GENERIC_COMMAND_FAILED: return "ERROR_GENERIC_COMMAND_FAILED";
+    case ERROR_SXS_FILE_HASH_MISSING: return "ERROR_SXS_FILE_HASH_MISSING";
+    case ERROR_IPSEC_QM_POLICY_EXISTS: return "ERROR_IPSEC_QM_POLICY_EXISTS";
+    case ERROR_IPSEC_QM_POLICY_NOT_FOUND: return "ERROR_IPSEC_QM_POLICY_NOT_FOUND";
+    case ERROR_IPSEC_QM_POLICY_IN_USE: return "ERROR_IPSEC_QM_POLICY_IN_USE";
+    case ERROR_IPSEC_MM_POLICY_EXISTS: return "ERROR_IPSEC_MM_POLICY_EXISTS";
+    case ERROR_IPSEC_MM_POLICY_NOT_FOUND: return "ERROR_IPSEC_MM_POLICY_NOT_FOUND";
+    case ERROR_IPSEC_MM_POLICY_IN_USE: return "ERROR_IPSEC_MM_POLICY_IN_USE";
+    case ERROR_IPSEC_MM_FILTER_EXISTS: return "ERROR_IPSEC_MM_FILTER_EXISTS";
+    case ERROR_IPSEC_MM_FILTER_NOT_FOUND: return "ERROR_IPSEC_MM_FILTER_NOT_FOUND";
+    case ERROR_IPSEC_TRANSPORT_FILTER_EXISTS: return "ERROR_IPSEC_TRANSPORT_FILTER_EXISTS";
+    case ERROR_IPSEC_TRANSPORT_FILTER_NOT_FOUND: return "ERROR_IPSEC_TRANSPORT_FILTER_NOT_FOUND";
+    case ERROR_IPSEC_MM_AUTH_EXISTS: return "ERROR_IPSEC_MM_AUTH_EXISTS";
+    case ERROR_IPSEC_MM_AUTH_NOT_FOUND: return "ERROR_IPSEC_MM_AUTH_NOT_FOUND";
+    case ERROR_IPSEC_MM_AUTH_IN_USE: return "ERROR_IPSEC_MM_AUTH_IN_USE";
+    case ERROR_IPSEC_DEFAULT_MM_POLICY_NOT_FOUND: return "ERROR_IPSEC_DEFAULT_MM_POLICY_NOT_FOUND";
+    case ERROR_IPSEC_DEFAULT_MM_AUTH_NOT_FOUND: return "ERROR_IPSEC_DEFAULT_MM_AUTH_NOT_FOUND";
+    case ERROR_IPSEC_DEFAULT_QM_POLICY_NOT_FOUND: return "ERROR_IPSEC_DEFAULT_QM_POLICY_NOT_FOUND";
+    case ERROR_IPSEC_TUNNEL_FILTER_EXISTS: return "ERROR_IPSEC_TUNNEL_FILTER_EXISTS";
+    case ERROR_IPSEC_TUNNEL_FILTER_NOT_FOUND: return "ERROR_IPSEC_TUNNEL_FILTER_NOT_FOUND";
+    case ERROR_IPSEC_MM_FILTER_PENDING_DELETION: return "ERROR_IPSEC_MM_FILTER_PENDING_DELETION";
+    case ERROR_IPSEC_TRANSPORT_FILTER_PENDING_DELETION: return "ERROR_IPSEC_TRANSPORT_FILTER_PENDING_DELETION";
+    case ERROR_IPSEC_TUNNEL_FILTER_PENDING_DELETION: return "ERROR_IPSEC_TUNNEL_FILTER_PENDING_DELETION";
+    case ERROR_IPSEC_MM_POLICY_PENDING_DELETION: return "ERROR_IPSEC_MM_POLICY_PENDING_DELETION";
+    case ERROR_IPSEC_MM_AUTH_PENDING_DELETION: return "ERROR_IPSEC_MM_AUTH_PENDING_DELETION";
+    case ERROR_IPSEC_QM_POLICY_PENDING_DELETION: return "ERROR_IPSEC_QM_POLICY_PENDING_DELETION";
+    case ERROR_IPSEC_IKE_NEG_STATUS_BEGIN: return "ERROR_IPSEC_IKE_NEG_STATUS_BEGIN";
+    case ERROR_IPSEC_IKE_AUTH_FAIL: return "ERROR_IPSEC_IKE_AUTH_FAIL";
+    case ERROR_IPSEC_IKE_ATTRIB_FAIL: return "ERROR_IPSEC_IKE_ATTRIB_FAIL";
+    case ERROR_IPSEC_IKE_NEGOTIATION_PENDING: return "ERROR_IPSEC_IKE_NEGOTIATION_PENDING";
+    case ERROR_IPSEC_IKE_GENERAL_PROCESSING_ERROR: return "ERROR_IPSEC_IKE_GENERAL_PROCESSING_ERROR";
+    case ERROR_IPSEC_IKE_TIMED_OUT: return "ERROR_IPSEC_IKE_TIMED_OUT";
+    case ERROR_IPSEC_IKE_NO_CERT: return "ERROR_IPSEC_IKE_NO_CERT";
+    case ERROR_IPSEC_IKE_SA_DELETED: return "ERROR_IPSEC_IKE_SA_DELETED";
+    case ERROR_IPSEC_IKE_SA_REAPED: return "ERROR_IPSEC_IKE_SA_REAPED";
+    case ERROR_IPSEC_IKE_MM_ACQUIRE_DROP: return "ERROR_IPSEC_IKE_MM_ACQUIRE_DROP";
+    case ERROR_IPSEC_IKE_QM_ACQUIRE_DROP: return "ERROR_IPSEC_IKE_QM_ACQUIRE_DROP";
+    case ERROR_IPSEC_IKE_QUEUE_DROP_MM: return "ERROR_IPSEC_IKE_QUEUE_DROP_MM";
+    case ERROR_IPSEC_IKE_QUEUE_DROP_NO_MM: return "ERROR_IPSEC_IKE_QUEUE_DROP_NO_MM";
+    case ERROR_IPSEC_IKE_DROP_NO_RESPONSE: return "ERROR_IPSEC_IKE_DROP_NO_RESPONSE";
+    case ERROR_IPSEC_IKE_MM_DELAY_DROP: return "ERROR_IPSEC_IKE_MM_DELAY_DROP";
+    case ERROR_IPSEC_IKE_QM_DELAY_DROP: return "ERROR_IPSEC_IKE_QM_DELAY_DROP";
+    case ERROR_IPSEC_IKE_ERROR: return "ERROR_IPSEC_IKE_ERROR";
+    case ERROR_IPSEC_IKE_CRL_FAILED: return "ERROR_IPSEC_IKE_CRL_FAILED";
+    case ERROR_IPSEC_IKE_INVALID_KEY_USAGE: return "ERROR_IPSEC_IKE_INVALID_KEY_USAGE";
+    case ERROR_IPSEC_IKE_INVALID_CERT_TYPE: return "ERROR_IPSEC_IKE_INVALID_CERT_TYPE";
+    case ERROR_IPSEC_IKE_NO_PRIVATE_KEY: return "ERROR_IPSEC_IKE_NO_PRIVATE_KEY";
+    case ERROR_IPSEC_IKE_DH_FAIL: return "ERROR_IPSEC_IKE_DH_FAIL";
+    case ERROR_IPSEC_IKE_INVALID_HEADER: return "ERROR_IPSEC_IKE_INVALID_HEADER";
+    case ERROR_IPSEC_IKE_NO_POLICY: return "ERROR_IPSEC_IKE_NO_POLICY";
+    case ERROR_IPSEC_IKE_INVALID_SIGNATURE: return "ERROR_IPSEC_IKE_INVALID_SIGNATURE";
+    case ERROR_IPSEC_IKE_KERBEROS_ERROR: return "ERROR_IPSEC_IKE_KERBEROS_ERROR";
+    case ERROR_IPSEC_IKE_NO_PUBLIC_KEY: return "ERROR_IPSEC_IKE_NO_PUBLIC_KEY";
+    case ERROR_IPSEC_IKE_PROCESS_ERR: return "ERROR_IPSEC_IKE_PROCESS_ERR";
+    case ERROR_IPSEC_IKE_PROCESS_ERR_SA: return "ERROR_IPSEC_IKE_PROCESS_ERR_SA";
+    case ERROR_IPSEC_IKE_PROCESS_ERR_PROP: return "ERROR_IPSEC_IKE_PROCESS_ERR_PROP";
+    case ERROR_IPSEC_IKE_PROCESS_ERR_TRANS: return "ERROR_IPSEC_IKE_PROCESS_ERR_TRANS";
+    case ERROR_IPSEC_IKE_PROCESS_ERR_KE: return "ERROR_IPSEC_IKE_PROCESS_ERR_KE";
+    case ERROR_IPSEC_IKE_PROCESS_ERR_ID: return "ERROR_IPSEC_IKE_PROCESS_ERR_ID";
+    case ERROR_IPSEC_IKE_PROCESS_ERR_CERT: return "ERROR_IPSEC_IKE_PROCESS_ERR_CERT";
+    case ERROR_IPSEC_IKE_PROCESS_ERR_CERT_REQ: return "ERROR_IPSEC_IKE_PROCESS_ERR_CERT_REQ";
+    case ERROR_IPSEC_IKE_PROCESS_ERR_HASH: return "ERROR_IPSEC_IKE_PROCESS_ERR_HASH";
+    case ERROR_IPSEC_IKE_PROCESS_ERR_SIG: return "ERROR_IPSEC_IKE_PROCESS_ERR_SIG";
+    case ERROR_IPSEC_IKE_PROCESS_ERR_NONCE: return "ERROR_IPSEC_IKE_PROCESS_ERR_NONCE";
+    case ERROR_IPSEC_IKE_PROCESS_ERR_NOTIFY: return "ERROR_IPSEC_IKE_PROCESS_ERR_NOTIFY";
+    case ERROR_IPSEC_IKE_PROCESS_ERR_DELETE: return "ERROR_IPSEC_IKE_PROCESS_ERR_DELETE";
+    case ERROR_IPSEC_IKE_PROCESS_ERR_VENDOR: return "ERROR_IPSEC_IKE_PROCESS_ERR_VENDOR";
+    case ERROR_IPSEC_IKE_INVALID_PAYLOAD: return "ERROR_IPSEC_IKE_INVALID_PAYLOAD";
+    case ERROR_IPSEC_IKE_LOAD_SOFT_SA: return "ERROR_IPSEC_IKE_LOAD_SOFT_SA";
+    case ERROR_IPSEC_IKE_SOFT_SA_TORN_DOWN: return "ERROR_IPSEC_IKE_SOFT_SA_TORN_DOWN";
+    case ERROR_IPSEC_IKE_INVALID_COOKIE: return "ERROR_IPSEC_IKE_INVALID_COOKIE";
+    case ERROR_IPSEC_IKE_NO_PEER_CERT: return "ERROR_IPSEC_IKE_NO_PEER_CERT";
+    case ERROR_IPSEC_IKE_PEER_CRL_FAILED: return "ERROR_IPSEC_IKE_PEER_CRL_FAILED";
+    case ERROR_IPSEC_IKE_POLICY_CHANGE: return "ERROR_IPSEC_IKE_POLICY_CHANGE";
+    case ERROR_IPSEC_IKE_NO_MM_POLICY: return "ERROR_IPSEC_IKE_NO_MM_POLICY";
+    case ERROR_IPSEC_IKE_NOTCBPRIV: return "ERROR_IPSEC_IKE_NOTCBPRIV";
+    case ERROR_IPSEC_IKE_SECLOADFAIL: return "ERROR_IPSEC_IKE_SECLOADFAIL";
+    case ERROR_IPSEC_IKE_FAILSSPINIT: return "ERROR_IPSEC_IKE_FAILSSPINIT";
+    case ERROR_IPSEC_IKE_FAILQUERYSSP: return "ERROR_IPSEC_IKE_FAILQUERYSSP";
+    case ERROR_IPSEC_IKE_SRVACQFAIL: return "ERROR_IPSEC_IKE_SRVACQFAIL";
+    case ERROR_IPSEC_IKE_SRVQUERYCRED: return "ERROR_IPSEC_IKE_SRVQUERYCRED";
+    case ERROR_IPSEC_IKE_GETSPIFAIL: return "ERROR_IPSEC_IKE_GETSPIFAIL";
+    case ERROR_IPSEC_IKE_INVALID_FILTER: return "ERROR_IPSEC_IKE_INVALID_FILTER";
+    case ERROR_IPSEC_IKE_OUT_OF_MEMORY: return "ERROR_IPSEC_IKE_OUT_OF_MEMORY";
+    case ERROR_IPSEC_IKE_ADD_UPDATE_KEY_FAILED: return "ERROR_IPSEC_IKE_ADD_UPDATE_KEY_FAILED";
+    case ERROR_IPSEC_IKE_INVALID_POLICY: return "ERROR_IPSEC_IKE_INVALID_POLICY";
+    case ERROR_IPSEC_IKE_UNKNOWN_DOI: return "ERROR_IPSEC_IKE_UNKNOWN_DOI";
+    case ERROR_IPSEC_IKE_INVALID_SITUATION: return "ERROR_IPSEC_IKE_INVALID_SITUATION";
+    case ERROR_IPSEC_IKE_DH_FAILURE: return "ERROR_IPSEC_IKE_DH_FAILURE";
+    case ERROR_IPSEC_IKE_INVALID_GROUP: return "ERROR_IPSEC_IKE_INVALID_GROUP";
+    case ERROR_IPSEC_IKE_ENCRYPT: return "ERROR_IPSEC_IKE_ENCRYPT";
+    case ERROR_IPSEC_IKE_DECRYPT: return "ERROR_IPSEC_IKE_DECRYPT";
+    case ERROR_IPSEC_IKE_POLICY_MATCH: return "ERROR_IPSEC_IKE_POLICY_MATCH";
+    case ERROR_IPSEC_IKE_UNSUPPORTED_ID: return "ERROR_IPSEC_IKE_UNSUPPORTED_ID";
+    case ERROR_IPSEC_IKE_INVALID_HASH: return "ERROR_IPSEC_IKE_INVALID_HASH";
+    case ERROR_IPSEC_IKE_INVALID_HASH_ALG: return "ERROR_IPSEC_IKE_INVALID_HASH_ALG";
+    case ERROR_IPSEC_IKE_INVALID_HASH_SIZE: return "ERROR_IPSEC_IKE_INVALID_HASH_SIZE";
+    case ERROR_IPSEC_IKE_INVALID_ENCRYPT_ALG: return "ERROR_IPSEC_IKE_INVALID_ENCRYPT_ALG";
+    case ERROR_IPSEC_IKE_INVALID_AUTH_ALG: return "ERROR_IPSEC_IKE_INVALID_AUTH_ALG";
+    case ERROR_IPSEC_IKE_INVALID_SIG: return "ERROR_IPSEC_IKE_INVALID_SIG";
+    case ERROR_IPSEC_IKE_LOAD_FAILED: return "ERROR_IPSEC_IKE_LOAD_FAILED";
+    case ERROR_IPSEC_IKE_RPC_DELETE: return "ERROR_IPSEC_IKE_RPC_DELETE";
+    case ERROR_IPSEC_IKE_BENIGN_REINIT: return "ERROR_IPSEC_IKE_BENIGN_REINIT";
+    case ERROR_IPSEC_IKE_INVALID_RESPONDER_LIFETIME_NOTIFY: return "ERROR_IPSEC_IKE_INVALID_RESPONDER_LIFETIME_NOTIFY";
+    case ERROR_IPSEC_IKE_INVALID_CERT_KEYLEN: return "ERROR_IPSEC_IKE_INVALID_CERT_KEYLEN";
+    case ERROR_IPSEC_IKE_MM_LIMIT: return "ERROR_IPSEC_IKE_MM_LIMIT";
+    case ERROR_IPSEC_IKE_NEGOTIATION_DISABLED: return "ERROR_IPSEC_IKE_NEGOTIATION_DISABLED";
+    case ERROR_IPSEC_IKE_QM_LIMIT: return "ERROR_IPSEC_IKE_QM_LIMIT";
+    case ERROR_IPSEC_IKE_MM_EXPIRED: return "ERROR_IPSEC_IKE_MM_EXPIRED";
+    case ERROR_IPSEC_IKE_PEER_MM_ASSUMED_INVALID: return "ERROR_IPSEC_IKE_PEER_MM_ASSUMED_INVALID";
+    case ERROR_IPSEC_IKE_CERT_CHAIN_POLICY_MISMATCH: return "ERROR_IPSEC_IKE_CERT_CHAIN_POLICY_MISMATCH";
+    case ERROR_IPSEC_IKE_UNEXPECTED_MESSAGE_ID: return "ERROR_IPSEC_IKE_UNEXPECTED_MESSAGE_ID";
+    case ERROR_IPSEC_IKE_INVALID_AUTH_PAYLOAD: return "ERROR_IPSEC_IKE_INVALID_AUTH_PAYLOAD";
+    case ERROR_IPSEC_IKE_DOS_COOKIE_SENT: return "ERROR_IPSEC_IKE_DOS_COOKIE_SENT";
+    case ERROR_IPSEC_IKE_SHUTTING_DOWN: return "ERROR_IPSEC_IKE_SHUTTING_DOWN";
+    case ERROR_IPSEC_IKE_CGA_AUTH_FAILED: return "ERROR_IPSEC_IKE_CGA_AUTH_FAILED";
+    case ERROR_IPSEC_IKE_PROCESS_ERR_NATOA: return "ERROR_IPSEC_IKE_PROCESS_ERR_NATOA";
+    case ERROR_IPSEC_IKE_INVALID_MM_FOR_QM: return "ERROR_IPSEC_IKE_INVALID_MM_FOR_QM";
+    case ERROR_IPSEC_IKE_QM_EXPIRED: return "ERROR_IPSEC_IKE_QM_EXPIRED";
+    case ERROR_IPSEC_IKE_TOO_MANY_FILTERS: return "ERROR_IPSEC_IKE_TOO_MANY_FILTERS";
+    case ERROR_IPSEC_IKE_NEG_STATUS_END: return "ERROR_IPSEC_IKE_NEG_STATUS_END";
+    case ERROR_IPSEC_IKE_KILL_DUMMY_NAP_TUNNEL: return "ERROR_IPSEC_IKE_KILL_DUMMY_NAP_TUNNEL";
+    case ERROR_IPSEC_IKE_INNER_IP_ASSIGNMENT_FAILURE: return "ERROR_IPSEC_IKE_INNER_IP_ASSIGNMENT_FAILURE";
+    case ERROR_IPSEC_IKE_REQUIRE_CP_PAYLOAD_MISSING: return "ERROR_IPSEC_IKE_REQUIRE_CP_PAYLOAD_MISSING";
+    case ERROR_IPSEC_KEY_MODULE_IMPERSONATION_NEGOTIATION_PENDING: return "ERROR_IPSEC_KEY_MODULE_IMPERSONATION_NEGOTIATION_PENDING";
+    case ERROR_IPSEC_IKE_COEXISTENCE_SUPPRESS: return "ERROR_IPSEC_IKE_COEXISTENCE_SUPPRESS";
+    case ERROR_IPSEC_IKE_RATELIMIT_DROP: return "ERROR_IPSEC_IKE_RATELIMIT_DROP";
+    case ERROR_IPSEC_IKE_PEER_DOESNT_SUPPORT_MOBIKE: return "ERROR_IPSEC_IKE_PEER_DOESNT_SUPPORT_MOBIKE";
+    case ERROR_IPSEC_IKE_AUTHORIZATION_FAILURE: return "ERROR_IPSEC_IKE_AUTHORIZATION_FAILURE";
+    case ERROR_IPSEC_IKE_STRONG_CRED_AUTHORIZATION_FAILURE: return "ERROR_IPSEC_IKE_STRONG_CRED_AUTHORIZATION_FAILURE";
+    case ERROR_IPSEC_IKE_AUTHORIZATION_FAILURE_WITH_OPTIONAL_RETRY: return "ERROR_IPSEC_IKE_AUTHORIZATION_FAILURE_WITH_OPTIONAL_RETRY";
+    case ERROR_IPSEC_IKE_STRONG_CRED_AUTHORIZATION_AND_CERTMAP_FAILURE: return "ERROR_IPSEC_IKE_STRONG_CRED_AUTHORIZATION_AND_CERTMAP_FAILURE";
+    case ERROR_IPSEC_IKE_NEG_STATUS_EXTENDED_END: return "ERROR_IPSEC_IKE_NEG_STATUS_EXTENDED_END";
+    case ERROR_IPSEC_BAD_SPI: return "ERROR_IPSEC_BAD_SPI";
+    case ERROR_IPSEC_SA_LIFETIME_EXPIRED: return "ERROR_IPSEC_SA_LIFETIME_EXPIRED";
+    case ERROR_IPSEC_WRONG_SA: return "ERROR_IPSEC_WRONG_SA";
+    case ERROR_IPSEC_REPLAY_CHECK_FAILED: return "ERROR_IPSEC_REPLAY_CHECK_FAILED";
+    case ERROR_IPSEC_INVALID_PACKET: return "ERROR_IPSEC_INVALID_PACKET";
+    case ERROR_IPSEC_INTEGRITY_CHECK_FAILED: return "ERROR_IPSEC_INTEGRITY_CHECK_FAILED";
+    case ERROR_IPSEC_CLEAR_TEXT_DROP: return "ERROR_IPSEC_CLEAR_TEXT_DROP";
+    case ERROR_IPSEC_AUTH_FIREWALL_DROP: return "ERROR_IPSEC_AUTH_FIREWALL_DROP";
+    case ERROR_IPSEC_THROTTLE_DROP: return "ERROR_IPSEC_THROTTLE_DROP";
+    case ERROR_IPSEC_DOSP_BLOCK: return "ERROR_IPSEC_DOSP_BLOCK";
+    case ERROR_IPSEC_DOSP_RECEIVED_MULTICAST: return "ERROR_IPSEC_DOSP_RECEIVED_MULTICAST";
+    case ERROR_IPSEC_DOSP_INVALID_PACKET: return "ERROR_IPSEC_DOSP_INVALID_PACKET";
+    case ERROR_IPSEC_DOSP_STATE_LOOKUP_FAILED: return "ERROR_IPSEC_DOSP_STATE_LOOKUP_FAILED";
+    case ERROR_IPSEC_DOSP_MAX_ENTRIES: return "ERROR_IPSEC_DOSP_MAX_ENTRIES";
+    case ERROR_IPSEC_DOSP_KEYMOD_NOT_ALLOWED: return "ERROR_IPSEC_DOSP_KEYMOD_NOT_ALLOWED";
+    case ERROR_IPSEC_DOSP_NOT_INSTALLED: return "ERROR_IPSEC_DOSP_NOT_INSTALLED";
+    case ERROR_IPSEC_DOSP_MAX_PER_IP_RATELIMIT_QUEUES: return "ERROR_IPSEC_DOSP_MAX_PER_IP_RATELIMIT_QUEUES";
+    case ERROR_EVT_INVALID_CHANNEL_PATH: return "ERROR_EVT_INVALID_CHANNEL_PATH";
+    case ERROR_EVT_INVALID_QUERY: return "ERROR_EVT_INVALID_QUERY";
+    case ERROR_EVT_PUBLISHER_METADATA_NOT_FOUND: return "ERROR_EVT_PUBLISHER_METADATA_NOT_FOUND";
+    case ERROR_EVT_EVENT_TEMPLATE_NOT_FOUND: return "ERROR_EVT_EVENT_TEMPLATE_NOT_FOUND";
+    case ERROR_EVT_INVALID_PUBLISHER_NAME: return "ERROR_EVT_INVALID_PUBLISHER_NAME";
+    case ERROR_EVT_INVALID_EVENT_DATA: return "ERROR_EVT_INVALID_EVENT_DATA";
+    case ERROR_EVT_CHANNEL_NOT_FOUND: return "ERROR_EVT_CHANNEL_NOT_FOUND";
+    case ERROR_EVT_MALFORMED_XML_TEXT: return "ERROR_EVT_MALFORMED_XML_TEXT";
+    case ERROR_EVT_SUBSCRIPTION_TO_DIRECT_CHANNEL: return "ERROR_EVT_SUBSCRIPTION_TO_DIRECT_CHANNEL";
+    case ERROR_EVT_CONFIGURATION_ERROR: return "ERROR_EVT_CONFIGURATION_ERROR";
+    case ERROR_EVT_QUERY_RESULT_STALE: return "ERROR_EVT_QUERY_RESULT_STALE";
+    case ERROR_EVT_QUERY_RESULT_INVALID_POSITION: return "ERROR_EVT_QUERY_RESULT_INVALID_POSITION";
+    case ERROR_EVT_NON_VALIDATING_MSXML: return "ERROR_EVT_NON_VALIDATING_MSXML";
+    case ERROR_EVT_FILTER_ALREADYSCOPED: return "ERROR_EVT_FILTER_ALREADYSCOPED";
+    case ERROR_EVT_FILTER_NOTELTSET: return "ERROR_EVT_FILTER_NOTELTSET";
+    case ERROR_EVT_FILTER_INVARG: return "ERROR_EVT_FILTER_INVARG";
+    case ERROR_EVT_FILTER_INVTEST: return "ERROR_EVT_FILTER_INVTEST";
+    case ERROR_EVT_FILTER_INVTYPE: return "ERROR_EVT_FILTER_INVTYPE";
+    case ERROR_EVT_FILTER_PARSEERR: return "ERROR_EVT_FILTER_PARSEERR";
+    case ERROR_EVT_FILTER_UNSUPPORTEDOP: return "ERROR_EVT_FILTER_UNSUPPORTEDOP";
+    case ERROR_EVT_FILTER_UNEXPECTEDTOKEN: return "ERROR_EVT_FILTER_UNEXPECTEDTOKEN";
+    case ERROR_EVT_INVALID_OPERATION_OVER_ENABLED_DIRECT_CHANNEL: return "ERROR_EVT_INVALID_OPERATION_OVER_ENABLED_DIRECT_CHANNEL";
+    case ERROR_EVT_INVALID_CHANNEL_PROPERTY_VALUE: return "ERROR_EVT_INVALID_CHANNEL_PROPERTY_VALUE";
+    case ERROR_EVT_INVALID_PUBLISHER_PROPERTY_VALUE: return "ERROR_EVT_INVALID_PUBLISHER_PROPERTY_VALUE";
+    case ERROR_EVT_CHANNEL_CANNOT_ACTIVATE: return "ERROR_EVT_CHANNEL_CANNOT_ACTIVATE";
+    case ERROR_EVT_FILTER_TOO_COMPLEX: return "ERROR_EVT_FILTER_TOO_COMPLEX";
+    case ERROR_EVT_MESSAGE_NOT_FOUND: return "ERROR_EVT_MESSAGE_NOT_FOUND";
+    case ERROR_EVT_MESSAGE_ID_NOT_FOUND: return "ERROR_EVT_MESSAGE_ID_NOT_FOUND";
+    case ERROR_EVT_UNRESOLVED_VALUE_INSERT: return "ERROR_EVT_UNRESOLVED_VALUE_INSERT";
+    case ERROR_EVT_UNRESOLVED_PARAMETER_INSERT: return "ERROR_EVT_UNRESOLVED_PARAMETER_INSERT";
+    case ERROR_EVT_MAX_INSERTS_REACHED: return "ERROR_EVT_MAX_INSERTS_REACHED";
+    case ERROR_EVT_EVENT_DEFINITION_NOT_FOUND: return "ERROR_EVT_EVENT_DEFINITION_NOT_FOUND";
+    case ERROR_EVT_MESSAGE_LOCALE_NOT_FOUND: return "ERROR_EVT_MESSAGE_LOCALE_NOT_FOUND";
+    case ERROR_EVT_VERSION_TOO_OLD: return "ERROR_EVT_VERSION_TOO_OLD";
+    case ERROR_EVT_VERSION_TOO_NEW: return "ERROR_EVT_VERSION_TOO_NEW";
+    case ERROR_EVT_CANNOT_OPEN_CHANNEL_OF_QUERY: return "ERROR_EVT_CANNOT_OPEN_CHANNEL_OF_QUERY";
+    case ERROR_EVT_PUBLISHER_DISABLED: return "ERROR_EVT_PUBLISHER_DISABLED";
+    case ERROR_EVT_FILTER_OUT_OF_RANGE: return "ERROR_EVT_FILTER_OUT_OF_RANGE";
+    case ERROR_EC_SUBSCRIPTION_CANNOT_ACTIVATE: return "ERROR_EC_SUBSCRIPTION_CANNOT_ACTIVATE";
+    case ERROR_EC_LOG_DISABLED: return "ERROR_EC_LOG_DISABLED";
+    case ERROR_EC_CIRCULAR_FORWARDING: return "ERROR_EC_CIRCULAR_FORWARDING";
+    case ERROR_EC_CREDSTORE_FULL: return "ERROR_EC_CREDSTORE_FULL";
+    case ERROR_EC_CRED_NOT_FOUND: return "ERROR_EC_CRED_NOT_FOUND";
+    case ERROR_EC_NO_ACTIVE_CHANNEL: return "ERROR_EC_NO_ACTIVE_CHANNEL";
+    case ERROR_MUI_FILE_NOT_FOUND: return "ERROR_MUI_FILE_NOT_FOUND";
+    case ERROR_MUI_INVALID_FILE: return "ERROR_MUI_INVALID_FILE";
+    case ERROR_MUI_INVALID_RC_CONFIG: return "ERROR_MUI_INVALID_RC_CONFIG";
+    case ERROR_MUI_INVALID_LOCALE_NAME: return "ERROR_MUI_INVALID_LOCALE_NAME";
+    case ERROR_MUI_INVALID_ULTIMATEFALLBACK_NAME: return "ERROR_MUI_INVALID_ULTIMATEFALLBACK_NAME";
+    case ERROR_MUI_FILE_NOT_LOADED: return "ERROR_MUI_FILE_NOT_LOADED";
+    case ERROR_RESOURCE_ENUM_USER_STOP: return "ERROR_RESOURCE_ENUM_USER_STOP";
+    case ERROR_MUI_INTLSETTINGS_UILANG_NOT_INSTALLED: return "ERROR_MUI_INTLSETTINGS_UILANG_NOT_INSTALLED";
+    case ERROR_MUI_INTLSETTINGS_INVALID_LOCALE_NAME: return "ERROR_MUI_INTLSETTINGS_INVALID_LOCALE_NAME";
+    case ERROR_MRM_RUNTIME_NO_DEFAULT_OR_NEUTRAL_RESOURCE: return "ERROR_MRM_RUNTIME_NO_DEFAULT_OR_NEUTRAL_RESOURCE";
+    case ERROR_MRM_INVALID_PRICONFIG: return "ERROR_MRM_INVALID_PRICONFIG";
+    case ERROR_MRM_INVALID_FILE_TYPE: return "ERROR_MRM_INVALID_FILE_TYPE";
+    case ERROR_MRM_UNKNOWN_QUALIFIER: return "ERROR_MRM_UNKNOWN_QUALIFIER";
+    case ERROR_MRM_INVALID_QUALIFIER_VALUE: return "ERROR_MRM_INVALID_QUALIFIER_VALUE";
+    case ERROR_MRM_NO_CANDIDATE: return "ERROR_MRM_NO_CANDIDATE";
+    case ERROR_MRM_NO_MATCH_OR_DEFAULT_CANDIDATE: return "ERROR_MRM_NO_MATCH_OR_DEFAULT_CANDIDATE";
+    case ERROR_MRM_RESOURCE_TYPE_MISMATCH: return "ERROR_MRM_RESOURCE_TYPE_MISMATCH";
+    case ERROR_MRM_DUPLICATE_MAP_NAME: return "ERROR_MRM_DUPLICATE_MAP_NAME";
+    case ERROR_MRM_DUPLICATE_ENTRY: return "ERROR_MRM_DUPLICATE_ENTRY";
+    case ERROR_MRM_INVALID_RESOURCE_IDENTIFIER: return "ERROR_MRM_INVALID_RESOURCE_IDENTIFIER";
+    case ERROR_MRM_FILEPATH_TOO_LONG: return "ERROR_MRM_FILEPATH_TOO_LONG";
+    case ERROR_MRM_UNSUPPORTED_DIRECTORY_TYPE: return "ERROR_MRM_UNSUPPORTED_DIRECTORY_TYPE";
+    case ERROR_MRM_INVALID_PRI_FILE: return "ERROR_MRM_INVALID_PRI_FILE";
+    case ERROR_MRM_NAMED_RESOURCE_NOT_FOUND: return "ERROR_MRM_NAMED_RESOURCE_NOT_FOUND";
+    case ERROR_MRM_MAP_NOT_FOUND: return "ERROR_MRM_MAP_NOT_FOUND";
+    case ERROR_MRM_UNSUPPORTED_PROFILE_TYPE: return "ERROR_MRM_UNSUPPORTED_PROFILE_TYPE";
+    case ERROR_MRM_INVALID_QUALIFIER_OPERATOR: return "ERROR_MRM_INVALID_QUALIFIER_OPERATOR";
+    case ERROR_MRM_INDETERMINATE_QUALIFIER_VALUE: return "ERROR_MRM_INDETERMINATE_QUALIFIER_VALUE";
+    case ERROR_MRM_AUTOMERGE_ENABLED: return "ERROR_MRM_AUTOMERGE_ENABLED";
+    case ERROR_MRM_TOO_MANY_RESOURCES: return "ERROR_MRM_TOO_MANY_RESOURCES";
+    case ERROR_MCA_INVALID_CAPABILITIES_STRING: return "ERROR_MCA_INVALID_CAPABILITIES_STRING";
+    case ERROR_MCA_INVALID_VCP_VERSION: return "ERROR_MCA_INVALID_VCP_VERSION";
+    case ERROR_MCA_MONITOR_VIOLATES_MCCS_SPECIFICATION: return "ERROR_MCA_MONITOR_VIOLATES_MCCS_SPECIFICATION";
+    case ERROR_MCA_MCCS_VERSION_MISMATCH: return "ERROR_MCA_MCCS_VERSION_MISMATCH";
+    case ERROR_MCA_UNSUPPORTED_MCCS_VERSION: return "ERROR_MCA_UNSUPPORTED_MCCS_VERSION";
+    case ERROR_MCA_INTERNAL_ERROR: return "ERROR_MCA_INTERNAL_ERROR";
+    case ERROR_MCA_INVALID_TECHNOLOGY_TYPE_RETURNED: return "ERROR_MCA_INVALID_TECHNOLOGY_TYPE_RETURNED";
+    case ERROR_MCA_UNSUPPORTED_COLOR_TEMPERATURE: return "ERROR_MCA_UNSUPPORTED_COLOR_TEMPERATURE";
+    case ERROR_AMBIGUOUS_SYSTEM_DEVICE: return "ERROR_AMBIGUOUS_SYSTEM_DEVICE";
+    case ERROR_SYSTEM_DEVICE_NOT_FOUND: return "ERROR_SYSTEM_DEVICE_NOT_FOUND";
+    case ERROR_HASH_NOT_SUPPORTED: return "ERROR_HASH_NOT_SUPPORTED";
+    case ERROR_HASH_NOT_PRESENT: return "ERROR_HASH_NOT_PRESENT";
+    case ERROR_SECONDARY_IC_PROVIDER_NOT_REGISTERED: return "ERROR_SECONDARY_IC_PROVIDER_NOT_REGISTERED";
+    case ERROR_GPIO_CLIENT_INFORMATION_INVALID: return "ERROR_GPIO_CLIENT_INFORMATION_INVALID";
+    case ERROR_GPIO_VERSION_NOT_SUPPORTED: return "ERROR_GPIO_VERSION_NOT_SUPPORTED";
+    case ERROR_GPIO_INVALID_REGISTRATION_PACKET: return "ERROR_GPIO_INVALID_REGISTRATION_PACKET";
+    case ERROR_GPIO_OPERATION_DENIED: return "ERROR_GPIO_OPERATION_DENIED";
+    case ERROR_GPIO_INCOMPATIBLE_CONNECT_MODE: return "ERROR_GPIO_INCOMPATIBLE_CONNECT_MODE";
+    case ERROR_GPIO_INTERRUPT_ALREADY_UNMASKED: return "ERROR_GPIO_INTERRUPT_ALREADY_UNMASKED";
+    case ERROR_CANNOT_SWITCH_RUNLEVEL: return "ERROR_CANNOT_SWITCH_RUNLEVEL";
+    case ERROR_INVALID_RUNLEVEL_SETTING: return "ERROR_INVALID_RUNLEVEL_SETTING";
+    case ERROR_RUNLEVEL_SWITCH_TIMEOUT: return "ERROR_RUNLEVEL_SWITCH_TIMEOUT";
+    case ERROR_RUNLEVEL_SWITCH_AGENT_TIMEOUT: return "ERROR_RUNLEVEL_SWITCH_AGENT_TIMEOUT";
+    case ERROR_RUNLEVEL_SWITCH_IN_PROGRESS: return "ERROR_RUNLEVEL_SWITCH_IN_PROGRESS";
+    case ERROR_SERVICES_FAILED_AUTOSTART: return "ERROR_SERVICES_FAILED_AUTOSTART";
+    case ERROR_COM_TASK_STOP_PENDING: return "ERROR_COM_TASK_STOP_PENDING";
+    case ERROR_INSTALL_OPEN_PACKAGE_FAILED: return "ERROR_INSTALL_OPEN_PACKAGE_FAILED";
+    case ERROR_INSTALL_PACKAGE_NOT_FOUND: return "ERROR_INSTALL_PACKAGE_NOT_FOUND";
+    case ERROR_INSTALL_INVALID_PACKAGE: return "ERROR_INSTALL_INVALID_PACKAGE";
+    case ERROR_INSTALL_RESOLVE_DEPENDENCY_FAILED: return "ERROR_INSTALL_RESOLVE_DEPENDENCY_FAILED";
+    case ERROR_INSTALL_OUT_OF_DISK_SPACE: return "ERROR_INSTALL_OUT_OF_DISK_SPACE";
+    case ERROR_INSTALL_NETWORK_FAILURE: return "ERROR_INSTALL_NETWORK_FAILURE";
+    case ERROR_INSTALL_REGISTRATION_FAILURE: return "ERROR_INSTALL_REGISTRATION_FAILURE";
+    case ERROR_INSTALL_DEREGISTRATION_FAILURE: return "ERROR_INSTALL_DEREGISTRATION_FAILURE";
+    case ERROR_INSTALL_CANCEL: return "ERROR_INSTALL_CANCEL";
+    case ERROR_INSTALL_FAILED: return "ERROR_INSTALL_FAILED";
+    case ERROR_REMOVE_FAILED: return "ERROR_REMOVE_FAILED";
+    case ERROR_PACKAGE_ALREADY_EXISTS: return "ERROR_PACKAGE_ALREADY_EXISTS";
+    case ERROR_NEEDS_REMEDIATION: return "ERROR_NEEDS_REMEDIATION";
+    case ERROR_INSTALL_PREREQUISITE_FAILED: return "ERROR_INSTALL_PREREQUISITE_FAILED";
+    case ERROR_PACKAGE_REPOSITORY_CORRUPTED: return "ERROR_PACKAGE_REPOSITORY_CORRUPTED";
+    case ERROR_INSTALL_POLICY_FAILURE: return "ERROR_INSTALL_POLICY_FAILURE";
+    case ERROR_PACKAGE_UPDATING: return "ERROR_PACKAGE_UPDATING";
+    case ERROR_DEPLOYMENT_BLOCKED_BY_POLICY: return "ERROR_DEPLOYMENT_BLOCKED_BY_POLICY";
+    case ERROR_PACKAGES_IN_USE: return "ERROR_PACKAGES_IN_USE";
+    case ERROR_RECOVERY_FILE_CORRUPT: return "ERROR_RECOVERY_FILE_CORRUPT";
+    case ERROR_INVALID_STAGED_SIGNATURE: return "ERROR_INVALID_STAGED_SIGNATURE";
+    case ERROR_DELETING_EXISTING_APPLICATIONDATA_STORE_FAILED: return "ERROR_DELETING_EXISTING_APPLICATIONDATA_STORE_FAILED";
+    case ERROR_INSTALL_PACKAGE_DOWNGRADE: return "ERROR_INSTALL_PACKAGE_DOWNGRADE";
+    case ERROR_SYSTEM_NEEDS_REMEDIATION: return "ERROR_SYSTEM_NEEDS_REMEDIATION";
+    case ERROR_APPX_INTEGRITY_FAILURE_CLR_NGEN: return "ERROR_APPX_INTEGRITY_FAILURE_CLR_NGEN";
+    case ERROR_RESILIENCY_FILE_CORRUPT: return "ERROR_RESILIENCY_FILE_CORRUPT";
+    case ERROR_INSTALL_FIREWALL_SERVICE_NOT_RUNNING: return "ERROR_INSTALL_FIREWALL_SERVICE_NOT_RUNNING";
+    case ERROR_STATE_LOAD_STORE_FAILED: return "ERROR_STATE_LOAD_STORE_FAILED";
+    case ERROR_STATE_GET_VERSION_FAILED: return "ERROR_STATE_GET_VERSION_FAILED";
+    case ERROR_STATE_SET_VERSION_FAILED: return "ERROR_STATE_SET_VERSION_FAILED";
+    case ERROR_STATE_STRUCTURED_RESET_FAILED: return "ERROR_STATE_STRUCTURED_RESET_FAILED";
+    case ERROR_STATE_OPEN_CONTAINER_FAILED: return "ERROR_STATE_OPEN_CONTAINER_FAILED";
+    case ERROR_STATE_CREATE_CONTAINER_FAILED: return "ERROR_STATE_CREATE_CONTAINER_FAILED";
+    case ERROR_STATE_DELETE_CONTAINER_FAILED: return "ERROR_STATE_DELETE_CONTAINER_FAILED";
+    case ERROR_STATE_READ_SETTING_FAILED: return "ERROR_STATE_READ_SETTING_FAILED";
+    case ERROR_STATE_WRITE_SETTING_FAILED: return "ERROR_STATE_WRITE_SETTING_FAILED";
+    case ERROR_STATE_DELETE_SETTING_FAILED: return "ERROR_STATE_DELETE_SETTING_FAILED";
+    case ERROR_STATE_QUERY_SETTING_FAILED: return "ERROR_STATE_QUERY_SETTING_FAILED";
+    case ERROR_STATE_READ_COMPOSITE_SETTING_FAILED: return "ERROR_STATE_READ_COMPOSITE_SETTING_FAILED";
+    case ERROR_STATE_WRITE_COMPOSITE_SETTING_FAILED: return "ERROR_STATE_WRITE_COMPOSITE_SETTING_FAILED";
+    case ERROR_STATE_ENUMERATE_CONTAINER_FAILED: return "ERROR_STATE_ENUMERATE_CONTAINER_FAILED";
+    case ERROR_STATE_ENUMERATE_SETTINGS_FAILED: return "ERROR_STATE_ENUMERATE_SETTINGS_FAILED";
+    case ERROR_STATE_COMPOSITE_SETTING_VALUE_SIZE_LIMIT_EXCEEDED: return "ERROR_STATE_COMPOSITE_SETTING_VALUE_SIZE_LIMIT_EXCEEDED";
+    case ERROR_STATE_SETTING_VALUE_SIZE_LIMIT_EXCEEDED: return "ERROR_STATE_SETTING_VALUE_SIZE_LIMIT_EXCEEDED";
+    case ERROR_STATE_SETTING_NAME_SIZE_LIMIT_EXCEEDED: return "ERROR_STATE_SETTING_NAME_SIZE_LIMIT_EXCEEDED";
+    case ERROR_STATE_CONTAINER_NAME_SIZE_LIMIT_EXCEEDED: return "ERROR_STATE_CONTAINER_NAME_SIZE_LIMIT_EXCEEDED";
+    case ERROR_API_UNAVAILABLE: return "ERROR_API_UNAVAILABLE";
+    case ERROR_AUDITING_DISABLED: return "ERROR_AUDITING_DISABLED";
+    case ERROR_ALL_SIDS_FILTERED: return "ERROR_ALL_SIDS_FILTERED";
+    default: return NULL;
+    }
+}
+
+#endif // MR_WIN32
diff --git a/runtime/mercury_win32_error_name.h b/runtime/mercury_win32_error_name.h
new file mode 100644
index 000000000..318dc2e8f
--- /dev/null
+++ b/runtime/mercury_win32_error_name.h
@@ -0,0 +1,17 @@
+// vim: ts=4 sw=4 expandtab ft=c
+
+// Copyright (C) 2022 The Mercury team.
+// This file is distributed under the terms specified in COPYING.LIB.
+
+#ifndef MERCURY_WIN32_ERROR_NAME_H
+#define MERCURY_WIN32_ERROR_NAME_H
+
+#include "mercury_windows.h"
+
+#ifdef MR_WIN32
+
+extern const char   *MR_win32_error_name(DWORD errcode);
+
+#endif
+
+#endif  // MERCURY_WIN32_ERROR_NAME_H
diff --git a/tests/hard_coded/null_char.exp b/tests/hard_coded/null_char.exp
index 842f8aa9e..683b9c835 100644
--- a/tests/hard_coded/null_char.exp
+++ b/tests/hard_coded/null_char.exp
@@ -3,5 +3,5 @@ exception(univ_cons(software_error("predicate `string.from_char_list\'/2: Unexpe
 exception(univ_cons(software_error("predicate `string.from_rev_char_list\'/2: Unexpected: null character or surrogate code point in list")))
 exception(univ_cons(software_error("predicate `string.set_char\'/4: Unexpected: null character")))
 exception(univ_cons(software_error("predicate `string.unsafe_set_char\'/4: Unexpected: null character")))
-error("", io_error("null character in input"))
-error(io_error("null character in input"))
+error("", io_error_string("null character in input"))
+error(io_error_string("null character in input"))
diff --git a/tools/generate_errno_name b/tools/generate_errno_name
new file mode 100755
index 000000000..2337815b2
--- /dev/null
+++ b/tools/generate_errno_name
@@ -0,0 +1,205 @@
+#!/bin/sh
+#
+# This generates runtime/mercury_errno_name.c
+#
+set -eu
+
+# This list is taken from:
+# - Cosmopolitan libc
+#   https://github.com/jart/cosmopolitan/blob/master/libc/sysv/consts.sh
+# - moreutils `errno -l' output on Linux
+#
+names="
+ENOSYS
+EPERM
+ENOENT
+ESRCH
+EINTR
+EIO
+ENXIO
+E2BIG
+ENOEXEC
+EBADF
+ECHILD
+EAGAIN
+ENOMEM
+EACCES
+EFAULT
+ENOTBLK
+EBUSY
+EEXIST
+EXDEV
+ENODEV
+ENOTDIR
+EISDIR
+EINVAL
+ENFILE
+EMFILE
+ENOTTY
+ETXTBSY
+EFBIG
+ENOSPC
+EDQUOT
+ESPIPE
+EROFS
+EMLINK
+EPIPE
+EDOM
+ERANGE
+EDEADLK
+ENAMETOOLONG
+ENOLCK
+ENOTEMPTY
+ELOOP
+ENOMSG
+EIDRM
+ETIME
+EPROTO
+EOVERFLOW
+EILSEQ
+EUSERS
+ENOTSOCK
+EDESTADDRREQ
+EMSGSIZE
+EPROTOTYPE
+ENOPROTOOPT
+EPROTONOSUPPORT
+ESOCKTNOSUPPORT
+EOPNOTSUPP
+EPFNOSUPPORT
+EAFNOSUPPORT
+EADDRINUSE
+EADDRNOTAVAIL
+ENETDOWN
+ENETUNREACH
+ENETRESET
+ECONNABORTED
+ECONNRESET
+ENOBUFS
+EISCONN
+ENOTCONN
+ESHUTDOWN
+ETOOMANYREFS
+ETIMEDOUT
+ECONNREFUSED
+EHOSTDOWN
+EHOSTUNREACH
+EALREADY
+EINPROGRESS
+ESTALE
+EREMOTE
+EBADRPC
+ERPCMISMATCH
+EPROGUNAVAIL
+EPROGMISMATCH
+EPROCUNAVAIL
+EFTYPE
+EAUTH
+ENEEDAUTH
+EPROCLIM
+ENOATTR
+EPWROFF
+EDEVERR
+EBADEXEC
+EBADARCH
+ESHLIBVERS
+EBADMACHO
+ENOPOLICY
+EBADMSG
+ECANCELED
+EOWNERDEAD
+ENOTRECOVERABLE
+ENONET
+ERESTART
+ENODATA
+ENOSR
+ENOSTR
+EMULTIHOP
+ENOLINK
+ENOMEDIUM
+EMEDIUMTYPE
+EBADFD
+ECHRNG
+EL2NSYNC
+EL3HLT
+EL3RST
+ELNRNG
+EUNATCH
+ENOCSI
+EL2HLT
+EBADE
+EBADR
+EXFULL
+ENOANO
+EBADRQC
+EBADSLT
+ENOPKG
+EADV
+ESRMNT
+ECOMM
+EDOTDOT
+ENOTUNIQ
+EREMCHG
+ELIBACC
+ELIBBAD
+ELIBSCN
+ELIBMAX
+ELIBEXEC
+ESTRPIPE
+EUCLEAN
+ENOTNAM
+ENAVAIL
+EISNAM
+EREMOTEIO
+ENOKEY
+EKEYEXPIRED
+EKEYREVOKED
+EKEYREJECTED
+ERFKILL
+EHWPOISON
+EBFONT
+"
+
+cat <<EOF
+// vim: ts=4 sw=4 expandtab ft=c
+
+// Copyright (C) 2022 The Mercury team.
+// This file is distributed under the terms specified in COPYING.LIB.
+
+// Generated by generate_errno_name.
+
+#include <errno.h>
+#include <stdlib.h>
+
+#include "mercury_errno_name.h"
+
+const char *
+MR_errno_name(int errnum)
+{
+    switch (errnum) {
+EOF
+
+for name in $names ; do
+    echo "#ifdef $name"
+    echo "    case $name: return \"$name\";"
+    echo "#endif"
+done
+
+# Handle potential aliases:
+# - EWOULDBLOCK should be the same as EAGAIN
+# - EDEADLOCK should be the same as EDEADLK
+# - ENOTSUP may be the same as EOPNOTSUPP on some platforms
+handle_alias() {
+    echo "#if defined($1) && !defined($2)"
+    echo "    case $1: return \"$1\";"
+    echo "#endif"
+}
+handle_alias EWOULDBLOCK EAGAIN
+handle_alias EDEADLOCK EDEADLK
+handle_alias ENOTSUP EOPNOTSUPP
+
+cat <<EOF
+    default: return NULL;
+    }
+}
+EOF
diff --git a/tools/generate_win32_error_name b/tools/generate_win32_error_name
new file mode 100755
index 000000000..1affcd544
--- /dev/null
+++ b/tools/generate_win32_error_name
@@ -0,0 +1,1810 @@
+#!/bin/sh
+#
+# This generates runtime/mercury_win32_error_name.c
+#
+set -eu
+
+# This list is taken from the ERROR_ constants defined in the
+# MinGW-w64 winerror.h file:
+#
+#   grep -oE '^#define ERROR_[^ ]+' /usr/x86_64-w64-mingw32/include/winerror.h
+#
+# The full list of Windows system error codes can be found at:
+# https://docs.microsoft.com/en-us/windows/win32/debug/system-error-codes
+#
+names="
+ERROR_SUCCESS
+ERROR_INVALID_FUNCTION
+ERROR_FILE_NOT_FOUND
+ERROR_PATH_NOT_FOUND
+ERROR_TOO_MANY_OPEN_FILES
+ERROR_ACCESS_DENIED
+ERROR_INVALID_HANDLE
+ERROR_ARENA_TRASHED
+ERROR_NOT_ENOUGH_MEMORY
+ERROR_INVALID_BLOCK
+ERROR_BAD_ENVIRONMENT
+ERROR_BAD_FORMAT
+ERROR_INVALID_ACCESS
+ERROR_INVALID_DATA
+ERROR_OUTOFMEMORY
+ERROR_INVALID_DRIVE
+ERROR_CURRENT_DIRECTORY
+ERROR_NOT_SAME_DEVICE
+ERROR_NO_MORE_FILES
+ERROR_WRITE_PROTECT
+ERROR_BAD_UNIT
+ERROR_NOT_READY
+ERROR_BAD_COMMAND
+ERROR_CRC
+ERROR_BAD_LENGTH
+ERROR_SEEK
+ERROR_NOT_DOS_DISK
+ERROR_SECTOR_NOT_FOUND
+ERROR_OUT_OF_PAPER
+ERROR_WRITE_FAULT
+ERROR_READ_FAULT
+ERROR_GEN_FAILURE
+ERROR_SHARING_VIOLATION
+ERROR_LOCK_VIOLATION
+ERROR_WRONG_DISK
+ERROR_SHARING_BUFFER_EXCEEDED
+ERROR_HANDLE_EOF
+ERROR_HANDLE_DISK_FULL
+ERROR_NOT_SUPPORTED
+ERROR_REM_NOT_LIST
+ERROR_DUP_NAME
+ERROR_BAD_NETPATH
+ERROR_NETWORK_BUSY
+ERROR_DEV_NOT_EXIST
+ERROR_TOO_MANY_CMDS
+ERROR_ADAP_HDW_ERR
+ERROR_BAD_NET_RESP
+ERROR_UNEXP_NET_ERR
+ERROR_BAD_REM_ADAP
+ERROR_PRINTQ_FULL
+ERROR_NO_SPOOL_SPACE
+ERROR_PRINT_CANCELLED
+ERROR_NETNAME_DELETED
+ERROR_NETWORK_ACCESS_DENIED
+ERROR_BAD_DEV_TYPE
+ERROR_BAD_NET_NAME
+ERROR_TOO_MANY_NAMES
+ERROR_TOO_MANY_SESS
+ERROR_SHARING_PAUSED
+ERROR_REQ_NOT_ACCEP
+ERROR_REDIR_PAUSED
+ERROR_FILE_EXISTS
+ERROR_CANNOT_MAKE
+ERROR_FAIL_I24
+ERROR_OUT_OF_STRUCTURES
+ERROR_ALREADY_ASSIGNED
+ERROR_INVALID_PASSWORD
+ERROR_INVALID_PARAMETER
+ERROR_NET_WRITE_FAULT
+ERROR_NO_PROC_SLOTS
+ERROR_TOO_MANY_SEMAPHORES
+ERROR_EXCL_SEM_ALREADY_OWNED
+ERROR_SEM_IS_SET
+ERROR_TOO_MANY_SEM_REQUESTS
+ERROR_INVALID_AT_INTERRUPT_TIME
+ERROR_SEM_OWNER_DIED
+ERROR_SEM_USER_LIMIT
+ERROR_DISK_CHANGE
+ERROR_DRIVE_LOCKED
+ERROR_BROKEN_PIPE
+ERROR_OPEN_FAILED
+ERROR_BUFFER_OVERFLOW
+ERROR_DISK_FULL
+ERROR_NO_MORE_SEARCH_HANDLES
+ERROR_INVALID_TARGET_HANDLE
+ERROR_INVALID_CATEGORY
+ERROR_INVALID_VERIFY_SWITCH
+ERROR_BAD_DRIVER_LEVEL
+ERROR_CALL_NOT_IMPLEMENTED
+ERROR_SEM_TIMEOUT
+ERROR_INSUFFICIENT_BUFFER
+ERROR_INVALID_NAME
+ERROR_INVALID_LEVEL
+ERROR_NO_VOLUME_LABEL
+ERROR_MOD_NOT_FOUND
+ERROR_PROC_NOT_FOUND
+ERROR_WAIT_NO_CHILDREN
+ERROR_CHILD_NOT_COMPLETE
+ERROR_DIRECT_ACCESS_HANDLE
+ERROR_NEGATIVE_SEEK
+ERROR_SEEK_ON_DEVICE
+ERROR_IS_JOIN_TARGET
+ERROR_IS_JOINED
+ERROR_IS_SUBSTED
+ERROR_NOT_JOINED
+ERROR_NOT_SUBSTED
+ERROR_JOIN_TO_JOIN
+ERROR_SUBST_TO_SUBST
+ERROR_JOIN_TO_SUBST
+ERROR_SUBST_TO_JOIN
+ERROR_BUSY_DRIVE
+ERROR_SAME_DRIVE
+ERROR_DIR_NOT_ROOT
+ERROR_DIR_NOT_EMPTY
+ERROR_IS_SUBST_PATH
+ERROR_IS_JOIN_PATH
+ERROR_PATH_BUSY
+ERROR_IS_SUBST_TARGET
+ERROR_SYSTEM_TRACE
+ERROR_INVALID_EVENT_COUNT
+ERROR_TOO_MANY_MUXWAITERS
+ERROR_INVALID_LIST_FORMAT
+ERROR_LABEL_TOO_LONG
+ERROR_TOO_MANY_TCBS
+ERROR_SIGNAL_REFUSED
+ERROR_DISCARDED
+ERROR_NOT_LOCKED
+ERROR_BAD_THREADID_ADDR
+ERROR_BAD_ARGUMENTS
+ERROR_BAD_PATHNAME
+ERROR_SIGNAL_PENDING
+ERROR_MAX_THRDS_REACHED
+ERROR_LOCK_FAILED
+ERROR_BUSY
+ERROR_CANCEL_VIOLATION
+ERROR_ATOMIC_LOCKS_NOT_SUPPORTED
+ERROR_INVALID_SEGMENT_NUMBER
+ERROR_INVALID_ORDINAL
+ERROR_ALREADY_EXISTS
+ERROR_INVALID_FLAG_NUMBER
+ERROR_SEM_NOT_FOUND
+ERROR_INVALID_STARTING_CODESEG
+ERROR_INVALID_STACKSEG
+ERROR_INVALID_MODULETYPE
+ERROR_INVALID_EXE_SIGNATURE
+ERROR_EXE_MARKED_INVALID
+ERROR_BAD_EXE_FORMAT
+ERROR_ITERATED_DATA_EXCEEDS_64k
+ERROR_INVALID_MINALLOCSIZE
+ERROR_DYNLINK_FROM_INVALID_RING
+ERROR_IOPL_NOT_ENABLED
+ERROR_INVALID_SEGDPL
+ERROR_AUTODATASEG_EXCEEDS_64k
+ERROR_RING2SEG_MUST_BE_MOVABLE
+ERROR_RELOC_CHAIN_XEEDS_SEGLIM
+ERROR_INFLOOP_IN_RELOC_CHAIN
+ERROR_ENVVAR_NOT_FOUND
+ERROR_NO_SIGNAL_SENT
+ERROR_FILENAME_EXCED_RANGE
+ERROR_RING2_STACK_IN_USE
+ERROR_META_EXPANSION_TOO_LONG
+ERROR_INVALID_SIGNAL_NUMBER
+ERROR_THREAD_1_INACTIVE
+ERROR_LOCKED
+ERROR_TOO_MANY_MODULES
+ERROR_NESTING_NOT_ALLOWED
+ERROR_EXE_MACHINE_TYPE_MISMATCH
+ERROR_EXE_CANNOT_MODIFY_SIGNED_BINARY
+ERROR_EXE_CANNOT_MODIFY_STRONG_SIGNED_BINARY
+ERROR_FILE_CHECKED_OUT
+ERROR_CHECKOUT_REQUIRED
+ERROR_BAD_FILE_TYPE
+ERROR_FILE_TOO_LARGE
+ERROR_FORMS_AUTH_REQUIRED
+ERROR_PIPE_LOCAL
+ERROR_BAD_PIPE
+ERROR_PIPE_BUSY
+ERROR_NO_DATA
+ERROR_PIPE_NOT_CONNECTED
+ERROR_MORE_DATA
+ERROR_VC_DISCONNECTED
+ERROR_INVALID_EA_NAME
+ERROR_EA_LIST_INCONSISTENT
+ERROR_NO_MORE_ITEMS
+ERROR_CANNOT_COPY
+ERROR_DIRECTORY
+ERROR_EAS_DIDNT_FIT
+ERROR_EA_FILE_CORRUPT
+ERROR_EA_TABLE_FULL
+ERROR_INVALID_EA_HANDLE
+ERROR_EAS_NOT_SUPPORTED
+ERROR_NOT_OWNER
+ERROR_TOO_MANY_POSTS
+ERROR_PARTIAL_COPY
+ERROR_OPLOCK_NOT_GRANTED
+ERROR_INVALID_OPLOCK_PROTOCOL
+ERROR_DISK_TOO_FRAGMENTED
+ERROR_DELETE_PENDING
+ERROR_INVALID_TOKEN
+ERROR_MR_MID_NOT_FOUND
+ERROR_SCOPE_NOT_FOUND
+ERROR_OBJECT_NOT_EXTERNALLY_BACKED
+ERROR_EXTERNAL_BACKING_PROVIDER_UNKNOWN
+ERROR_COMPRESSION_NOT_BENEFICIAL
+ERROR_INVALID_ADDRESS
+ERROR_ARITHMETIC_OVERFLOW
+ERROR_PIPE_CONNECTED
+ERROR_PIPE_LISTENING
+ERROR_WAKE_SYSTEM
+ERROR_WAIT_1
+ERROR_WAIT_2
+ERROR_WAIT_3
+ERROR_WAIT_63
+ERROR_ABANDONED_WAIT_0
+ERROR_ABANDONED_WAIT_63
+ERROR_USER_APC
+ERROR_KERNEL_APC
+ERROR_ALERTED
+ERROR_EA_ACCESS_DENIED
+ERROR_OPERATION_ABORTED
+ERROR_IO_INCOMPLETE
+ERROR_IO_PENDING
+ERROR_NOACCESS
+ERROR_SWAPERROR
+ERROR_STACK_OVERFLOW
+ERROR_INVALID_MESSAGE
+ERROR_CAN_NOT_COMPLETE
+ERROR_INVALID_FLAGS
+ERROR_UNRECOGNIZED_VOLUME
+ERROR_FILE_INVALID
+ERROR_FULLSCREEN_MODE
+ERROR_NO_TOKEN
+ERROR_BADDB
+ERROR_BADKEY
+ERROR_CANTOPEN
+ERROR_CANTREAD
+ERROR_CANTWRITE
+ERROR_REGISTRY_RECOVERED
+ERROR_REGISTRY_CORRUPT
+ERROR_REGISTRY_IO_FAILED
+ERROR_NOT_REGISTRY_FILE
+ERROR_KEY_DELETED
+ERROR_NO_LOG_SPACE
+ERROR_KEY_HAS_CHILDREN
+ERROR_CHILD_MUST_BE_VOLATILE
+ERROR_NOTIFY_ENUM_DIR
+ERROR_DEPENDENT_SERVICES_RUNNING
+ERROR_INVALID_SERVICE_CONTROL
+ERROR_SERVICE_REQUEST_TIMEOUT
+ERROR_SERVICE_NO_THREAD
+ERROR_SERVICE_DATABASE_LOCKED
+ERROR_SERVICE_ALREADY_RUNNING
+ERROR_INVALID_SERVICE_ACCOUNT
+ERROR_SERVICE_DISABLED
+ERROR_CIRCULAR_DEPENDENCY
+ERROR_SERVICE_DOES_NOT_EXIST
+ERROR_SERVICE_CANNOT_ACCEPT_CTRL
+ERROR_SERVICE_NOT_ACTIVE
+ERROR_FAILED_SERVICE_CONTROLLER_CONNECT
+ERROR_EXCEPTION_IN_SERVICE
+ERROR_DATABASE_DOES_NOT_EXIST
+ERROR_SERVICE_SPECIFIC_ERROR
+ERROR_PROCESS_ABORTED
+ERROR_SERVICE_DEPENDENCY_FAIL
+ERROR_SERVICE_LOGON_FAILED
+ERROR_SERVICE_START_HANG
+ERROR_INVALID_SERVICE_LOCK
+ERROR_SERVICE_MARKED_FOR_DELETE
+ERROR_SERVICE_EXISTS
+ERROR_ALREADY_RUNNING_LKG
+ERROR_SERVICE_DEPENDENCY_DELETED
+ERROR_BOOT_ALREADY_ACCEPTED
+ERROR_SERVICE_NEVER_STARTED
+ERROR_DUPLICATE_SERVICE_NAME
+ERROR_DIFFERENT_SERVICE_ACCOUNT
+ERROR_CANNOT_DETECT_DRIVER_FAILURE
+ERROR_CANNOT_DETECT_PROCESS_ABORT
+ERROR_NO_RECOVERY_PROGRAM
+ERROR_SERVICE_NOT_IN_EXE
+ERROR_NOT_SAFEBOOT_SERVICE
+ERROR_END_OF_MEDIA
+ERROR_FILEMARK_DETECTED
+ERROR_BEGINNING_OF_MEDIA
+ERROR_SETMARK_DETECTED
+ERROR_NO_DATA_DETECTED
+ERROR_PARTITION_FAILURE
+ERROR_INVALID_BLOCK_LENGTH
+ERROR_DEVICE_NOT_PARTITIONED
+ERROR_UNABLE_TO_LOCK_MEDIA
+ERROR_UNABLE_TO_UNLOAD_MEDIA
+ERROR_MEDIA_CHANGED
+ERROR_BUS_RESET
+ERROR_NO_MEDIA_IN_DRIVE
+ERROR_NO_UNICODE_TRANSLATION
+ERROR_DLL_INIT_FAILED
+ERROR_SHUTDOWN_IN_PROGRESS
+ERROR_NO_SHUTDOWN_IN_PROGRESS
+ERROR_IO_DEVICE
+ERROR_SERIAL_NO_DEVICE
+ERROR_IRQ_BUSY
+ERROR_MORE_WRITES
+ERROR_COUNTER_TIMEOUT
+ERROR_FLOPPY_ID_MARK_NOT_FOUND
+ERROR_FLOPPY_WRONG_CYLINDER
+ERROR_FLOPPY_UNKNOWN_ERROR
+ERROR_FLOPPY_BAD_REGISTERS
+ERROR_DISK_RECALIBRATE_FAILED
+ERROR_DISK_OPERATION_FAILED
+ERROR_DISK_RESET_FAILED
+ERROR_EOM_OVERFLOW
+ERROR_NOT_ENOUGH_SERVER_MEMORY
+ERROR_POSSIBLE_DEADLOCK
+ERROR_MAPPED_ALIGNMENT
+ERROR_SET_POWER_STATE_VETOED
+ERROR_SET_POWER_STATE_FAILED
+ERROR_TOO_MANY_LINKS
+ERROR_OLD_WIN_VERSION
+ERROR_APP_WRONG_OS
+ERROR_SINGLE_INSTANCE_APP
+ERROR_RMODE_APP
+ERROR_INVALID_DLL
+ERROR_NO_ASSOCIATION
+ERROR_DDE_FAIL
+ERROR_DLL_NOT_FOUND
+ERROR_NO_MORE_USER_HANDLES
+ERROR_MESSAGE_SYNC_ONLY
+ERROR_SOURCE_ELEMENT_EMPTY
+ERROR_DESTINATION_ELEMENT_FULL
+ERROR_ILLEGAL_ELEMENT_ADDRESS
+ERROR_MAGAZINE_NOT_PRESENT
+ERROR_DEVICE_REINITIALIZATION_NEEDED
+ERROR_DEVICE_REQUIRES_CLEANING
+ERROR_DEVICE_DOOR_OPEN
+ERROR_DEVICE_NOT_CONNECTED
+ERROR_NOT_FOUND
+ERROR_NO_MATCH
+ERROR_SET_NOT_FOUND
+ERROR_POINT_NOT_FOUND
+ERROR_NO_TRACKING_SERVICE
+ERROR_NO_VOLUME_ID
+ERROR_UNABLE_TO_REMOVE_REPLACED
+ERROR_UNABLE_TO_MOVE_REPLACEMENT
+ERROR_UNABLE_TO_MOVE_REPLACEMENT_2
+ERROR_JOURNAL_DELETE_IN_PROGRESS
+ERROR_JOURNAL_NOT_ACTIVE
+ERROR_POTENTIAL_FILE_FOUND
+ERROR_JOURNAL_ENTRY_DELETED
+ERROR_BAD_DEVICE
+ERROR_CONNECTION_UNAVAIL
+ERROR_DEVICE_ALREADY_REMEMBERED
+ERROR_NO_NET_OR_BAD_PATH
+ERROR_BAD_PROVIDER
+ERROR_CANNOT_OPEN_PROFILE
+ERROR_BAD_PROFILE
+ERROR_NOT_CONTAINER
+ERROR_EXTENDED_ERROR
+ERROR_INVALID_GROUPNAME
+ERROR_INVALID_COMPUTERNAME
+ERROR_INVALID_EVENTNAME
+ERROR_INVALID_DOMAINNAME
+ERROR_INVALID_SERVICENAME
+ERROR_INVALID_NETNAME
+ERROR_INVALID_SHARENAME
+ERROR_INVALID_PASSWORDNAME
+ERROR_INVALID_MESSAGENAME
+ERROR_INVALID_MESSAGEDEST
+ERROR_SESSION_CREDENTIAL_CONFLICT
+ERROR_REMOTE_SESSION_LIMIT_EXCEEDED
+ERROR_DUP_DOMAINNAME
+ERROR_NO_NETWORK
+ERROR_CANCELLED
+ERROR_USER_MAPPED_FILE
+ERROR_CONNECTION_REFUSED
+ERROR_GRACEFUL_DISCONNECT
+ERROR_ADDRESS_ALREADY_ASSOCIATED
+ERROR_ADDRESS_NOT_ASSOCIATED
+ERROR_CONNECTION_INVALID
+ERROR_CONNECTION_ACTIVE
+ERROR_NETWORK_UNREACHABLE
+ERROR_HOST_UNREACHABLE
+ERROR_PROTOCOL_UNREACHABLE
+ERROR_PORT_UNREACHABLE
+ERROR_REQUEST_ABORTED
+ERROR_CONNECTION_ABORTED
+ERROR_RETRY
+ERROR_CONNECTION_COUNT_LIMIT
+ERROR_LOGIN_TIME_RESTRICTION
+ERROR_LOGIN_WKSTA_RESTRICTION
+ERROR_INCORRECT_ADDRESS
+ERROR_ALREADY_REGISTERED
+ERROR_SERVICE_NOT_FOUND
+ERROR_NOT_AUTHENTICATED
+ERROR_NOT_LOGGED_ON
+ERROR_CONTINUE
+ERROR_ALREADY_INITIALIZED
+ERROR_NO_MORE_DEVICES
+ERROR_NO_SUCH_SITE
+ERROR_DOMAIN_CONTROLLER_EXISTS
+ERROR_ONLY_IF_CONNECTED
+ERROR_OVERRIDE_NOCHANGES
+ERROR_BAD_USER_PROFILE
+ERROR_NOT_SUPPORTED_ON_SBS
+ERROR_SERVER_SHUTDOWN_IN_PROGRESS
+ERROR_HOST_DOWN
+ERROR_NON_ACCOUNT_SID
+ERROR_NON_DOMAIN_SID
+ERROR_APPHELP_BLOCK
+ERROR_ACCESS_DISABLED_BY_POLICY
+ERROR_REG_NAT_CONSUMPTION
+ERROR_CSCSHARE_OFFLINE
+ERROR_PKINIT_FAILURE
+ERROR_SMARTCARD_SUBSYSTEM_FAILURE
+ERROR_DOWNGRADE_DETECTED
+ERROR_MACHINE_LOCKED
+ERROR_CALLBACK_SUPPLIED_INVALID_DATA
+ERROR_SYNC_FOREGROUND_REFRESH_REQUIRED
+ERROR_DRIVER_BLOCKED
+ERROR_INVALID_IMPORT_OF_NON_DLL
+ERROR_ACCESS_DISABLED_WEBBLADE
+ERROR_ACCESS_DISABLED_WEBBLADE_TAMPER
+ERROR_RECOVERY_FAILURE
+ERROR_ALREADY_FIBER
+ERROR_ALREADY_THREAD
+ERROR_STACK_BUFFER_OVERRUN
+ERROR_PARAMETER_QUOTA_EXCEEDED
+ERROR_DEBUGGER_INACTIVE
+ERROR_DELAY_LOAD_FAILED
+ERROR_VDM_DISALLOWED
+ERROR_UNIDENTIFIED_ERROR
+ERROR_NOT_ALL_ASSIGNED
+ERROR_SOME_NOT_MAPPED
+ERROR_NO_QUOTAS_FOR_ACCOUNT
+ERROR_LOCAL_USER_SESSION_KEY
+ERROR_NULL_LM_PASSWORD
+ERROR_UNKNOWN_REVISION
+ERROR_REVISION_MISMATCH
+ERROR_INVALID_OWNER
+ERROR_INVALID_PRIMARY_GROUP
+ERROR_NO_IMPERSONATION_TOKEN
+ERROR_CANT_DISABLE_MANDATORY
+ERROR_NO_LOGON_SERVERS
+ERROR_NO_SUCH_LOGON_SESSION
+ERROR_NO_SUCH_PRIVILEGE
+ERROR_PRIVILEGE_NOT_HELD
+ERROR_INVALID_ACCOUNT_NAME
+ERROR_USER_EXISTS
+ERROR_NO_SUCH_USER
+ERROR_GROUP_EXISTS
+ERROR_NO_SUCH_GROUP
+ERROR_MEMBER_IN_GROUP
+ERROR_MEMBER_NOT_IN_GROUP
+ERROR_LAST_ADMIN
+ERROR_WRONG_PASSWORD
+ERROR_ILL_FORMED_PASSWORD
+ERROR_PASSWORD_RESTRICTION
+ERROR_LOGON_FAILURE
+ERROR_ACCOUNT_RESTRICTION
+ERROR_INVALID_LOGON_HOURS
+ERROR_INVALID_WORKSTATION
+ERROR_PASSWORD_EXPIRED
+ERROR_ACCOUNT_DISABLED
+ERROR_NONE_MAPPED
+ERROR_TOO_MANY_LUIDS_REQUESTED
+ERROR_LUIDS_EXHAUSTED
+ERROR_INVALID_SUB_AUTHORITY
+ERROR_INVALID_ACL
+ERROR_INVALID_SID
+ERROR_INVALID_SECURITY_DESCR
+ERROR_BAD_INHERITANCE_ACL
+ERROR_SERVER_DISABLED
+ERROR_SERVER_NOT_DISABLED
+ERROR_INVALID_ID_AUTHORITY
+ERROR_ALLOTTED_SPACE_EXCEEDED
+ERROR_INVALID_GROUP_ATTRIBUTES
+ERROR_BAD_IMPERSONATION_LEVEL
+ERROR_CANT_OPEN_ANONYMOUS
+ERROR_BAD_VALIDATION_CLASS
+ERROR_BAD_TOKEN_TYPE
+ERROR_NO_SECURITY_ON_OBJECT
+ERROR_CANT_ACCESS_DOMAIN_INFO
+ERROR_INVALID_SERVER_STATE
+ERROR_INVALID_DOMAIN_STATE
+ERROR_INVALID_DOMAIN_ROLE
+ERROR_NO_SUCH_DOMAIN
+ERROR_DOMAIN_EXISTS
+ERROR_DOMAIN_LIMIT_EXCEEDED
+ERROR_INTERNAL_DB_CORRUPTION
+ERROR_INTERNAL_ERROR
+ERROR_GENERIC_NOT_MAPPED
+ERROR_BAD_DESCRIPTOR_FORMAT
+ERROR_NOT_LOGON_PROCESS
+ERROR_LOGON_SESSION_EXISTS
+ERROR_NO_SUCH_PACKAGE
+ERROR_BAD_LOGON_SESSION_STATE
+ERROR_LOGON_SESSION_COLLISION
+ERROR_INVALID_LOGON_TYPE
+ERROR_CANNOT_IMPERSONATE
+ERROR_RXACT_INVALID_STATE
+ERROR_RXACT_COMMIT_FAILURE
+ERROR_SPECIAL_ACCOUNT
+ERROR_SPECIAL_GROUP
+ERROR_SPECIAL_USER
+ERROR_MEMBERS_PRIMARY_GROUP
+ERROR_TOKEN_ALREADY_IN_USE
+ERROR_NO_SUCH_ALIAS
+ERROR_MEMBER_NOT_IN_ALIAS
+ERROR_MEMBER_IN_ALIAS
+ERROR_ALIAS_EXISTS
+ERROR_LOGON_NOT_GRANTED
+ERROR_TOO_MANY_SECRETS
+ERROR_SECRET_TOO_LONG
+ERROR_INTERNAL_DB_ERROR
+ERROR_TOO_MANY_CONTEXT_IDS
+ERROR_LOGON_TYPE_NOT_GRANTED
+ERROR_NT_CROSS_ENCRYPTION_REQUIRED
+ERROR_NO_SUCH_MEMBER
+ERROR_INVALID_MEMBER
+ERROR_TOO_MANY_SIDS
+ERROR_LM_CROSS_ENCRYPTION_REQUIRED
+ERROR_NO_INHERITANCE
+ERROR_FILE_CORRUPT
+ERROR_DISK_CORRUPT
+ERROR_NO_USER_SESSION_KEY
+ERROR_LICENSE_QUOTA_EXCEEDED
+ERROR_WRONG_TARGET_NAME
+ERROR_MUTUAL_AUTH_FAILED
+ERROR_TIME_SKEW
+ERROR_CURRENT_DOMAIN_NOT_ALLOWED
+ERROR_INVALID_WINDOW_HANDLE
+ERROR_INVALID_MENU_HANDLE
+ERROR_INVALID_CURSOR_HANDLE
+ERROR_INVALID_ACCEL_HANDLE
+ERROR_INVALID_HOOK_HANDLE
+ERROR_INVALID_DWP_HANDLE
+ERROR_TLW_WITH_WSCHILD
+ERROR_CANNOT_FIND_WND_CLASS
+ERROR_WINDOW_OF_OTHER_THREAD
+ERROR_HOTKEY_ALREADY_REGISTERED
+ERROR_CLASS_ALREADY_EXISTS
+ERROR_CLASS_DOES_NOT_EXIST
+ERROR_CLASS_HAS_WINDOWS
+ERROR_INVALID_INDEX
+ERROR_INVALID_ICON_HANDLE
+ERROR_PRIVATE_DIALOG_INDEX
+ERROR_LISTBOX_ID_NOT_FOUND
+ERROR_NO_WILDCARD_CHARACTERS
+ERROR_CLIPBOARD_NOT_OPEN
+ERROR_HOTKEY_NOT_REGISTERED
+ERROR_WINDOW_NOT_DIALOG
+ERROR_CONTROL_ID_NOT_FOUND
+ERROR_INVALID_COMBOBOX_MESSAGE
+ERROR_WINDOW_NOT_COMBOBOX
+ERROR_INVALID_EDIT_HEIGHT
+ERROR_DC_NOT_FOUND
+ERROR_INVALID_HOOK_FILTER
+ERROR_INVALID_FILTER_PROC
+ERROR_HOOK_NEEDS_HMOD
+ERROR_GLOBAL_ONLY_HOOK
+ERROR_JOURNAL_HOOK_SET
+ERROR_HOOK_NOT_INSTALLED
+ERROR_INVALID_LB_MESSAGE
+ERROR_SETCOUNT_ON_BAD_LB
+ERROR_LB_WITHOUT_TABSTOPS
+ERROR_DESTROY_OBJECT_OF_OTHER_THREAD
+ERROR_CHILD_WINDOW_MENU
+ERROR_NO_SYSTEM_MENU
+ERROR_INVALID_MSGBOX_STYLE
+ERROR_INVALID_SPI_VALUE
+ERROR_SCREEN_ALREADY_LOCKED
+ERROR_HWNDS_HAVE_DIFF_PARENT
+ERROR_NOT_CHILD_WINDOW
+ERROR_INVALID_GW_COMMAND
+ERROR_INVALID_THREAD_ID
+ERROR_NON_MDICHILD_WINDOW
+ERROR_POPUP_ALREADY_ACTIVE
+ERROR_NO_SCROLLBARS
+ERROR_INVALID_SCROLLBAR_RANGE
+ERROR_INVALID_SHOWWIN_COMMAND
+ERROR_NO_SYSTEM_RESOURCES
+ERROR_NONPAGED_SYSTEM_RESOURCES
+ERROR_PAGED_SYSTEM_RESOURCES
+ERROR_WORKING_SET_QUOTA
+ERROR_PAGEFILE_QUOTA
+ERROR_COMMITMENT_LIMIT
+ERROR_MENU_ITEM_NOT_FOUND
+ERROR_INVALID_KEYBOARD_HANDLE
+ERROR_HOOK_TYPE_NOT_ALLOWED
+ERROR_REQUIRES_INTERACTIVE_WINDOWSTATION
+ERROR_TIMEOUT
+ERROR_INVALID_MONITOR_HANDLE
+ERROR_INCORRECT_SIZE
+ERROR_SYMLINK_CLASS_DISABLED
+ERROR_SYMLINK_NOT_SUPPORTED
+ERROR_XML_PARSE_ERROR
+ERROR_XMLDSIG_ERROR
+ERROR_RESTART_APPLICATION
+ERROR_WRONG_COMPARTMENT
+ERROR_AUTHIP_FAILURE
+ERROR_NO_NVRAM_RESOURCES
+ERROR_NOT_GUI_PROCESS
+ERROR_EVENTLOG_FILE_CORRUPT
+ERROR_EVENTLOG_CANT_START
+ERROR_LOG_FILE_FULL
+ERROR_EVENTLOG_FILE_CHANGED
+ERROR_INSTALL_SERVICE_FAILURE
+ERROR_INSTALL_USEREXIT
+ERROR_INSTALL_FAILURE
+ERROR_INSTALL_SUSPEND
+ERROR_UNKNOWN_PRODUCT
+ERROR_UNKNOWN_FEATURE
+ERROR_UNKNOWN_COMPONENT
+ERROR_UNKNOWN_PROPERTY
+ERROR_INVALID_HANDLE_STATE
+ERROR_BAD_CONFIGURATION
+ERROR_INDEX_ABSENT
+ERROR_INSTALL_SOURCE_ABSENT
+ERROR_INSTALL_PACKAGE_VERSION
+ERROR_PRODUCT_UNINSTALLED
+ERROR_BAD_QUERY_SYNTAX
+ERROR_INVALID_FIELD
+ERROR_DEVICE_REMOVED
+ERROR_INSTALL_ALREADY_RUNNING
+ERROR_INSTALL_PACKAGE_OPEN_FAILED
+ERROR_INSTALL_PACKAGE_INVALID
+ERROR_INSTALL_UI_FAILURE
+ERROR_INSTALL_LOG_FAILURE
+ERROR_INSTALL_LANGUAGE_UNSUPPORTED
+ERROR_INSTALL_TRANSFORM_FAILURE
+ERROR_INSTALL_PACKAGE_REJECTED
+ERROR_FUNCTION_NOT_CALLED
+ERROR_FUNCTION_FAILED
+ERROR_INVALID_TABLE
+ERROR_DATATYPE_MISMATCH
+ERROR_UNSUPPORTED_TYPE
+ERROR_CREATE_FAILED
+ERROR_INSTALL_TEMP_UNWRITABLE
+ERROR_INSTALL_PLATFORM_UNSUPPORTED
+ERROR_INSTALL_NOTUSED
+ERROR_PATCH_PACKAGE_OPEN_FAILED
+ERROR_PATCH_PACKAGE_INVALID
+ERROR_PATCH_PACKAGE_UNSUPPORTED
+ERROR_PRODUCT_VERSION
+ERROR_INVALID_COMMAND_LINE
+ERROR_INSTALL_REMOTE_DISALLOWED
+ERROR_SUCCESS_REBOOT_INITIATED
+ERROR_PATCH_TARGET_NOT_FOUND
+ERROR_PATCH_PACKAGE_REJECTED
+ERROR_INSTALL_TRANSFORM_REJECTED
+ERROR_INSTALL_REMOTE_PROHIBITED
+ERROR_INVALID_USER_BUFFER
+ERROR_UNRECOGNIZED_MEDIA
+ERROR_NO_TRUST_LSA_SECRET
+ERROR_NO_TRUST_SAM_ACCOUNT
+ERROR_TRUSTED_DOMAIN_FAILURE
+ERROR_TRUSTED_RELATIONSHIP_FAILURE
+ERROR_TRUST_FAILURE
+ERROR_NETLOGON_NOT_STARTED
+ERROR_ACCOUNT_EXPIRED
+ERROR_REDIRECTOR_HAS_OPEN_HANDLES
+ERROR_PRINTER_DRIVER_ALREADY_INSTALLED
+ERROR_UNKNOWN_PORT
+ERROR_UNKNOWN_PRINTER_DRIVER
+ERROR_UNKNOWN_PRINTPROCESSOR
+ERROR_INVALID_SEPARATOR_FILE
+ERROR_INVALID_PRIORITY
+ERROR_INVALID_PRINTER_NAME
+ERROR_PRINTER_ALREADY_EXISTS
+ERROR_INVALID_PRINTER_COMMAND
+ERROR_INVALID_DATATYPE
+ERROR_INVALID_ENVIRONMENT
+ERROR_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT
+ERROR_NOLOGON_WORKSTATION_TRUST_ACCOUNT
+ERROR_NOLOGON_SERVER_TRUST_ACCOUNT
+ERROR_DOMAIN_TRUST_INCONSISTENT
+ERROR_SERVER_HAS_OPEN_HANDLES
+ERROR_RESOURCE_DATA_NOT_FOUND
+ERROR_RESOURCE_TYPE_NOT_FOUND
+ERROR_RESOURCE_NAME_NOT_FOUND
+ERROR_RESOURCE_LANG_NOT_FOUND
+ERROR_NOT_ENOUGH_QUOTA
+ERROR_INVALID_TIME
+ERROR_INVALID_FORM_NAME
+ERROR_INVALID_FORM_SIZE
+ERROR_ALREADY_WAITING
+ERROR_PRINTER_DELETED
+ERROR_INVALID_PRINTER_STATE
+ERROR_PASSWORD_MUST_CHANGE
+ERROR_DOMAIN_CONTROLLER_NOT_FOUND
+ERROR_ACCOUNT_LOCKED_OUT
+ERROR_NO_SITENAME
+ERROR_CANT_ACCESS_FILE
+ERROR_CANT_RESOLVE_FILENAME
+ERROR_KM_DRIVER_BLOCKED
+ERROR_CONTEXT_EXPIRED
+ERROR_PER_USER_TRUST_QUOTA_EXCEEDED
+ERROR_ALL_USER_TRUST_QUOTA_EXCEEDED
+ERROR_USER_DELETE_TRUST_QUOTA_EXCEEDED
+ERROR_AUTHENTICATION_FIREWALL_FAILED
+ERROR_REMOTE_PRINT_CONNECTIONS_BLOCKED
+ERROR_INVALID_PIXEL_FORMAT
+ERROR_BAD_DRIVER
+ERROR_INVALID_WINDOW_STYLE
+ERROR_METAFILE_NOT_SUPPORTED
+ERROR_TRANSFORM_NOT_SUPPORTED
+ERROR_CLIPPING_NOT_SUPPORTED
+ERROR_INVALID_CMM
+ERROR_INVALID_PROFILE
+ERROR_TAG_NOT_FOUND
+ERROR_TAG_NOT_PRESENT
+ERROR_DUPLICATE_TAG
+ERROR_PROFILE_NOT_ASSOCIATED_WITH_DEVICE
+ERROR_PROFILE_NOT_FOUND
+ERROR_INVALID_COLORSPACE
+ERROR_ICM_NOT_ENABLED
+ERROR_DELETING_ICM_XFORM
+ERROR_INVALID_TRANSFORM
+ERROR_COLORSPACE_MISMATCH
+ERROR_INVALID_COLORINDEX
+ERROR_CONNECTED_OTHER_PASSWORD
+ERROR_CONNECTED_OTHER_PASSWORD_DEFAULT
+ERROR_BAD_USERNAME
+ERROR_NOT_CONNECTED
+ERROR_OPEN_FILES
+ERROR_ACTIVE_CONNECTIONS
+ERROR_DEVICE_IN_USE
+ERROR_UNKNOWN_PRINT_MONITOR
+ERROR_PRINTER_DRIVER_IN_USE
+ERROR_SPOOL_FILE_NOT_FOUND
+ERROR_SPL_NO_STARTDOC
+ERROR_SPL_NO_ADDJOB
+ERROR_PRINT_PROCESSOR_ALREADY_INSTALLED
+ERROR_PRINT_MONITOR_ALREADY_INSTALLED
+ERROR_INVALID_PRINT_MONITOR
+ERROR_PRINT_MONITOR_IN_USE
+ERROR_PRINTER_HAS_JOBS_QUEUED
+ERROR_SUCCESS_REBOOT_REQUIRED
+ERROR_SUCCESS_RESTART_REQUIRED
+ERROR_PRINTER_NOT_FOUND
+ERROR_PRINTER_DRIVER_WARNED
+ERROR_PRINTER_DRIVER_BLOCKED
+ERROR_WINS_INTERNAL
+ERROR_CAN_NOT_DEL_LOCAL_WINS
+ERROR_STATIC_INIT
+ERROR_INC_BACKUP
+ERROR_FULL_BACKUP
+ERROR_REC_NON_EXISTENT
+ERROR_RPL_NOT_ALLOWED
+ERROR_DHCP_ADDRESS_CONFLICT
+ERROR_WMI_GUID_NOT_FOUND
+ERROR_WMI_INSTANCE_NOT_FOUND
+ERROR_WMI_ITEMID_NOT_FOUND
+ERROR_WMI_TRY_AGAIN
+ERROR_WMI_DP_NOT_FOUND
+ERROR_WMI_UNRESOLVED_INSTANCE_REF
+ERROR_WMI_ALREADY_ENABLED
+ERROR_WMI_GUID_DISCONNECTED
+ERROR_WMI_SERVER_UNAVAILABLE
+ERROR_WMI_DP_FAILED
+ERROR_WMI_INVALID_MOF
+ERROR_WMI_INVALID_REGINFO
+ERROR_WMI_ALREADY_DISABLED
+ERROR_WMI_READ_ONLY
+ERROR_WMI_SET_FAILURE
+ERROR_INVALID_MEDIA
+ERROR_INVALID_LIBRARY
+ERROR_INVALID_MEDIA_POOL
+ERROR_DRIVE_MEDIA_MISMATCH
+ERROR_MEDIA_OFFLINE
+ERROR_LIBRARY_OFFLINE
+ERROR_EMPTY
+ERROR_NOT_EMPTY
+ERROR_MEDIA_UNAVAILABLE
+ERROR_RESOURCE_DISABLED
+ERROR_INVALID_CLEANER
+ERROR_UNABLE_TO_CLEAN
+ERROR_OBJECT_NOT_FOUND
+ERROR_DATABASE_FAILURE
+ERROR_DATABASE_FULL
+ERROR_MEDIA_INCOMPATIBLE
+ERROR_RESOURCE_NOT_PRESENT
+ERROR_INVALID_OPERATION
+ERROR_MEDIA_NOT_AVAILABLE
+ERROR_DEVICE_NOT_AVAILABLE
+ERROR_REQUEST_REFUSED
+ERROR_INVALID_DRIVE_OBJECT
+ERROR_LIBRARY_FULL
+ERROR_MEDIUM_NOT_ACCESSIBLE
+ERROR_UNABLE_TO_LOAD_MEDIUM
+ERROR_UNABLE_TO_INVENTORY_DRIVE
+ERROR_UNABLE_TO_INVENTORY_SLOT
+ERROR_UNABLE_TO_INVENTORY_TRANSPORT
+ERROR_TRANSPORT_FULL
+ERROR_CONTROLLING_IEPORT
+ERROR_UNABLE_TO_EJECT_MOUNTED_MEDIA
+ERROR_CLEANER_SLOT_SET
+ERROR_CLEANER_SLOT_NOT_SET
+ERROR_CLEANER_CARTRIDGE_SPENT
+ERROR_UNEXPECTED_OMID
+ERROR_CANT_DELETE_LAST_ITEM
+ERROR_MESSAGE_EXCEEDS_MAX_SIZE
+ERROR_VOLUME_CONTAINS_SYS_FILES
+ERROR_INDIGENOUS_TYPE
+ERROR_NO_SUPPORTING_DRIVES
+ERROR_CLEANER_CARTRIDGE_INSTALLED
+ERROR_IEPORT_FULL
+ERROR_FILE_OFFLINE
+ERROR_REMOTE_STORAGE_NOT_ACTIVE
+ERROR_REMOTE_STORAGE_MEDIA_ERROR
+ERROR_NOT_A_REPARSE_POINT
+ERROR_REPARSE_ATTRIBUTE_CONFLICT
+ERROR_INVALID_REPARSE_DATA
+ERROR_REPARSE_TAG_INVALID
+ERROR_REPARSE_TAG_MISMATCH
+ERROR_VOLUME_NOT_SIS_ENABLED
+ERROR_DEPENDENT_RESOURCE_EXISTS
+ERROR_DEPENDENCY_NOT_FOUND
+ERROR_DEPENDENCY_ALREADY_EXISTS
+ERROR_RESOURCE_NOT_ONLINE
+ERROR_HOST_NODE_NOT_AVAILABLE
+ERROR_RESOURCE_NOT_AVAILABLE
+ERROR_RESOURCE_NOT_FOUND
+ERROR_SHUTDOWN_CLUSTER
+ERROR_CANT_EVICT_ACTIVE_NODE
+ERROR_OBJECT_ALREADY_EXISTS
+ERROR_OBJECT_IN_LIST
+ERROR_GROUP_NOT_AVAILABLE
+ERROR_GROUP_NOT_FOUND
+ERROR_GROUP_NOT_ONLINE
+ERROR_HOST_NODE_NOT_RESOURCE_OWNER
+ERROR_HOST_NODE_NOT_GROUP_OWNER
+ERROR_RESMON_CREATE_FAILED
+ERROR_RESMON_ONLINE_FAILED
+ERROR_RESOURCE_ONLINE
+ERROR_QUORUM_RESOURCE
+ERROR_NOT_QUORUM_CAPABLE
+ERROR_CLUSTER_SHUTTING_DOWN
+ERROR_INVALID_STATE
+ERROR_RESOURCE_PROPERTIES_STORED
+ERROR_NOT_QUORUM_CLASS
+ERROR_CORE_RESOURCE
+ERROR_QUORUM_RESOURCE_ONLINE_FAILED
+ERROR_QUORUMLOG_OPEN_FAILED
+ERROR_CLUSTERLOG_CORRUPT
+ERROR_CLUSTERLOG_RECORD_EXCEEDS_MAXSIZE
+ERROR_CLUSTERLOG_EXCEEDS_MAXSIZE
+ERROR_CLUSTERLOG_CHKPOINT_NOT_FOUND
+ERROR_CLUSTERLOG_NOT_ENOUGH_SPACE
+ERROR_QUORUM_OWNER_ALIVE
+ERROR_NETWORK_NOT_AVAILABLE
+ERROR_NODE_NOT_AVAILABLE
+ERROR_ALL_NODES_NOT_AVAILABLE
+ERROR_RESOURCE_FAILED
+ERROR_CLUSTER_INVALID_NODE
+ERROR_CLUSTER_NODE_EXISTS
+ERROR_CLUSTER_JOIN_IN_PROGRESS
+ERROR_CLUSTER_NODE_NOT_FOUND
+ERROR_CLUSTER_LOCAL_NODE_NOT_FOUND
+ERROR_CLUSTER_NETWORK_EXISTS
+ERROR_CLUSTER_NETWORK_NOT_FOUND
+ERROR_CLUSTER_NETINTERFACE_EXISTS
+ERROR_CLUSTER_NETINTERFACE_NOT_FOUND
+ERROR_CLUSTER_INVALID_REQUEST
+ERROR_CLUSTER_INVALID_NETWORK_PROVIDER
+ERROR_CLUSTER_NODE_DOWN
+ERROR_CLUSTER_NODE_UNREACHABLE
+ERROR_CLUSTER_NODE_NOT_MEMBER
+ERROR_CLUSTER_JOIN_NOT_IN_PROGRESS
+ERROR_CLUSTER_INVALID_NETWORK
+ERROR_CLUSTER_NODE_UP
+ERROR_CLUSTER_IPADDR_IN_USE
+ERROR_CLUSTER_NODE_NOT_PAUSED
+ERROR_CLUSTER_NO_SECURITY_CONTEXT
+ERROR_CLUSTER_NETWORK_NOT_INTERNAL
+ERROR_CLUSTER_NODE_ALREADY_UP
+ERROR_CLUSTER_NODE_ALREADY_DOWN
+ERROR_CLUSTER_NETWORK_ALREADY_ONLINE
+ERROR_CLUSTER_NETWORK_ALREADY_OFFLINE
+ERROR_CLUSTER_NODE_ALREADY_MEMBER
+ERROR_CLUSTER_LAST_INTERNAL_NETWORK
+ERROR_CLUSTER_NETWORK_HAS_DEPENDENTS
+ERROR_INVALID_OPERATION_ON_QUORUM
+ERROR_DEPENDENCY_NOT_ALLOWED
+ERROR_CLUSTER_NODE_PAUSED
+ERROR_NODE_CANT_HOST_RESOURCE
+ERROR_CLUSTER_NODE_NOT_READY
+ERROR_CLUSTER_NODE_SHUTTING_DOWN
+ERROR_CLUSTER_JOIN_ABORTED
+ERROR_CLUSTER_INCOMPATIBLE_VERSIONS
+ERROR_CLUSTER_MAXNUM_OF_RESOURCES_EXCEEDED
+ERROR_CLUSTER_SYSTEM_CONFIG_CHANGED
+ERROR_CLUSTER_RESOURCE_TYPE_NOT_FOUND
+ERROR_CLUSTER_RESTYPE_NOT_SUPPORTED
+ERROR_CLUSTER_RESNAME_NOT_FOUND
+ERROR_CLUSTER_NO_RPC_PACKAGES_REGISTERED
+ERROR_CLUSTER_OWNER_NOT_IN_PREFLIST
+ERROR_CLUSTER_DATABASE_SEQMISMATCH
+ERROR_RESMON_INVALID_STATE
+ERROR_CLUSTER_GUM_NOT_LOCKER
+ERROR_QUORUM_DISK_NOT_FOUND
+ERROR_DATABASE_BACKUP_CORRUPT
+ERROR_CLUSTER_NODE_ALREADY_HAS_DFS_ROOT
+ERROR_RESOURCE_PROPERTY_UNCHANGEABLE
+ERROR_CLUSTER_MEMBERSHIP_INVALID_STATE
+ERROR_CLUSTER_QUORUMLOG_NOT_FOUND
+ERROR_CLUSTER_MEMBERSHIP_HALT
+ERROR_CLUSTER_INSTANCE_ID_MISMATCH
+ERROR_CLUSTER_NETWORK_NOT_FOUND_FOR_IP
+ERROR_CLUSTER_PROPERTY_DATA_TYPE_MISMATCH
+ERROR_CLUSTER_EVICT_WITHOUT_CLEANUP
+ERROR_CLUSTER_PARAMETER_MISMATCH
+ERROR_NODE_CANNOT_BE_CLUSTERED
+ERROR_CLUSTER_WRONG_OS_VERSION
+ERROR_CLUSTER_CANT_CREATE_DUP_CLUSTER_NAME
+ERROR_CLUSCFG_ALREADY_COMMITTED
+ERROR_CLUSCFG_ROLLBACK_FAILED
+ERROR_CLUSCFG_SYSTEM_DISK_DRIVE_LETTER_CONFLICT
+ERROR_CLUSTER_OLD_VERSION
+ERROR_CLUSTER_MISMATCHED_COMPUTER_ACCT_NAME
+ERROR_ENCRYPTION_FAILED
+ERROR_DECRYPTION_FAILED
+ERROR_FILE_ENCRYPTED
+ERROR_NO_RECOVERY_POLICY
+ERROR_NO_EFS
+ERROR_WRONG_EFS
+ERROR_NO_USER_KEYS
+ERROR_FILE_NOT_ENCRYPTED
+ERROR_NOT_EXPORT_FORMAT
+ERROR_FILE_READ_ONLY
+ERROR_DIR_EFS_DISALLOWED
+ERROR_EFS_SERVER_NOT_TRUSTED
+ERROR_BAD_RECOVERY_POLICY
+ERROR_EFS_ALG_BLOB_TOO_BIG
+ERROR_VOLUME_NOT_SUPPORT_EFS
+ERROR_EFS_DISABLED
+ERROR_EFS_VERSION_NOT_SUPPORT
+ERROR_NO_BROWSER_SERVERS_FOUND
+ERROR_CTX_WINSTATION_NAME_INVALID
+ERROR_CTX_INVALID_PD
+ERROR_CTX_PD_NOT_FOUND
+ERROR_CTX_WD_NOT_FOUND
+ERROR_CTX_CANNOT_MAKE_EVENTLOG_ENTRY
+ERROR_CTX_SERVICE_NAME_COLLISION
+ERROR_CTX_CLOSE_PENDING
+ERROR_CTX_NO_OUTBUF
+ERROR_CTX_MODEM_INF_NOT_FOUND
+ERROR_CTX_INVALID_MODEMNAME
+ERROR_CTX_MODEM_RESPONSE_ERROR
+ERROR_CTX_MODEM_RESPONSE_TIMEOUT
+ERROR_CTX_MODEM_RESPONSE_NO_CARRIER
+ERROR_CTX_MODEM_RESPONSE_NO_DIALTONE
+ERROR_CTX_MODEM_RESPONSE_BUSY
+ERROR_CTX_MODEM_RESPONSE_VOICE
+ERROR_CTX_TD_ERROR
+ERROR_CTX_WINSTATION_NOT_FOUND
+ERROR_CTX_WINSTATION_ALREADY_EXISTS
+ERROR_CTX_WINSTATION_BUSY
+ERROR_CTX_BAD_VIDEO_MODE
+ERROR_CTX_GRAPHICS_INVALID
+ERROR_CTX_LOGON_DISABLED
+ERROR_CTX_NOT_CONSOLE
+ERROR_CTX_CLIENT_QUERY_TIMEOUT
+ERROR_CTX_CONSOLE_DISCONNECT
+ERROR_CTX_CONSOLE_CONNECT
+ERROR_CTX_SHADOW_DENIED
+ERROR_CTX_WINSTATION_ACCESS_DENIED
+ERROR_CTX_INVALID_WD
+ERROR_CTX_SHADOW_INVALID
+ERROR_CTX_SHADOW_DISABLED
+ERROR_CTX_CLIENT_LICENSE_IN_USE
+ERROR_CTX_CLIENT_LICENSE_NOT_SET
+ERROR_CTX_LICENSE_NOT_AVAILABLE
+ERROR_CTX_LICENSE_CLIENT_INVALID
+ERROR_CTX_LICENSE_EXPIRED
+ERROR_CTX_SHADOW_NOT_RUNNING
+ERROR_CTX_SHADOW_ENDED_BY_MODE_CHANGE
+ERROR_ACTIVATION_COUNT_EXCEEDED
+ERROR_DS_NOT_INSTALLED
+ERROR_DS_MEMBERSHIP_EVALUATED_LOCALLY
+ERROR_DS_NO_ATTRIBUTE_OR_VALUE
+ERROR_DS_INVALID_ATTRIBUTE_SYNTAX
+ERROR_DS_ATTRIBUTE_TYPE_UNDEFINED
+ERROR_DS_ATTRIBUTE_OR_VALUE_EXISTS
+ERROR_DS_BUSY
+ERROR_DS_UNAVAILABLE
+ERROR_DS_NO_RIDS_ALLOCATED
+ERROR_DS_NO_MORE_RIDS
+ERROR_DS_INCORRECT_ROLE_OWNER
+ERROR_DS_RIDMGR_INIT_ERROR
+ERROR_DS_OBJ_CLASS_VIOLATION
+ERROR_DS_CANT_ON_NON_LEAF
+ERROR_DS_CANT_ON_RDN
+ERROR_DS_CANT_MOD_OBJ_CLASS
+ERROR_DS_CROSS_DOM_MOVE_ERROR
+ERROR_DS_GC_NOT_AVAILABLE
+ERROR_SHARED_POLICY
+ERROR_POLICY_OBJECT_NOT_FOUND
+ERROR_POLICY_ONLY_IN_DS
+ERROR_PROMOTION_ACTIVE
+ERROR_NO_PROMOTION_ACTIVE
+ERROR_DS_OPERATIONS_ERROR
+ERROR_DS_PROTOCOL_ERROR
+ERROR_DS_TIMELIMIT_EXCEEDED
+ERROR_DS_SIZELIMIT_EXCEEDED
+ERROR_DS_ADMIN_LIMIT_EXCEEDED
+ERROR_DS_COMPARE_FALSE
+ERROR_DS_COMPARE_TRUE
+ERROR_DS_AUTH_METHOD_NOT_SUPPORTED
+ERROR_DS_STRONG_AUTH_REQUIRED
+ERROR_DS_INAPPROPRIATE_AUTH
+ERROR_DS_AUTH_UNKNOWN
+ERROR_DS_REFERRAL
+ERROR_DS_UNAVAILABLE_CRIT_EXTENSION
+ERROR_DS_CONFIDENTIALITY_REQUIRED
+ERROR_DS_INAPPROPRIATE_MATCHING
+ERROR_DS_CONSTRAINT_VIOLATION
+ERROR_DS_NO_SUCH_OBJECT
+ERROR_DS_ALIAS_PROBLEM
+ERROR_DS_INVALID_DN_SYNTAX
+ERROR_DS_IS_LEAF
+ERROR_DS_ALIAS_DEREF_PROBLEM
+ERROR_DS_UNWILLING_TO_PERFORM
+ERROR_DS_LOOP_DETECT
+ERROR_DS_NAMING_VIOLATION
+ERROR_DS_OBJECT_RESULTS_TOO_LARGE
+ERROR_DS_AFFECTS_MULTIPLE_DSAS
+ERROR_DS_SERVER_DOWN
+ERROR_DS_LOCAL_ERROR
+ERROR_DS_ENCODING_ERROR
+ERROR_DS_DECODING_ERROR
+ERROR_DS_FILTER_UNKNOWN
+ERROR_DS_PARAM_ERROR
+ERROR_DS_NOT_SUPPORTED
+ERROR_DS_NO_RESULTS_RETURNED
+ERROR_DS_CONTROL_NOT_FOUND
+ERROR_DS_CLIENT_LOOP
+ERROR_DS_REFERRAL_LIMIT_EXCEEDED
+ERROR_DS_SORT_CONTROL_MISSING
+ERROR_DS_OFFSET_RANGE_ERROR
+ERROR_DS_ROOT_MUST_BE_NC
+ERROR_DS_ADD_REPLICA_INHIBITED
+ERROR_DS_ATT_NOT_DEF_IN_SCHEMA
+ERROR_DS_MAX_OBJ_SIZE_EXCEEDED
+ERROR_DS_OBJ_STRING_NAME_EXISTS
+ERROR_DS_NO_RDN_DEFINED_IN_SCHEMA
+ERROR_DS_RDN_DOESNT_MATCH_SCHEMA
+ERROR_DS_NO_REQUESTED_ATTS_FOUND
+ERROR_DS_USER_BUFFER_TO_SMALL
+ERROR_DS_ATT_IS_NOT_ON_OBJ
+ERROR_DS_ILLEGAL_MOD_OPERATION
+ERROR_DS_OBJ_TOO_LARGE
+ERROR_DS_BAD_INSTANCE_TYPE
+ERROR_DS_MASTERDSA_REQUIRED
+ERROR_DS_OBJECT_CLASS_REQUIRED
+ERROR_DS_MISSING_REQUIRED_ATT
+ERROR_DS_ATT_NOT_DEF_FOR_CLASS
+ERROR_DS_ATT_ALREADY_EXISTS
+ERROR_DS_CANT_ADD_ATT_VALUES
+ERROR_DS_SINGLE_VALUE_CONSTRAINT
+ERROR_DS_RANGE_CONSTRAINT
+ERROR_DS_ATT_VAL_ALREADY_EXISTS
+ERROR_DS_CANT_REM_MISSING_ATT
+ERROR_DS_CANT_REM_MISSING_ATT_VAL
+ERROR_DS_ROOT_CANT_BE_SUBREF
+ERROR_DS_NO_CHAINING
+ERROR_DS_NO_CHAINED_EVAL
+ERROR_DS_NO_PARENT_OBJECT
+ERROR_DS_PARENT_IS_AN_ALIAS
+ERROR_DS_CANT_MIX_MASTER_AND_REPS
+ERROR_DS_CHILDREN_EXIST
+ERROR_DS_OBJ_NOT_FOUND
+ERROR_DS_ALIASED_OBJ_MISSING
+ERROR_DS_BAD_NAME_SYNTAX
+ERROR_DS_ALIAS_POINTS_TO_ALIAS
+ERROR_DS_CANT_DEREF_ALIAS
+ERROR_DS_OUT_OF_SCOPE
+ERROR_DS_OBJECT_BEING_REMOVED
+ERROR_DS_CANT_DELETE_DSA_OBJ
+ERROR_DS_GENERIC_ERROR
+ERROR_DS_DSA_MUST_BE_INT_MASTER
+ERROR_DS_CLASS_NOT_DSA
+ERROR_DS_INSUFF_ACCESS_RIGHTS
+ERROR_DS_ILLEGAL_SUPERIOR
+ERROR_DS_ATTRIBUTE_OWNED_BY_SAM
+ERROR_DS_NAME_TOO_MANY_PARTS
+ERROR_DS_NAME_TOO_LONG
+ERROR_DS_NAME_VALUE_TOO_LONG
+ERROR_DS_NAME_UNPARSEABLE
+ERROR_DS_NAME_TYPE_UNKNOWN
+ERROR_DS_NOT_AN_OBJECT
+ERROR_DS_SEC_DESC_TOO_SHORT
+ERROR_DS_SEC_DESC_INVALID
+ERROR_DS_NO_DELETED_NAME
+ERROR_DS_SUBREF_MUST_HAVE_PARENT
+ERROR_DS_NCNAME_MUST_BE_NC
+ERROR_DS_CANT_ADD_SYSTEM_ONLY
+ERROR_DS_CLASS_MUST_BE_CONCRETE
+ERROR_DS_INVALID_DMD
+ERROR_DS_OBJ_GUID_EXISTS
+ERROR_DS_NOT_ON_BACKLINK
+ERROR_DS_NO_CROSSREF_FOR_NC
+ERROR_DS_SHUTTING_DOWN
+ERROR_DS_UNKNOWN_OPERATION
+ERROR_DS_INVALID_ROLE_OWNER
+ERROR_DS_COULDNT_CONTACT_FSMO
+ERROR_DS_CROSS_NC_DN_RENAME
+ERROR_DS_CANT_MOD_SYSTEM_ONLY
+ERROR_DS_REPLICATOR_ONLY
+ERROR_DS_OBJ_CLASS_NOT_DEFINED
+ERROR_DS_OBJ_CLASS_NOT_SUBCLASS
+ERROR_DS_NAME_REFERENCE_INVALID
+ERROR_DS_CROSS_REF_EXISTS
+ERROR_DS_CANT_DEL_MASTER_CROSSREF
+ERROR_DS_SUBTREE_NOTIFY_NOT_NC_HEAD
+ERROR_DS_NOTIFY_FILTER_TOO_COMPLEX
+ERROR_DS_DUP_RDN
+ERROR_DS_DUP_OID
+ERROR_DS_DUP_MAPI_ID
+ERROR_DS_DUP_SCHEMA_ID_GUID
+ERROR_DS_DUP_LDAP_DISPLAY_NAME
+ERROR_DS_SEMANTIC_ATT_TEST
+ERROR_DS_SYNTAX_MISMATCH
+ERROR_DS_EXISTS_IN_MUST_HAVE
+ERROR_DS_EXISTS_IN_MAY_HAVE
+ERROR_DS_NONEXISTENT_MAY_HAVE
+ERROR_DS_NONEXISTENT_MUST_HAVE
+ERROR_DS_AUX_CLS_TEST_FAIL
+ERROR_DS_NONEXISTENT_POSS_SUP
+ERROR_DS_SUB_CLS_TEST_FAIL
+ERROR_DS_BAD_RDN_ATT_ID_SYNTAX
+ERROR_DS_EXISTS_IN_AUX_CLS
+ERROR_DS_EXISTS_IN_SUB_CLS
+ERROR_DS_EXISTS_IN_POSS_SUP
+ERROR_DS_RECALCSCHEMA_FAILED
+ERROR_DS_TREE_DELETE_NOT_FINISHED
+ERROR_DS_CANT_DELETE
+ERROR_DS_ATT_SCHEMA_REQ_ID
+ERROR_DS_BAD_ATT_SCHEMA_SYNTAX
+ERROR_DS_CANT_CACHE_ATT
+ERROR_DS_CANT_CACHE_CLASS
+ERROR_DS_CANT_REMOVE_ATT_CACHE
+ERROR_DS_CANT_REMOVE_CLASS_CACHE
+ERROR_DS_CANT_RETRIEVE_DN
+ERROR_DS_MISSING_SUPREF
+ERROR_DS_CANT_RETRIEVE_INSTANCE
+ERROR_DS_CODE_INCONSISTENCY
+ERROR_DS_DATABASE_ERROR
+ERROR_DS_GOVERNSID_MISSING
+ERROR_DS_MISSING_EXPECTED_ATT
+ERROR_DS_NCNAME_MISSING_CR_REF
+ERROR_DS_SECURITY_CHECKING_ERROR
+ERROR_DS_SCHEMA_NOT_LOADED
+ERROR_DS_SCHEMA_ALLOC_FAILED
+ERROR_DS_ATT_SCHEMA_REQ_SYNTAX
+ERROR_DS_GCVERIFY_ERROR
+ERROR_DS_DRA_SCHEMA_MISMATCH
+ERROR_DS_CANT_FIND_DSA_OBJ
+ERROR_DS_CANT_FIND_EXPECTED_NC
+ERROR_DS_CANT_FIND_NC_IN_CACHE
+ERROR_DS_CANT_RETRIEVE_CHILD
+ERROR_DS_SECURITY_ILLEGAL_MODIFY
+ERROR_DS_CANT_REPLACE_HIDDEN_REC
+ERROR_DS_BAD_HIERARCHY_FILE
+ERROR_DS_BUILD_HIERARCHY_TABLE_FAILED
+ERROR_DS_CONFIG_PARAM_MISSING
+ERROR_DS_COUNTING_AB_INDICES_FAILED
+ERROR_DS_HIERARCHY_TABLE_MALLOC_FAILED
+ERROR_DS_INTERNAL_FAILURE
+ERROR_DS_UNKNOWN_ERROR
+ERROR_DS_ROOT_REQUIRES_CLASS_TOP
+ERROR_DS_REFUSING_FSMO_ROLES
+ERROR_DS_MISSING_FSMO_SETTINGS
+ERROR_DS_UNABLE_TO_SURRENDER_ROLES
+ERROR_DS_DRA_GENERIC
+ERROR_DS_DRA_INVALID_PARAMETER
+ERROR_DS_DRA_BUSY
+ERROR_DS_DRA_BAD_DN
+ERROR_DS_DRA_BAD_NC
+ERROR_DS_DRA_DN_EXISTS
+ERROR_DS_DRA_INTERNAL_ERROR
+ERROR_DS_DRA_INCONSISTENT_DIT
+ERROR_DS_DRA_CONNECTION_FAILED
+ERROR_DS_DRA_BAD_INSTANCE_TYPE
+ERROR_DS_DRA_OUT_OF_MEM
+ERROR_DS_DRA_MAIL_PROBLEM
+ERROR_DS_DRA_REF_ALREADY_EXISTS
+ERROR_DS_DRA_REF_NOT_FOUND
+ERROR_DS_DRA_OBJ_IS_REP_SOURCE
+ERROR_DS_DRA_DB_ERROR
+ERROR_DS_DRA_NO_REPLICA
+ERROR_DS_DRA_ACCESS_DENIED
+ERROR_DS_DRA_NOT_SUPPORTED
+ERROR_DS_DRA_RPC_CANCELLED
+ERROR_DS_DRA_SOURCE_DISABLED
+ERROR_DS_DRA_SINK_DISABLED
+ERROR_DS_DRA_NAME_COLLISION
+ERROR_DS_DRA_SOURCE_REINSTALLED
+ERROR_DS_DRA_MISSING_PARENT
+ERROR_DS_DRA_PREEMPTED
+ERROR_DS_DRA_ABANDON_SYNC
+ERROR_DS_DRA_SHUTDOWN
+ERROR_DS_DRA_INCOMPATIBLE_PARTIAL_SET
+ERROR_DS_DRA_SOURCE_IS_PARTIAL_REPLICA
+ERROR_DS_DRA_EXTN_CONNECTION_FAILED
+ERROR_DS_INSTALL_SCHEMA_MISMATCH
+ERROR_DS_DUP_LINK_ID
+ERROR_DS_NAME_ERROR_RESOLVING
+ERROR_DS_NAME_ERROR_NOT_FOUND
+ERROR_DS_NAME_ERROR_NOT_UNIQUE
+ERROR_DS_NAME_ERROR_NO_MAPPING
+ERROR_DS_NAME_ERROR_DOMAIN_ONLY
+ERROR_DS_NAME_ERROR_NO_SYNTACTICAL_MAPPING
+ERROR_DS_CONSTRUCTED_ATT_MOD
+ERROR_DS_WRONG_OM_OBJ_CLASS
+ERROR_DS_DRA_REPL_PENDING
+ERROR_DS_DS_REQUIRED
+ERROR_DS_INVALID_LDAP_DISPLAY_NAME
+ERROR_DS_NON_BASE_SEARCH
+ERROR_DS_CANT_RETRIEVE_ATTS
+ERROR_DS_BACKLINK_WITHOUT_LINK
+ERROR_DS_EPOCH_MISMATCH
+ERROR_DS_SRC_NAME_MISMATCH
+ERROR_DS_SRC_AND_DST_NC_IDENTICAL
+ERROR_DS_DST_NC_MISMATCH
+ERROR_DS_NOT_AUTHORITIVE_FOR_DST_NC
+ERROR_DS_SRC_GUID_MISMATCH
+ERROR_DS_CANT_MOVE_DELETED_OBJECT
+ERROR_DS_PDC_OPERATION_IN_PROGRESS
+ERROR_DS_CROSS_DOMAIN_CLEANUP_REQD
+ERROR_DS_ILLEGAL_XDOM_MOVE_OPERATION
+ERROR_DS_CANT_WITH_ACCT_GROUP_MEMBERSHPS
+ERROR_DS_NC_MUST_HAVE_NC_PARENT
+ERROR_DS_CR_IMPOSSIBLE_TO_VALIDATE
+ERROR_DS_DST_DOMAIN_NOT_NATIVE
+ERROR_DS_MISSING_INFRASTRUCTURE_CONTAINER
+ERROR_DS_CANT_MOVE_ACCOUNT_GROUP
+ERROR_DS_CANT_MOVE_RESOURCE_GROUP
+ERROR_DS_INVALID_SEARCH_FLAG
+ERROR_DS_NO_TREE_DELETE_ABOVE_NC
+ERROR_DS_COULDNT_LOCK_TREE_FOR_DELETE
+ERROR_DS_COULDNT_IDENTIFY_OBJECTS_FOR_TREE_DELETE
+ERROR_DS_SAM_INIT_FAILURE
+ERROR_DS_SENSITIVE_GROUP_VIOLATION
+ERROR_DS_CANT_MOD_PRIMARYGROUPID
+ERROR_DS_ILLEGAL_BASE_SCHEMA_MOD
+ERROR_DS_NONSAFE_SCHEMA_CHANGE
+ERROR_DS_SCHEMA_UPDATE_DISALLOWED
+ERROR_DS_CANT_CREATE_UNDER_SCHEMA
+ERROR_DS_INSTALL_NO_SRC_SCH_VERSION
+ERROR_DS_INSTALL_NO_SCH_VERSION_IN_INIFILE
+ERROR_DS_INVALID_GROUP_TYPE
+ERROR_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN
+ERROR_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN
+ERROR_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER
+ERROR_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER
+ERROR_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER
+ERROR_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER
+ERROR_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER
+ERROR_DS_HAVE_PRIMARY_MEMBERS
+ERROR_DS_STRING_SD_CONVERSION_FAILED
+ERROR_DS_NAMING_MASTER_GC
+ERROR_DS_DNS_LOOKUP_FAILURE
+ERROR_DS_COULDNT_UPDATE_SPNS
+ERROR_DS_CANT_RETRIEVE_SD
+ERROR_DS_KEY_NOT_UNIQUE
+ERROR_DS_WRONG_LINKED_ATT_SYNTAX
+ERROR_DS_SAM_NEED_BOOTKEY_PASSWORD
+ERROR_DS_SAM_NEED_BOOTKEY_FLOPPY
+ERROR_DS_CANT_START
+ERROR_DS_INIT_FAILURE
+ERROR_DS_NO_PKT_PRIVACY_ON_CONNECTION
+ERROR_DS_SOURCE_DOMAIN_IN_FOREST
+ERROR_DS_DESTINATION_DOMAIN_NOT_IN_FOREST
+ERROR_DS_DESTINATION_AUDITING_NOT_ENABLED
+ERROR_DS_CANT_FIND_DC_FOR_SRC_DOMAIN
+ERROR_DS_SRC_OBJ_NOT_GROUP_OR_USER
+ERROR_DS_SRC_SID_EXISTS_IN_FOREST
+ERROR_DS_SRC_AND_DST_OBJECT_CLASS_MISMATCH
+ERROR_SAM_INIT_FAILURE
+ERROR_DS_DRA_SCHEMA_INFO_SHIP
+ERROR_DS_DRA_SCHEMA_CONFLICT
+ERROR_DS_DRA_EARLIER_SCHEMA_CONFLICT
+ERROR_DS_DRA_OBJ_NC_MISMATCH
+ERROR_DS_NC_STILL_HAS_DSAS
+ERROR_DS_GC_REQUIRED
+ERROR_DS_LOCAL_MEMBER_OF_LOCAL_ONLY
+ERROR_DS_NO_FPO_IN_UNIVERSAL_GROUPS
+ERROR_DS_CANT_ADD_TO_GC
+ERROR_DS_NO_CHECKPOINT_WITH_PDC
+ERROR_DS_SOURCE_AUDITING_NOT_ENABLED
+ERROR_DS_CANT_CREATE_IN_NONDOMAIN_NC
+ERROR_DS_INVALID_NAME_FOR_SPN
+ERROR_DS_FILTER_USES_CONTRUCTED_ATTRS
+ERROR_DS_UNICODEPWD_NOT_IN_QUOTES
+ERROR_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED
+ERROR_DS_MUST_BE_RUN_ON_DST_DC
+ERROR_DS_SRC_DC_MUST_BE_SP4_OR_GREATER
+ERROR_DS_CANT_TREE_DELETE_CRITICAL_OBJ
+ERROR_DS_INIT_FAILURE_CONSOLE
+ERROR_DS_SAM_INIT_FAILURE_CONSOLE
+ERROR_DS_FOREST_VERSION_TOO_HIGH
+ERROR_DS_DOMAIN_VERSION_TOO_HIGH
+ERROR_DS_FOREST_VERSION_TOO_LOW
+ERROR_DS_DOMAIN_VERSION_TOO_LOW
+ERROR_DS_INCOMPATIBLE_VERSION
+ERROR_DS_LOW_DSA_VERSION
+ERROR_DS_NO_BEHAVIOR_VERSION_IN_MIXEDDOMAIN
+ERROR_DS_NOT_SUPPORTED_SORT_ORDER
+ERROR_DS_NAME_NOT_UNIQUE
+ERROR_DS_MACHINE_ACCOUNT_CREATED_PRENT4
+ERROR_DS_OUT_OF_VERSION_STORE
+ERROR_DS_INCOMPATIBLE_CONTROLS_USED
+ERROR_DS_NO_REF_DOMAIN
+ERROR_DS_RESERVED_LINK_ID
+ERROR_DS_LINK_ID_NOT_AVAILABLE
+ERROR_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER
+ERROR_DS_MODIFYDN_DISALLOWED_BY_INSTANCE_TYPE
+ERROR_DS_NO_OBJECT_MOVE_IN_SCHEMA_NC
+ERROR_DS_MODIFYDN_DISALLOWED_BY_FLAG
+ERROR_DS_MODIFYDN_WRONG_GRANDPARENT
+ERROR_DS_NAME_ERROR_TRUST_REFERRAL
+ERROR_NOT_SUPPORTED_ON_STANDARD_SERVER
+ERROR_DS_CANT_ACCESS_REMOTE_PART_OF_AD
+ERROR_DS_CR_IMPOSSIBLE_TO_VALIDATE_V2
+ERROR_DS_THREAD_LIMIT_EXCEEDED
+ERROR_DS_NOT_CLOSEST
+ERROR_DS_CANT_DERIVE_SPN_WITHOUT_SERVER_REF
+ERROR_DS_SINGLE_USER_MODE_FAILED
+ERROR_DS_NTDSCRIPT_SYNTAX_ERROR
+ERROR_DS_NTDSCRIPT_PROCESS_ERROR
+ERROR_DS_DIFFERENT_REPL_EPOCHS
+ERROR_DS_DRS_EXTENSIONS_CHANGED
+ERROR_DS_REPLICA_SET_CHANGE_NOT_ALLOWED_ON_DISABLED_CR
+ERROR_DS_NO_MSDS_INTID
+ERROR_DS_DUP_MSDS_INTID
+ERROR_DS_EXISTS_IN_RDNATTID
+ERROR_DS_AUTHORIZATION_FAILED
+ERROR_DS_INVALID_SCRIPT
+ERROR_DS_REMOTE_CROSSREF_OP_FAILED
+ERROR_DS_CROSS_REF_BUSY
+ERROR_DS_CANT_DERIVE_SPN_FOR_DELETED_DOMAIN
+ERROR_DS_CANT_DEMOTE_WITH_WRITEABLE_NC
+ERROR_DS_DUPLICATE_ID_FOUND
+ERROR_DS_INSUFFICIENT_ATTR_TO_CREATE_OBJECT
+ERROR_DS_GROUP_CONVERSION_ERROR
+ERROR_DS_CANT_MOVE_APP_BASIC_GROUP
+ERROR_DS_CANT_MOVE_APP_QUERY_GROUP
+ERROR_DS_ROLE_NOT_VERIFIED
+ERROR_DS_WKO_CONTAINER_CANNOT_BE_SPECIAL
+ERROR_DS_DOMAIN_RENAME_IN_PROGRESS
+ERROR_DS_EXISTING_AD_CHILD_NC
+ERROR_DS_REPL_LIFETIME_EXCEEDED
+ERROR_DS_DISALLOWED_IN_SYSTEM_CONTAINER
+ERROR_DS_LDAP_SEND_QUEUE_FULL
+ERROR_DS_DRA_OUT_SCHEDULE_WINDOW
+ERROR_SXS_SECTION_NOT_FOUND
+ERROR_SXS_CANT_GEN_ACTCTX
+ERROR_SXS_INVALID_ACTCTXDATA_FORMAT
+ERROR_SXS_ASSEMBLY_NOT_FOUND
+ERROR_SXS_MANIFEST_FORMAT_ERROR
+ERROR_SXS_MANIFEST_PARSE_ERROR
+ERROR_SXS_ACTIVATION_CONTEXT_DISABLED
+ERROR_SXS_KEY_NOT_FOUND
+ERROR_SXS_VERSION_CONFLICT
+ERROR_SXS_WRONG_SECTION_TYPE
+ERROR_SXS_THREAD_QUERIES_DISABLED
+ERROR_SXS_PROCESS_DEFAULT_ALREADY_SET
+ERROR_SXS_UNKNOWN_ENCODING_GROUP
+ERROR_SXS_UNKNOWN_ENCODING
+ERROR_SXS_INVALID_XML_NAMESPACE_URI
+ERROR_SXS_ROOT_MANIFEST_DEPENDENCY_NOT_INSTALLED
+ERROR_SXS_LEAF_MANIFEST_DEPENDENCY_NOT_INSTALLED
+ERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE
+ERROR_SXS_MANIFEST_MISSING_REQUIRED_DEFAULT_NAMESPACE
+ERROR_SXS_MANIFEST_INVALID_REQUIRED_DEFAULT_NAMESPACE
+ERROR_SXS_PRIVATE_MANIFEST_CROSS_PATH_WITH_REPARSE_POINT
+ERROR_SXS_DUPLICATE_DLL_NAME
+ERROR_SXS_DUPLICATE_WINDOWCLASS_NAME
+ERROR_SXS_DUPLICATE_CLSID
+ERROR_SXS_DUPLICATE_IID
+ERROR_SXS_DUPLICATE_TLBID
+ERROR_SXS_DUPLICATE_PROGID
+ERROR_SXS_DUPLICATE_ASSEMBLY_NAME
+ERROR_SXS_FILE_HASH_MISMATCH
+ERROR_SXS_POLICY_PARSE_ERROR
+ERROR_SXS_XML_E_MISSINGQUOTE
+ERROR_SXS_XML_E_COMMENTSYNTAX
+ERROR_SXS_XML_E_BADSTARTNAMECHAR
+ERROR_SXS_XML_E_BADNAMECHAR
+ERROR_SXS_XML_E_BADCHARINSTRING
+ERROR_SXS_XML_E_XMLDECLSYNTAX
+ERROR_SXS_XML_E_BADCHARDATA
+ERROR_SXS_XML_E_MISSINGWHITESPACE
+ERROR_SXS_XML_E_EXPECTINGTAGEND
+ERROR_SXS_XML_E_MISSINGSEMICOLON
+ERROR_SXS_XML_E_UNBALANCEDPAREN
+ERROR_SXS_XML_E_INTERNALERROR
+ERROR_SXS_XML_E_UNEXPECTED_WHITESPACE
+ERROR_SXS_XML_E_INCOMPLETE_ENCODING
+ERROR_SXS_XML_E_MISSING_PAREN
+ERROR_SXS_XML_E_EXPECTINGCLOSEQUOTE
+ERROR_SXS_XML_E_MULTIPLE_COLONS
+ERROR_SXS_XML_E_INVALID_DECIMAL
+ERROR_SXS_XML_E_INVALID_HEXIDECIMAL
+ERROR_SXS_XML_E_INVALID_UNICODE
+ERROR_SXS_XML_E_WHITESPACEORQUESTIONMARK
+ERROR_SXS_XML_E_UNEXPECTEDENDTAG
+ERROR_SXS_XML_E_UNCLOSEDTAG
+ERROR_SXS_XML_E_DUPLICATEATTRIBUTE
+ERROR_SXS_XML_E_MULTIPLEROOTS
+ERROR_SXS_XML_E_INVALIDATROOTLEVEL
+ERROR_SXS_XML_E_BADXMLDECL
+ERROR_SXS_XML_E_MISSINGROOT
+ERROR_SXS_XML_E_UNEXPECTEDEOF
+ERROR_SXS_XML_E_BADPEREFINSUBSET
+ERROR_SXS_XML_E_UNCLOSEDSTARTTAG
+ERROR_SXS_XML_E_UNCLOSEDENDTAG
+ERROR_SXS_XML_E_UNCLOSEDSTRING
+ERROR_SXS_XML_E_UNCLOSEDCOMMENT
+ERROR_SXS_XML_E_UNCLOSEDDECL
+ERROR_SXS_XML_E_UNCLOSEDCDATA
+ERROR_SXS_XML_E_RESERVEDNAMESPACE
+ERROR_SXS_XML_E_INVALIDENCODING
+ERROR_SXS_XML_E_INVALIDSWITCH
+ERROR_SXS_XML_E_BADXMLCASE
+ERROR_SXS_XML_E_INVALID_STANDALONE
+ERROR_SXS_XML_E_UNEXPECTED_STANDALONE
+ERROR_SXS_XML_E_INVALID_VERSION
+ERROR_SXS_XML_E_MISSINGEQUALS
+ERROR_SXS_PROTECTION_RECOVERY_FAILED
+ERROR_SXS_PROTECTION_PUBLIC_KEY_TOO_SHORT
+ERROR_SXS_PROTECTION_CATALOG_NOT_VALID
+ERROR_SXS_UNTRANSLATABLE_HRESULT
+ERROR_SXS_PROTECTION_CATALOG_FILE_MISSING
+ERROR_SXS_MISSING_ASSEMBLY_IDENTITY_ATTRIBUTE
+ERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE_NAME
+ERROR_SXS_ASSEMBLY_MISSING
+ERROR_SXS_CORRUPT_ACTIVATION_STACK
+ERROR_SXS_CORRUPTION
+ERROR_SXS_EARLY_DEACTIVATION
+ERROR_SXS_INVALID_DEACTIVATION
+ERROR_SXS_MULTIPLE_DEACTIVATION
+ERROR_SXS_PROCESS_TERMINATION_REQUESTED
+ERROR_SXS_RELEASE_ACTIVATION_CONTEXT
+ERROR_SXS_SYSTEM_DEFAULT_ACTIVATION_CONTEXT_EMPTY
+ERROR_SXS_INVALID_IDENTITY_ATTRIBUTE_VALUE
+ERROR_SXS_INVALID_IDENTITY_ATTRIBUTE_NAME
+ERROR_SXS_IDENTITY_DUPLICATE_ATTRIBUTE
+ERROR_SXS_IDENTITY_PARSE_ERROR
+ERROR_MALFORMED_SUBSTITUTION_STRING
+ERROR_SXS_INCORRECT_PUBLIC_KEY_TOKEN
+ERROR_UNMAPPED_SUBSTITUTION_STRING
+ERROR_SXS_ASSEMBLY_NOT_LOCKED
+ERROR_SXS_COMPONENT_STORE_CORRUPT
+ERROR_ADVANCED_INSTALLER_FAILED
+ERROR_XML_ENCODING_MISMATCH
+ERROR_SXS_MANIFEST_IDENTITY_SAME_BUT_CONTENTS_DIFFERENT
+ERROR_SXS_IDENTITIES_DIFFERENT
+ERROR_SXS_ASSEMBLY_IS_NOT_A_DEPLOYMENT
+ERROR_SXS_FILE_NOT_PART_OF_ASSEMBLY
+ERROR_SXS_MANIFEST_TOO_BIG
+ERROR_SXS_SETTING_NOT_REGISTERED
+ERROR_SXS_TRANSACTION_CLOSURE_INCOMPLETE
+ERROR_SMI_PRIMITIVE_INSTALLER_FAILED
+ERROR_GENERIC_COMMAND_FAILED
+ERROR_SXS_FILE_HASH_MISSING
+ERROR_IPSEC_QM_POLICY_EXISTS
+ERROR_IPSEC_QM_POLICY_NOT_FOUND
+ERROR_IPSEC_QM_POLICY_IN_USE
+ERROR_IPSEC_MM_POLICY_EXISTS
+ERROR_IPSEC_MM_POLICY_NOT_FOUND
+ERROR_IPSEC_MM_POLICY_IN_USE
+ERROR_IPSEC_MM_FILTER_EXISTS
+ERROR_IPSEC_MM_FILTER_NOT_FOUND
+ERROR_IPSEC_TRANSPORT_FILTER_EXISTS
+ERROR_IPSEC_TRANSPORT_FILTER_NOT_FOUND
+ERROR_IPSEC_MM_AUTH_EXISTS
+ERROR_IPSEC_MM_AUTH_NOT_FOUND
+ERROR_IPSEC_MM_AUTH_IN_USE
+ERROR_IPSEC_DEFAULT_MM_POLICY_NOT_FOUND
+ERROR_IPSEC_DEFAULT_MM_AUTH_NOT_FOUND
+ERROR_IPSEC_DEFAULT_QM_POLICY_NOT_FOUND
+ERROR_IPSEC_TUNNEL_FILTER_EXISTS
+ERROR_IPSEC_TUNNEL_FILTER_NOT_FOUND
+ERROR_IPSEC_MM_FILTER_PENDING_DELETION
+ERROR_IPSEC_TRANSPORT_FILTER_PENDING_DELETION
+ERROR_IPSEC_TUNNEL_FILTER_PENDING_DELETION
+ERROR_IPSEC_MM_POLICY_PENDING_DELETION
+ERROR_IPSEC_MM_AUTH_PENDING_DELETION
+ERROR_IPSEC_QM_POLICY_PENDING_DELETION
+ERROR_IPSEC_IKE_NEG_STATUS_BEGIN
+ERROR_IPSEC_IKE_AUTH_FAIL
+ERROR_IPSEC_IKE_ATTRIB_FAIL
+ERROR_IPSEC_IKE_NEGOTIATION_PENDING
+ERROR_IPSEC_IKE_GENERAL_PROCESSING_ERROR
+ERROR_IPSEC_IKE_TIMED_OUT
+ERROR_IPSEC_IKE_NO_CERT
+ERROR_IPSEC_IKE_SA_DELETED
+ERROR_IPSEC_IKE_SA_REAPED
+ERROR_IPSEC_IKE_MM_ACQUIRE_DROP
+ERROR_IPSEC_IKE_QM_ACQUIRE_DROP
+ERROR_IPSEC_IKE_QUEUE_DROP_MM
+ERROR_IPSEC_IKE_QUEUE_DROP_NO_MM
+ERROR_IPSEC_IKE_DROP_NO_RESPONSE
+ERROR_IPSEC_IKE_MM_DELAY_DROP
+ERROR_IPSEC_IKE_QM_DELAY_DROP
+ERROR_IPSEC_IKE_ERROR
+ERROR_IPSEC_IKE_CRL_FAILED
+ERROR_IPSEC_IKE_INVALID_KEY_USAGE
+ERROR_IPSEC_IKE_INVALID_CERT_TYPE
+ERROR_IPSEC_IKE_NO_PRIVATE_KEY
+ERROR_IPSEC_IKE_DH_FAIL
+ERROR_IPSEC_IKE_INVALID_HEADER
+ERROR_IPSEC_IKE_NO_POLICY
+ERROR_IPSEC_IKE_INVALID_SIGNATURE
+ERROR_IPSEC_IKE_KERBEROS_ERROR
+ERROR_IPSEC_IKE_NO_PUBLIC_KEY
+ERROR_IPSEC_IKE_PROCESS_ERR
+ERROR_IPSEC_IKE_PROCESS_ERR_SA
+ERROR_IPSEC_IKE_PROCESS_ERR_PROP
+ERROR_IPSEC_IKE_PROCESS_ERR_TRANS
+ERROR_IPSEC_IKE_PROCESS_ERR_KE
+ERROR_IPSEC_IKE_PROCESS_ERR_ID
+ERROR_IPSEC_IKE_PROCESS_ERR_CERT
+ERROR_IPSEC_IKE_PROCESS_ERR_CERT_REQ
+ERROR_IPSEC_IKE_PROCESS_ERR_HASH
+ERROR_IPSEC_IKE_PROCESS_ERR_SIG
+ERROR_IPSEC_IKE_PROCESS_ERR_NONCE
+ERROR_IPSEC_IKE_PROCESS_ERR_NOTIFY
+ERROR_IPSEC_IKE_PROCESS_ERR_DELETE
+ERROR_IPSEC_IKE_PROCESS_ERR_VENDOR
+ERROR_IPSEC_IKE_INVALID_PAYLOAD
+ERROR_IPSEC_IKE_LOAD_SOFT_SA
+ERROR_IPSEC_IKE_SOFT_SA_TORN_DOWN
+ERROR_IPSEC_IKE_INVALID_COOKIE
+ERROR_IPSEC_IKE_NO_PEER_CERT
+ERROR_IPSEC_IKE_PEER_CRL_FAILED
+ERROR_IPSEC_IKE_POLICY_CHANGE
+ERROR_IPSEC_IKE_NO_MM_POLICY
+ERROR_IPSEC_IKE_NOTCBPRIV
+ERROR_IPSEC_IKE_SECLOADFAIL
+ERROR_IPSEC_IKE_FAILSSPINIT
+ERROR_IPSEC_IKE_FAILQUERYSSP
+ERROR_IPSEC_IKE_SRVACQFAIL
+ERROR_IPSEC_IKE_SRVQUERYCRED
+ERROR_IPSEC_IKE_GETSPIFAIL
+ERROR_IPSEC_IKE_INVALID_FILTER
+ERROR_IPSEC_IKE_OUT_OF_MEMORY
+ERROR_IPSEC_IKE_ADD_UPDATE_KEY_FAILED
+ERROR_IPSEC_IKE_INVALID_POLICY
+ERROR_IPSEC_IKE_UNKNOWN_DOI
+ERROR_IPSEC_IKE_INVALID_SITUATION
+ERROR_IPSEC_IKE_DH_FAILURE
+ERROR_IPSEC_IKE_INVALID_GROUP
+ERROR_IPSEC_IKE_ENCRYPT
+ERROR_IPSEC_IKE_DECRYPT
+ERROR_IPSEC_IKE_POLICY_MATCH
+ERROR_IPSEC_IKE_UNSUPPORTED_ID
+ERROR_IPSEC_IKE_INVALID_HASH
+ERROR_IPSEC_IKE_INVALID_HASH_ALG
+ERROR_IPSEC_IKE_INVALID_HASH_SIZE
+ERROR_IPSEC_IKE_INVALID_ENCRYPT_ALG
+ERROR_IPSEC_IKE_INVALID_AUTH_ALG
+ERROR_IPSEC_IKE_INVALID_SIG
+ERROR_IPSEC_IKE_LOAD_FAILED
+ERROR_IPSEC_IKE_RPC_DELETE
+ERROR_IPSEC_IKE_BENIGN_REINIT
+ERROR_IPSEC_IKE_INVALID_RESPONDER_LIFETIME_NOTIFY
+ERROR_IPSEC_IKE_INVALID_CERT_KEYLEN
+ERROR_IPSEC_IKE_MM_LIMIT
+ERROR_IPSEC_IKE_NEGOTIATION_DISABLED
+ERROR_IPSEC_IKE_QM_LIMIT
+ERROR_IPSEC_IKE_MM_EXPIRED
+ERROR_IPSEC_IKE_PEER_MM_ASSUMED_INVALID
+ERROR_IPSEC_IKE_CERT_CHAIN_POLICY_MISMATCH
+ERROR_IPSEC_IKE_UNEXPECTED_MESSAGE_ID
+ERROR_IPSEC_IKE_INVALID_AUTH_PAYLOAD
+ERROR_IPSEC_IKE_DOS_COOKIE_SENT
+ERROR_IPSEC_IKE_SHUTTING_DOWN
+ERROR_IPSEC_IKE_CGA_AUTH_FAILED
+ERROR_IPSEC_IKE_PROCESS_ERR_NATOA
+ERROR_IPSEC_IKE_INVALID_MM_FOR_QM
+ERROR_IPSEC_IKE_QM_EXPIRED
+ERROR_IPSEC_IKE_TOO_MANY_FILTERS
+ERROR_IPSEC_IKE_NEG_STATUS_END
+ERROR_IPSEC_IKE_KILL_DUMMY_NAP_TUNNEL
+ERROR_IPSEC_IKE_INNER_IP_ASSIGNMENT_FAILURE
+ERROR_IPSEC_IKE_REQUIRE_CP_PAYLOAD_MISSING
+ERROR_IPSEC_KEY_MODULE_IMPERSONATION_NEGOTIATION_PENDING
+ERROR_IPSEC_IKE_COEXISTENCE_SUPPRESS
+ERROR_IPSEC_IKE_RATELIMIT_DROP
+ERROR_IPSEC_IKE_PEER_DOESNT_SUPPORT_MOBIKE
+ERROR_IPSEC_IKE_AUTHORIZATION_FAILURE
+ERROR_IPSEC_IKE_STRONG_CRED_AUTHORIZATION_FAILURE
+ERROR_IPSEC_IKE_AUTHORIZATION_FAILURE_WITH_OPTIONAL_RETRY
+ERROR_IPSEC_IKE_STRONG_CRED_AUTHORIZATION_AND_CERTMAP_FAILURE
+ERROR_IPSEC_IKE_NEG_STATUS_EXTENDED_END
+ERROR_IPSEC_BAD_SPI
+ERROR_IPSEC_SA_LIFETIME_EXPIRED
+ERROR_IPSEC_WRONG_SA
+ERROR_IPSEC_REPLAY_CHECK_FAILED
+ERROR_IPSEC_INVALID_PACKET
+ERROR_IPSEC_INTEGRITY_CHECK_FAILED
+ERROR_IPSEC_CLEAR_TEXT_DROP
+ERROR_IPSEC_AUTH_FIREWALL_DROP
+ERROR_IPSEC_THROTTLE_DROP
+ERROR_IPSEC_DOSP_BLOCK
+ERROR_IPSEC_DOSP_RECEIVED_MULTICAST
+ERROR_IPSEC_DOSP_INVALID_PACKET
+ERROR_IPSEC_DOSP_STATE_LOOKUP_FAILED
+ERROR_IPSEC_DOSP_MAX_ENTRIES
+ERROR_IPSEC_DOSP_KEYMOD_NOT_ALLOWED
+ERROR_IPSEC_DOSP_NOT_INSTALLED
+ERROR_IPSEC_DOSP_MAX_PER_IP_RATELIMIT_QUEUES
+ERROR_EVT_INVALID_CHANNEL_PATH
+ERROR_EVT_INVALID_QUERY
+ERROR_EVT_PUBLISHER_METADATA_NOT_FOUND
+ERROR_EVT_EVENT_TEMPLATE_NOT_FOUND
+ERROR_EVT_INVALID_PUBLISHER_NAME
+ERROR_EVT_INVALID_EVENT_DATA
+ERROR_EVT_CHANNEL_NOT_FOUND
+ERROR_EVT_MALFORMED_XML_TEXT
+ERROR_EVT_SUBSCRIPTION_TO_DIRECT_CHANNEL
+ERROR_EVT_CONFIGURATION_ERROR
+ERROR_EVT_QUERY_RESULT_STALE
+ERROR_EVT_QUERY_RESULT_INVALID_POSITION
+ERROR_EVT_NON_VALIDATING_MSXML
+ERROR_EVT_FILTER_ALREADYSCOPED
+ERROR_EVT_FILTER_NOTELTSET
+ERROR_EVT_FILTER_INVARG
+ERROR_EVT_FILTER_INVTEST
+ERROR_EVT_FILTER_INVTYPE
+ERROR_EVT_FILTER_PARSEERR
+ERROR_EVT_FILTER_UNSUPPORTEDOP
+ERROR_EVT_FILTER_UNEXPECTEDTOKEN
+ERROR_EVT_INVALID_OPERATION_OVER_ENABLED_DIRECT_CHANNEL
+ERROR_EVT_INVALID_CHANNEL_PROPERTY_VALUE
+ERROR_EVT_INVALID_PUBLISHER_PROPERTY_VALUE
+ERROR_EVT_CHANNEL_CANNOT_ACTIVATE
+ERROR_EVT_FILTER_TOO_COMPLEX
+ERROR_EVT_MESSAGE_NOT_FOUND
+ERROR_EVT_MESSAGE_ID_NOT_FOUND
+ERROR_EVT_UNRESOLVED_VALUE_INSERT
+ERROR_EVT_UNRESOLVED_PARAMETER_INSERT
+ERROR_EVT_MAX_INSERTS_REACHED
+ERROR_EVT_EVENT_DEFINITION_NOT_FOUND
+ERROR_EVT_MESSAGE_LOCALE_NOT_FOUND
+ERROR_EVT_VERSION_TOO_OLD
+ERROR_EVT_VERSION_TOO_NEW
+ERROR_EVT_CANNOT_OPEN_CHANNEL_OF_QUERY
+ERROR_EVT_PUBLISHER_DISABLED
+ERROR_EVT_FILTER_OUT_OF_RANGE
+ERROR_EC_SUBSCRIPTION_CANNOT_ACTIVATE
+ERROR_EC_LOG_DISABLED
+ERROR_EC_CIRCULAR_FORWARDING
+ERROR_EC_CREDSTORE_FULL
+ERROR_EC_CRED_NOT_FOUND
+ERROR_EC_NO_ACTIVE_CHANNEL
+ERROR_MUI_FILE_NOT_FOUND
+ERROR_MUI_INVALID_FILE
+ERROR_MUI_INVALID_RC_CONFIG
+ERROR_MUI_INVALID_LOCALE_NAME
+ERROR_MUI_INVALID_ULTIMATEFALLBACK_NAME
+ERROR_MUI_FILE_NOT_LOADED
+ERROR_RESOURCE_ENUM_USER_STOP
+ERROR_MUI_INTLSETTINGS_UILANG_NOT_INSTALLED
+ERROR_MUI_INTLSETTINGS_INVALID_LOCALE_NAME
+ERROR_MRM_RUNTIME_NO_DEFAULT_OR_NEUTRAL_RESOURCE
+ERROR_MRM_INVALID_PRICONFIG
+ERROR_MRM_INVALID_FILE_TYPE
+ERROR_MRM_UNKNOWN_QUALIFIER
+ERROR_MRM_INVALID_QUALIFIER_VALUE
+ERROR_MRM_NO_CANDIDATE
+ERROR_MRM_NO_MATCH_OR_DEFAULT_CANDIDATE
+ERROR_MRM_RESOURCE_TYPE_MISMATCH
+ERROR_MRM_DUPLICATE_MAP_NAME
+ERROR_MRM_DUPLICATE_ENTRY
+ERROR_MRM_INVALID_RESOURCE_IDENTIFIER
+ERROR_MRM_FILEPATH_TOO_LONG
+ERROR_MRM_UNSUPPORTED_DIRECTORY_TYPE
+ERROR_MRM_INVALID_PRI_FILE
+ERROR_MRM_NAMED_RESOURCE_NOT_FOUND
+ERROR_MRM_MAP_NOT_FOUND
+ERROR_MRM_UNSUPPORTED_PROFILE_TYPE
+ERROR_MRM_INVALID_QUALIFIER_OPERATOR
+ERROR_MRM_INDETERMINATE_QUALIFIER_VALUE
+ERROR_MRM_AUTOMERGE_ENABLED
+ERROR_MRM_TOO_MANY_RESOURCES
+ERROR_MCA_INVALID_CAPABILITIES_STRING
+ERROR_MCA_INVALID_VCP_VERSION
+ERROR_MCA_MONITOR_VIOLATES_MCCS_SPECIFICATION
+ERROR_MCA_MCCS_VERSION_MISMATCH
+ERROR_MCA_UNSUPPORTED_MCCS_VERSION
+ERROR_MCA_INTERNAL_ERROR
+ERROR_MCA_INVALID_TECHNOLOGY_TYPE_RETURNED
+ERROR_MCA_UNSUPPORTED_COLOR_TEMPERATURE
+ERROR_AMBIGUOUS_SYSTEM_DEVICE
+ERROR_SYSTEM_DEVICE_NOT_FOUND
+ERROR_HASH_NOT_SUPPORTED
+ERROR_HASH_NOT_PRESENT
+ERROR_SECONDARY_IC_PROVIDER_NOT_REGISTERED
+ERROR_GPIO_CLIENT_INFORMATION_INVALID
+ERROR_GPIO_VERSION_NOT_SUPPORTED
+ERROR_GPIO_INVALID_REGISTRATION_PACKET
+ERROR_GPIO_OPERATION_DENIED
+ERROR_GPIO_INCOMPATIBLE_CONNECT_MODE
+ERROR_GPIO_INTERRUPT_ALREADY_UNMASKED
+ERROR_CANNOT_SWITCH_RUNLEVEL
+ERROR_INVALID_RUNLEVEL_SETTING
+ERROR_RUNLEVEL_SWITCH_TIMEOUT
+ERROR_RUNLEVEL_SWITCH_AGENT_TIMEOUT
+ERROR_RUNLEVEL_SWITCH_IN_PROGRESS
+ERROR_SERVICES_FAILED_AUTOSTART
+ERROR_COM_TASK_STOP_PENDING
+ERROR_INSTALL_OPEN_PACKAGE_FAILED
+ERROR_INSTALL_PACKAGE_NOT_FOUND
+ERROR_INSTALL_INVALID_PACKAGE
+ERROR_INSTALL_RESOLVE_DEPENDENCY_FAILED
+ERROR_INSTALL_OUT_OF_DISK_SPACE
+ERROR_INSTALL_NETWORK_FAILURE
+ERROR_INSTALL_REGISTRATION_FAILURE
+ERROR_INSTALL_DEREGISTRATION_FAILURE
+ERROR_INSTALL_CANCEL
+ERROR_INSTALL_FAILED
+ERROR_REMOVE_FAILED
+ERROR_PACKAGE_ALREADY_EXISTS
+ERROR_NEEDS_REMEDIATION
+ERROR_INSTALL_PREREQUISITE_FAILED
+ERROR_PACKAGE_REPOSITORY_CORRUPTED
+ERROR_INSTALL_POLICY_FAILURE
+ERROR_PACKAGE_UPDATING
+ERROR_DEPLOYMENT_BLOCKED_BY_POLICY
+ERROR_PACKAGES_IN_USE
+ERROR_RECOVERY_FILE_CORRUPT
+ERROR_INVALID_STAGED_SIGNATURE
+ERROR_DELETING_EXISTING_APPLICATIONDATA_STORE_FAILED
+ERROR_INSTALL_PACKAGE_DOWNGRADE
+ERROR_SYSTEM_NEEDS_REMEDIATION
+ERROR_APPX_INTEGRITY_FAILURE_CLR_NGEN
+ERROR_RESILIENCY_FILE_CORRUPT
+ERROR_INSTALL_FIREWALL_SERVICE_NOT_RUNNING
+ERROR_STATE_LOAD_STORE_FAILED
+ERROR_STATE_GET_VERSION_FAILED
+ERROR_STATE_SET_VERSION_FAILED
+ERROR_STATE_STRUCTURED_RESET_FAILED
+ERROR_STATE_OPEN_CONTAINER_FAILED
+ERROR_STATE_CREATE_CONTAINER_FAILED
+ERROR_STATE_DELETE_CONTAINER_FAILED
+ERROR_STATE_READ_SETTING_FAILED
+ERROR_STATE_WRITE_SETTING_FAILED
+ERROR_STATE_DELETE_SETTING_FAILED
+ERROR_STATE_QUERY_SETTING_FAILED
+ERROR_STATE_READ_COMPOSITE_SETTING_FAILED
+ERROR_STATE_WRITE_COMPOSITE_SETTING_FAILED
+ERROR_STATE_ENUMERATE_CONTAINER_FAILED
+ERROR_STATE_ENUMERATE_SETTINGS_FAILED
+ERROR_STATE_COMPOSITE_SETTING_VALUE_SIZE_LIMIT_EXCEEDED
+ERROR_STATE_SETTING_VALUE_SIZE_LIMIT_EXCEEDED
+ERROR_STATE_SETTING_NAME_SIZE_LIMIT_EXCEEDED
+ERROR_STATE_CONTAINER_NAME_SIZE_LIMIT_EXCEEDED
+ERROR_API_UNAVAILABLE
+ERROR_AUDITING_DISABLED
+ERROR_ALL_SIDS_FILTERED
+"
+
+cat <<EOF
+// vim: ts=4 sw=4 expandtab ft=c
+
+// Copyright (C) 2022 The Mercury team.
+// This file is distributed under the terms specified in COPYING.LIB.
+
+// Generated by generate_win32_error_name
+
+#include <stdlib.h>
+
+#include "mercury_win32_error_name.h"
+
+#ifdef MR_WIN32
+
+const char *
+MR_win32_error_name(DWORD errcode)
+{
+    switch (errcode) {
+EOF
+
+for name in $names ; do
+    echo "    case $name: return \"$name\";"
+done
+
+cat <<EOF
+    default: return NULL;
+    }
+}
+
+#endif // MR_WIN32
+EOF
-- 
2.37.1



More information about the reviews mailing list