uom42_LocalGPCLI/LocalGPCLI/LIBs/uom.Win.Core.cs
#nullable enable

using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Security;
using System.Security.Permissions;
using System.Security.Principal;
using System.Text;


using uom.Extensions;
using System;

using hwnd = System.IntPtr;
using System.Threading.Tasks;
using System.Threading;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using static uom.MessageBoxWithCheckbox.MessageBox;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
using Microsoft.Win32.SafeHandles;
using System.Drawing;
using Microsoft.Win32;
using System.Windows.Forms;



#if NET5_0_OR_GREATER || NET6_0_OR_GREATER || NETCOREAPP3_0_OR_GREATER
//return Environment.TickCount64;//5, 6, Core 3.0, Core 3.1
#else
//return 0L;
#endif
/// <summary>Commnon Tools For Net Apps (WINDOWN PLATFORM)
/// (C)UOM 2000 - 2022 </ summary >
namespace uom
{

	/// <summary>Constants</summary>
	internal static partial class constants
	{

		internal static readonly System.Drawing.Icon ICON_SYSTEM_APP = SystemIcons.Application;
		internal static readonly Icon ICON_SYSTEM_SHIELD = SystemIcons.Shield;
		//internal static readonly   Icon ICON_SYSTEM_SHIELD_SMALL = ICON_SYSTEM_SHIELD.Create_Small;
	}


	internal static partial class AppInfo
	{
		/// <summary>Application.ProductName + Application.ProductVersion</summary>
		internal static string AppProductNameAndVersion
			=> (Application.ProductName + " " + Application.ProductVersion);


		/// <summary>Detects current process UAC elevation</summary>
		/// <exception cref="System.ComponentModel.Win32Exception"> When any native Windows API call fails, the function throws a Win32Exception with the last error code.</exception>
		internal static WinAPI.Security.TOKEN_ELEVATION_TYPE GetProcessElevation()
		{
			uom.OS.CheckVistaOrLater();
			using var hToken = WinAPI.Security.OpenCurrentProcessToken(TokenAccessLevels.Query);
			return WinAPI.Security.GetTokenInformation_Elevation(hToken);
		}




		/// <summary>в режиме дизайнера WinForms/WPF?</summary>
		public static bool isInDesignerMode(Control? ctl = null)
		{
			if (IsInDesignerMode_WPF) return true;
			while (ctl != null)
			{
				if (null != ctl.Site && ctl.Site.DesignMode) return true;
				ctl = ctl.Parent;
			}
			return IsInDesignerMode_WinForms;
		}


		/// <summary>Возвращает родительскую папку C:\Users\UUU\AppData\Roaming\UOM\APP (Без номера версии)</summary>
		public static DirectoryInfo UserAppDataPath_Roaming(bool createIfNotExist = true)
		{
			if (Application.CompanyName.e_IsNullOrWhiteSpace()) throw new Exception("Application.CompanyName = NULL!");
			if (Application.ProductName.e_IsNullOrWhiteSpace()) throw new Exception("Application.ProductName = NULL!");

			var sUserAppDataRoaming = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
			DirectoryInfo di = new(Path.Combine(sUserAppDataRoaming, Application.CompanyName, Application.ProductName));
			if (createIfNotExist) di.e_CreateIfNotExist();
			return di;
		}

		/// <summary>Возвращает родительскую папку C:\Users\UUU\AppData\Local\UOM\APP (Без номера версии)</summary>
		public static DirectoryInfo UserAppDataPath_Local(bool createIfNotExist = true)
		{
			if (Application.CompanyName.e_IsNullOrWhiteSpace()) throw new Exception("Application.CompanyName = NULL!");
			if (Application.ProductName.e_IsNullOrWhiteSpace()) throw new Exception("Application.ProductName = NULL!");
			var sUserAppDataLocal = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
			DirectoryInfo di = new(Path.Combine(sUserAppDataLocal, Application.CompanyName, Application.ProductName));
			if (createIfNotExist) di.e_CreateIfNotExist();
			return di;
		}



		internal static string ConsoleAppHeader()
		{
			var sb = new StringBuilder();
			sb.AppendLine(Con.CreateHSplitter());
			sb.AppendLine($"{System.Windows.Forms.Application.ProductName} v{System.Windows.Forms.Application.ProductVersion}");
			sb.AppendLine();
			sb.AppendLine(Description);
			sb.Append(Con.CreateHSplitter());
			return sb.ToString();
		}




	}


	internal static partial class AppTools
	{

		internal static partial class AppSettings
		{

			internal static RegistryKey OpenRegKey() => Application.UserAppDataRegistry;

			internal static void Save<T>(string name, T? val) where T : unmanaged
			{
				RegistryKey keySetting = OpenRegKey();
				keySetting!.e_SetValue<T>(name, val);
				keySetting!.Flush();
			}
			internal static void Save(string name, string? val)
			{
				RegistryKey keySetting = OpenRegKey();
				keySetting!.e_SetValueString(name, val);
				keySetting!.Flush();
			}
			internal static void Save(string name, string[]? val)
			{
				RegistryKey keySetting = OpenRegKey();
				keySetting!.e_SetValueStrings(name, val);
				keySetting!.Flush();
			}

			internal static void Delete(string name)
			{
				RegistryKey keySetting = OpenRegKey();
				keySetting?.DeleteValue(name);
				keySetting?.Flush();
			}

			internal static T? Get_T<T>(
				string name,
				T? defaultValue = default,
				bool searchAllVersions = true,
				Version? searchVersionBelowOrEqual = null)
			{

				RegistryKey keyVersionedSettings = OpenRegKey();
				var versionedValue = keyVersionedSettings.e_GetValueT<T>(name, defaultValue);
				if (versionedValue.ValueFound) return versionedValue.Value;

				if (searchAllVersions)
				{
					//Search other versions...
					_ = Application.ProductVersion ?? throw new Exception("Application.ProductVersion = null!");
					searchVersionBelowOrEqual ??= new Version(Application.ProductVersion);

					string fullSettingsKeyPathWithVersion = keyVersionedSettings.ToString();
					string[] pathParts = fullSettingsKeyPathWithVersion.Split('\\');
					pathParts = pathParts.e_RemoveLast(); //  .tak [0..^1];
					string fullSettingsKeyPathNoVersion = string.Join(@"\", pathParts);
					RegistryKey keyAppSettingsNoVersion = fullSettingsKeyPathNoVersion.e_RegOpenKeyByPath(false)!;
					string[] versionKeyNames = keyAppSettingsNoVersion.GetSubKeyNames();
					if (!versionKeyNames.Any()) return defaultValue;

					var allVersionsKeys = versionKeyNames
						.Select(versionKeyName =>
						{
							Version? vi = null;
							try
							{
								vi = new(versionKeyName);
							}
							catch { }
							return (KeyName: versionKeyName, KeyVersion: vi);
						})
						.Where(v => ((v.KeyVersion != null) && (v.KeyVersion <= searchVersionBelowOrEqual!)))
						.Select(v =>
						{
							Boolean ValueFound = false;
							T? settingValueInKey = default;
							try
							{
								RegistryKey? keyVersioned = keyAppSettingsNoVersion.OpenSubKey(v.KeyName);
								if (keyVersioned != null)
								{
									var valueInReg = keyVersioned.e_GetValueT<T>(name, defaultValue);
									ValueFound = valueInReg.ValueFound;
									if (ValueFound) settingValueInKey = valueInReg.Value;
								}
							}
							catch { }
							return (v.KeyName, v.KeyVersion, ValueFound, Value: settingValueInKey);
						})
						.Where(v => v.ValueFound)
						.OrderBy(v => v.KeyVersion)
						.ToArray();

					if (allVersionsKeys.Any())
					{
						var (KeyName, KeyVersion, ValueFound, Value) = allVersionsKeys.Last();
						return Value;
					}
				}
				return defaultValue;
			}
		}


		/// <summary> Ищет во всей сборке классы, унаследованные от заданного </summary>
		internal static TypeInfo[] GetAllAssemblyClassesDerivedFrom(Type T)
			=> Assembly
			.GetExecutingAssembly()
			.DefinedTypes
			.Where(rT => ReferenceEquals(rT.BaseType, T))
			.ToArray();


		internal static string GetCallingMethodNamespacePart(int Count)
		{
			StackTrace ST = new();
			var lF = ST.GetFrames().ToList();
			lF.RemoveAt(0);
			var aF = lF.ToArray();
			var CallingFrame = aF.First();
			var M = CallingFrame.GetMethod();
			var T = M!.DeclaringType!;
			string NS = T.Namespace!;
			var aNS = NS.Split('.').Reverse().Take(Count).Reverse();
			return aNS.e_Join(".", NS)!;
		}

		internal static IntPtr GetCurrentModuleHandle()
		{
			using Process cp = Process.GetCurrentProcess();
			using ProcessModule cm = cp.MainModule!;
			return uom.WinAPI.SafeHandles.Win32LibHandle.GetModuleHandle(cm.ModuleName!);
		}


		public static Process[] GetAllInstancesOfThisProcess()
		{
			using Process cp = Process.GetCurrentProcess();
			return Process.GetProcessesByName(cp.ProcessName);
		}


		/// <summary>Есть ли другие экземпляры этого процесса?</summary>
		public static bool HasOtherInstancesOfThisProcess()
		{
			using Process cp = Process.GetCurrentProcess();
			int iCurProcessID = cp.Id;
			return GetAllInstancesOfThisProcess().Where(p => (p.Id != iCurProcessID)).Any();
		}

		#region StartProcess...
		internal partial class ElevationCanceledByUser : Win32Exception { public ElevationCanceledByUser() : base((int)WinAPI.Errors.Win32Errors.ERROR_CANCELLED) { } }

		public enum ConsoleAppErrorMode : int
		{
			ErrorMustThrowException,
			ErrorReturnsAsOutput
		}

		internal static string StartConsoleAppAndCaptureOutput(
			string sExe,
			string? sArguments = null,
			string? workingDirectory = null,
			int WAIT_TIMEOUT_SEC = 5,
			bool SUPRESS_DEBUG_INFO = false,
			Encoding? StandardOutputEncoding = null,
			ConsoleAppErrorMode cem = ConsoleAppErrorMode.ErrorMustThrowException)
		{
			Debug.WriteLine("*** e_run '" + sExe + "' with args: '" + sArguments + "'");
			FileInfo fiExe = new(sExe);
			var PSI = new ProcessStartInfo
			{
				FileName = sExe,
				WorkingDirectory = workingDirectory ?? fiExe.DirectoryName,
				Arguments = sArguments,
				UseShellExecute = false,
				RedirectStandardOutput = true,
				RedirectStandardError = true
			};

			// .LoadUserProfile = True
			// .WindowStyle = ProcessWindowStyle.Hidden
			// .CreateNoWindow = True

			if (StandardOutputEncoding != null) PSI.StandardOutputEncoding = StandardOutputEncoding;
			int iWaitMilliseconds = WAIT_TIMEOUT_SEC * 1000;
			using var prcExe = Process.Start(PSI);
			_ = prcExe ?? throw new Exception($"Process.Start({fiExe}) Failed!");

			string sError = prcExe.StandardError.ReadToEnd();
			if (sError.e_IsNOTNullOrWhiteSpace() && cem == ConsoleAppErrorMode.ErrorMustThrowException)
				throw new Exception(sError);
			string sOutput = prcExe.StandardOutput.ReadToEnd();
			if (sOutput.e_IsNullOrWhiteSpace())
				sOutput = "";
			else
			{
				sOutput = sOutput
					.Replace(constants.vbCrCrLf, constants.vbCrLf)
					.Trim();
			}

			bool bWaitResult = prcExe.WaitForExit(iWaitMilliseconds);
			if (!bWaitResult || !prcExe.HasExited)
			{
				Debug.WriteLine($"{fiExe} - Failed to finish for {WAIT_TIMEOUT_SEC} sec. Answer: '{sOutput}'");
				Debug.WriteLine($"{fiExe} - Force Closing...");
				prcExe.Close();
				Debug.WriteLine($"{fiExe} - Force Closed!");
			}
			// Call PRC.WaitForExit()
			else if (!SUPRESS_DEBUG_INFO)
			{
				Debug.WriteLine($"{fiExe} - finished ok. Output = '{sOutput}'");
			}

			return sOutput;
		}

		/// <summary>Restart the current process with administrator credentials</summary>
		internal static Process? StartMyProcess(
			string? Arguments = null,
			bool StartVistaElevated = false,
			bool CloseThisApp = false,
			bool ThrowExceptionOnError = false,
			bool WaitExit = false)
			=> StartProcess(
				System.Windows.Forms.Application.ExecutablePath,
				Arguments,
				needElevation: StartVistaElevated,
				closeThisApp: CloseThisApp,
				throwExceptionOnError: ThrowExceptionOnError,
				waitExit: WaitExit);


		internal static Process? StartCMDProcess(
			string Arguments,
			bool StartVistaElevated = false,
			bool CloseThisApp = false,
			bool ThrowExceptionOnError = false,
			bool WaitExit = false)
			=> StartWinSys32Process(
				"cmd.exe",
				(@"/c " + Arguments),
				StartVistaElevated,
				CloseThisApp,
				ThrowExceptionOnError,
				WaitExit);

		internal static Process? StartMMCProcess(
			string Оснастка,
			bool StartVistaElevated = false,
			bool CloseThisApp = false,
			bool ThrowExceptionOnError = false,
			bool WaitExit = false)
			=> StartWinSys32Process(
				"mmc.exe",
				Оснастка,
				StartVistaElevated,
				CloseThisApp,
				ThrowExceptionOnError,
				WaitExit);


		/// <returns>Return Process ExitCode</returns>
		internal static Process? StartWinSys32Process(
			string FileName,
			string? Arguments = null,
			bool StartVistaElevated = false,
			bool CloseThisApp = false,
			bool ThrowExceptionOnError = false,
			bool WaitExit = false)
			=> StartProcess(
				OS.GetWinSyst32Path(FileName),
				Arguments,
				OS.GetWinSys32Folder(),
				StartVistaElevated,
				CloseThisApp,
				ThrowExceptionOnError,
				WaitExit);

		/// <returns>Return Process ExitCode</returns>
		internal static Process? StartWinDirProcess(
			string FileName,
			string? Arguments = null,
			bool StartVistaElevated = false,
			bool CloseThisApp = false,
			bool ThrowExceptionOnError = false,
			bool WaitExit = false)
			=> StartProcess(
				Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows), FileName),
				Arguments,
				null,
				StartVistaElevated,
				CloseThisApp,
				ThrowExceptionOnError,
				WaitExit);

		/// <returns>Return Process ExitCode</returns>
		internal static Process? StartProcess(
			string file,
			string? arguments = null,
			string? workingDirectory = null,
			bool needElevation = false,
			bool closeThisApp = false,
			bool throwExceptionOnError = false,
			bool waitExit = false)
		{
			try
			{
				file = file.e_EncloseC();
				var StartInfo = new ProcessStartInfo() { UseShellExecute = true, FileName = file };
				if (arguments.e_IsNOTNullOrWhiteSpace()) StartInfo.Arguments = arguments;
				if (workingDirectory.e_IsNOTNullOrWhiteSpace()) StartInfo.WorkingDirectory = workingDirectory;
				if (needElevation)
				{
					//bool useElevation = true;
					try
					{
						if (uom.OS.VistaOrLater)
						{
							// XP/2003 - используем запрос админских прав только если пользователь не в группе администраторов
							needElevation = !OS.UserAccounts.IsRunAsAdmin();
						}
						else
						{
							// Vista/Win 7/8 Используем повышение 
							//TODO: Переделать на узнать уровень доступа процесса через токен
						}
						needElevation = (uom.AppInfo.GetProcessElevation() == WinAPI.Security.TOKEN_ELEVATION_TYPE.TokenElevationTypeLimited);
					}
					catch { }// Какая-то ошибка, скорее всего не хватает прав
					if (needElevation) StartInfo.Verb = "runas";
				}
				// .UseShellExecute = False
				StartInfo.ErrorDialog = false;
				var prc = Process.Start(StartInfo);
				if (waitExit)
				{
					prc!.WaitForExit();
				}
				else
				{
					if (closeThisApp) System.Windows.Forms.Application.Exit();
				}
				return prc;
			}
			catch (Win32Exception wex)
			{
				if (wex.e_ToWin32Error() == WinAPI.Errors.Win32Errors.ERROR_CANCELLED)
					wex = new ElevationCanceledByUser();// Пользователь нажал 'нет' при запросе на повышение прав

				if (throwExceptionOnError) throw wex;
			}
			catch { if (throwExceptionOnError) throw; }
			return null;
		}




		#endregion

		#region StartWinSysTool...

		internal enum WindowsExplorerPathModes : int
		{
			OpenPath,
			SelectItem
		}
		internal const WindowsExplorerPathModes C_DEFAULT_EXPLORER_MODE = WindowsExplorerPathModes.SelectItem;
		internal static void StartWinSysTool_Explorer(
			string? pathToShow = null,
			WindowsExplorerPathModes pathMode = C_DEFAULT_EXPLORER_MODE)
		{
			string? explorerArgs = null;

			FileSystemInfo? fsi = pathToShow?.e_FindFirstExistingFileSystemInfo();
			if (fsi != null)
			{
				pathToShow = fsi.FullName.e_Enclose();
				explorerArgs = pathMode switch
				{
					WindowsExplorerPathModes.OpenPath => pathToShow,
					WindowsExplorerPathModes.SelectItem => $@"/select,{pathToShow}",
					_ => throw new ArgumentOutOfRangeException(nameof(pathMode))
				};

				// /separate 	show in separate EXPLORER process 
				// /idlist,:handle:process 	specifies object as ITEMIDLIST in shared memory block with given handle in context of given process 

				// /n  Opens a New window in single-paned (My Computer) view for each item
				// selected, even if the New window duplicates a window that Is already open.

				// /e  Uses Windows Explorer view. Windows Explorer view Is most similar
				// to File Manager in Windows version 3.x. Note that the default view
				// Is Open view.

				// /root,<object>  Specifies the root level of the specified view. The
				// Default is To use the normal Namespace root (the desktop). Whatever Is specified Is the root for the
				// display.
				// /root,/idlist,HANDLE : Process
				// /root,clsid
				// /root,clsid,path
				// /root,path 	

				// Examples

				// To open a Windows Explorer view to explore only objects on \\<server name>, use the following syntax
				// explorer /e,/ROOT,\\ <server name>
				// To view the C:\WINDOWS folder and select CALC.EXE, use the following syntax:
				// explorer /select,c:\windows\calc.exe 


			}
			StartWinDirProcess("explorer.exe", explorerArgs);
		}

		#region Control Panel

		internal static void StartWinSysTool_CPL_NetworkAndSharingCenter()
			=> StartWinSys32Process(
				"control.exe",
				"/name Microsoft.NetworkAndSharingCenter",
				ThrowExceptionOnError: true);

		/// <summary>Работает и в XP</summary>
		internal static void StartWinSysTool_CPL_WinFirewall()
			=> StartWinSys32Process(
				"rundll32.exe",
				"shell32.dll,Control_RunDLL firewall.cpl",
				true,
				ThrowExceptionOnError: true);

		internal static void StartWinSysTool_CPL_NetworkConnections()
			=> StartWinSys32Process(
				"rundll32.exe",
				"shell32.dll,Control_RunDLL ncpa.cpl",
				true,
				ThrowExceptionOnError: true);

		/// <summary>rundll32.exe netplwiz.dll,UsersRunDll</summary>
		internal static void StartWinSysTool_CPL_UserAccounts_1()
			=> StartWinSys32Process(
				"rundll32.exe",
				"netplwiz.dll,UsersRunDll",
				true,
				ThrowExceptionOnError: true);

		/// <summary>control userpasswords2</summary>
		internal static void StartWinSysTool_CPL_UserAccounts_2()
			=> StartWinSys32Process(
				"control.exe",
				"userpasswords2",
				true,
				ThrowExceptionOnError: true);

		#endregion

		/// <summary>"sfc /scannow Проверка целостности системных файлов Windows"</summary>
		internal static void StartWinSysTool_CMD_SFC()
			=> StartCMDProcess(
				@"sfc /scannow",
				true,
				ThrowExceptionOnError: true);

		#region MMC

		internal static void StartWinSysTool_MMC_WinFirewallRules()
		{
			OS.CheckVistaOrLater(); // возможно только начиная с Vist'ы
			StartMMCProcess("wf.msc", true, ThrowExceptionOnError: true);
		}

		/// <summary>Локальная политика безопасности (там есть Safer)</summary>
		internal static void StartWinSysTool_MMC_SecPol()
			=> StartMMCProcess("secpol.msc", true, ThrowExceptionOnError: true);

		/// <summary>Групповые политики</summary>
		internal static void StartWinSysTool_MMC_Gpedit()
			=> StartMMCProcess("gpedit.msc", true, ThrowExceptionOnError: true);

		/// <summary>Консоль службы</summary>
		internal static void StartWinSysTool_MMC_Services()
			=> StartMMCProcess("services.msc", true, ThrowExceptionOnError: true);

		/// <summary>Консоль локальные пользователи и группы</summary>
		internal static void StartWinSysTool_MMC_lusrmgr()
			=> StartMMCProcess("lusrmgr.msc", true, ThrowExceptionOnError: true);

		/// <summary>Консоль диспетчер устройств</summary>
		internal static void StartWinSysTool_MMC_devmgmt()
			=> StartMMCProcess("devmgmt.msc", true, ThrowExceptionOnError: true);

		#endregion

		#endregion

		#region Helper Functions for Admin Privileges and Elevation Status

		/// <summary>The function gets the elevation information of the current process. 
		/// It dictates whether the process is elevated or not. 
		/// Token elevation is only available on Windows Vista and newer operating systems, thus IsProcessElevated throws a C++ exception if it is called on systems prior to Windows Vista. 
		/// It is not appropriate to use this function to determine whether a process is run as administartor.
		/// </summary>
		/// <returns>Returns True if the process is elevated. Returns False if it is not.</returns>
		/// <exception cref="System.ComponentModel.Win32Exception"> 
		/// When any native Windows API call fails, the function throws a Win32Exception with the last error code.</exception>
		/// <remarks> TOKEN_INFORMATION_CLASS provides TokenElevationType to check the elevation 
		/// type (TokenElevationTypeDefault / TokenElevationTypeLimited / TokenElevationTypeFull) of the process. 
		/// It is different from TokenElevation in that, when UAC is turned off, elevation type always returns 
		/// TokenElevationTypeDefault even though the process is elevated (Integrity 
		/// Level == High). In other words, it is not safe to say if the process is 
		/// elevated based on elevation type. Instead, we should use TokenElevation.
		/// </remarks>
		internal static bool IsProcessElevated()
		{
			OS.CheckVistaOrLater();
			// Open the access token of the current process with TOKEN_QUERY.
			using var hToken = WinAPI.Security.OpenCurrentProcessToken(TokenAccessLevels.Query);
			// Allocate a buffer for the elevation information.
			int cbTokenElevation = Marshal.SizeOf(typeof(WinAPI.Security.TOKEN_ELEVATION));
			using var pTokenElevation = new WinAPI.Memory.LocalMemory(cbTokenElevation);
			// Retrieve token elevation information.
			WinAPI.Security.GetTokenInformation(
				hToken,
				WinAPI.Security.TOKEN_INFORMATION_CLASS.TokenElevation,
				(IntPtr)pTokenElevation, cbTokenElevation, ref cbTokenElevation).e_ThrowLastWin32Exception_AssertFalse();
			// When the process is run on operating systems prior to Windows Vista, GetTokenInformation returns false with the 
			// ERROR_INVALID_PARAMETER error code because TokenIntegrityLevel is not supported on those OS's.

			// Marshal the TOKEN_ELEVATION struct from native to .NET
			var elevation = pTokenElevation.DangerousGetHandle().e_ToStructure<WinAPI.Security.TOKEN_ELEVATION>();
			// TOKEN_ELEVATION.TokenIsElevated is a non-zero value if the token has elevated privileges; otherwise, a zero value.
			return (elevation.TokenIsElevated != 0);
		}

		/// <summary>The function gets the integrity level of the current process. Integrity level is only available on Windows Vista and newer operating systems, thus 
		/// GetProcessIntegrityLevel throws a C++ exception if it is called on systems prior to Windows Vista.</summary>
		/// <exception cref="System.ComponentModel.Win32Exception">When any native Windows API call fails, the function throws a Win32Exception with the last error code.</exception>
		internal static WinAPI.Security.IntegrityLevels GetProcessIntegrityLevel()
		{
			OS.CheckVistaOrLater();

			WinAPI.Security.IntegrityLevels IL;//= WinAPI.Security.IntegrityLevels.ERROR;
			using var hToken = WinAPI.Security.OpenCurrentProcessToken(TokenAccessLevels.Query); // Open the access token of the current process with TOKEN_QUERY.

			// Then we must query the size of the integrity level information 
			// associated with the token. Note that we expect GetTokenInformation to 
			// return False with the ERROR_INSUFFICIENT_BUFFER error code because we 
			// have given it a null buffer. On exit cbTokenIL will tell the size of 
			// the group information.

			int cbTokenIL = 0;
			WinAPI.Security.GetTokenInformation(hToken, WinAPI.Security.TOKEN_INFORMATION_CLASS.TokenIntegrityLevel, IntPtr.Zero, 0, ref cbTokenIL)
				.e_ThrowLastWin32Exception_AssertFalse(WinAPI.Errors.Win32Errors.ERROR_INSUFFICIENT_BUFFER);


			// Now we allocate a buffer for the integrity level information.
			using var rTokenIL = new WinAPI.Memory.LocalMemory(cbTokenIL);
			// Now we ask for the integrity level information again. This may fail if an administrator has added this account to an additional group between our first call to GetTokenInformation and this one.
			WinAPI.Security.GetTokenInformation(hToken,
				WinAPI.Security.TOKEN_INFORMATION_CLASS.TokenIntegrityLevel,
				(IntPtr)rTokenIL,
				cbTokenIL,
				ref cbTokenIL).e_ThrowLastWin32Exception_AssertFalse();

			var tokenIL = rTokenIL.DangerousGetHandle().e_ToStructure<WinAPI.Security.TOKEN_MANDATORY_LABEL>();

			// Integrity Level SIDs are in the form of S-1-16-0xXXXX. (e.g. S-1-16-0x1000 stands for low integrity level SID). There is one and only one subauthority.
			var pIL = WinAPI.Security.GetSidSubAuthority(tokenIL.Label.Sid, 0);
			int iIL = Marshal.ReadInt32(pIL);
			IL = (WinAPI.Security.IntegrityLevels)iIL;
			return IL;
		}

		#endregion



	}


	internal static partial class OS
	{

		public static Bitmap[] GetScreenshots()
			=> System.Windows.Forms.Screen.AllScreens
			.Select(scr =>
			{
				//capture our Current Screen
				Bitmap bmCapt = new(scr.Bounds.Width, scr.Bounds.Height, PixelFormat.Format32bppArgb);
				var rcCapt = scr.Bounds;
				using (Graphics g = Graphics.FromImage(bmCapt))
					g.CopyFromScreen(rcCapt.Left, rcCapt.Top, 0, 0, rcCapt.Size);
				return bmCapt;
			}).ToArray();

		public static System.IO.FileInfo[] GetScreenshotsAsFiles(ImageFormat fmt, string fileExt = "jpg")
			=> System.Windows.Forms.Screen.AllScreens
			.Select(scr =>
		{
			using Bitmap bmCapt = new(scr.Bounds.Width, scr.Bounds.Height, PixelFormat.Format32bppArgb);
			var rcCapt = scr.Bounds;
			using (Graphics g = Graphics.FromImage(bmCapt))
				g.CopyFromScreen(rcCapt.Left, rcCapt.Top, 0, 0, rcCapt.Size);

			var sBitmapFile = System.IO.Path.Combine(
				System.IO.Path.GetTempPath(), (Guid.NewGuid().ToString() + '.'.ToString() + fileExt));
			bmCapt.Save(sBitmapFile, fmt);
			return new System.IO.FileInfo(sBitmapFile);
		}).ToArray();



		public static readonly CultureInfo CurrentUICulture = CultureInfo.CurrentUICulture;
		public static readonly RegionInfo CurrentRegionInfo = new(CurrentUICulture.LCID);


		internal static ulong TickCount_64
		{
			get
			{




#if NET5_0_OR_GREATER || NET6_0_OR_GREATER || NETCOREAPP3_0_OR_GREATER
				//Use new builtin Net function
				return (ulong)Environment.TickCount64;//net 5, 6, Core 3.0, Core 3.1

#else
				return WinAPI.IO.GetTickCount64();//old net versions
#endif
			}
		}



		internal static partial class Shell
		{

			#region RegisterAutorun
			internal enum APP_STARTUP_MODES
			{
				Registry,
				AutoStartFolder
			}


			public static void RegisterAutorun(APP_STARTUP_MODES Mode, bool forAllUsers, bool unregister = false)
			{
				switch (Mode)
				{
					case APP_STARTUP_MODES.AutoStartFolder:
						{
							// TODO: Создаем ярлык в папке автозагрузки
							throw new NotImplementedException();
						}

					case APP_STARTUP_MODES.Registry:
						{
							const string KEY_RUN_PATH = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Run";

							var fiEXE = System.Windows.Forms.Application.ExecutablePath.e_ToFileInfo();
							_ = fiEXE ?? throw new Exception("Application.ExecutablePath = NULL!");

							using var keyAutoRun = (forAllUsers ? Registry.LocalMachine : Registry.CurrentUser)
								.OpenSubKey(KEY_RUN_PATH, true);

							if (keyAutoRun == null) throw new Exception($"Failed to open '{KEY_RUN_PATH}' key!");

							if (unregister)
							{
								keyAutoRun
									.GetValueNames()?
									.Where(s => s.ToLower() == fiEXE.Name.ToLower())?
									.e_ForEach(foundFile => keyAutoRun.DeleteValue(foundFile));
							}
							else
							{
								keyAutoRun
									.SetValue(fiEXE.Name, fiEXE.FullName.e_Enclose());
							}

							keyAutoRun.Flush();
							break;
						}
				}

			}
			#endregion

			#region Shell_RegisterContextMenu

			internal const string CS_DEFAULT_CMDLINE_ARG = "\"%1\"";


			private const string CS_REG_KEY_SHELL = "shell";
			private const string CS_REG_KEY_COMMAND = "Command";

			private const string C_REG_CLASS_DIRECTORY = "Directory";


			/// <summary>Register ShellContectMenu for specifed class</summary>
			/// <param name="HCCRClass">Имя класса в реестре, например 'Directory' 'file' '.exe' 'CorelDraw.Graphic.19' 'brmFile')</param>
			/// <param name="RegistryActionName">Внутреннее имя ключа операции в реестре, например 'Open'</param>
			/// <param name="ActionDisplayName">То, что видно в контекстном меню проводника</param>
			/// <param name="ExecutablePath">Можно не указывать, если эта же программа</param>
			/// <param name="CmdLineArgument"></param>
			/// <remarks></remarks>
			internal static string ContextMenu_RegisterForClass(
				string HCCRClass,
				string RegistryActionName,
				string ActionDisplayName,
				string? executablePath = null,
				string? cmdLineArgsPrefix = "",
				string cmdLineArgs = CS_DEFAULT_CMDLINE_ARG)
			{
				if (HCCRClass.e_IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(HCCRClass));
				if (RegistryActionName.e_IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(RegistryActionName));
				if (ActionDisplayName.e_IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(ActionDisplayName));

				executablePath ??= System.Windows.Forms.Application.ExecutablePath;

				string sKey = string.Join(@"\", new[] { HCCRClass, CS_REG_KEY_SHELL, RegistryActionName });
				using RegistryKey keyClass = Registry.ClassesRoot.CreateSubKey(sKey, RegistryKeyPermissionCheck.ReadWriteSubTree);
				keyClass.SetValue("", ActionDisplayName);
				keyClass.Flush();

				using RegistryKey hkCommand = keyClass.CreateSubKey(CS_REG_KEY_COMMAND, RegistryKeyPermissionCheck.ReadWriteSubTree);
				string commandString = ContextMenu_CreateRegCommandString(executablePath, cmdLineArgsPrefix, cmdLineArgs);
				hkCommand.SetValue("", commandString);
				hkCommand.Flush();
				return commandString;
			}

			private static string ContextMenu_CreateRegCommandString(
			   string executablePath,
			   string? cmdLineArgsPrefix = "",
			   string cmdLineArgs = CS_DEFAULT_CMDLINE_ARG)
				=> ($"\"{executablePath.Trim()}\" {(cmdLineArgsPrefix ?? "").Trim()} {cmdLineArgs.Trim()}").Trim();


			internal static bool ContextMenu_IsRegisteredForClass(
				string HCCRClass,
				string RegistryActionName,
				string ActionDisplayName,
				string? executablePath = null,
				string? cmdLineArgsPrefix = "",
				string cmdLineArgs = CS_DEFAULT_CMDLINE_ARG)
			{
				if (HCCRClass.e_IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(HCCRClass));
				if (RegistryActionName.e_IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(RegistryActionName));
				if (ActionDisplayName.e_IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(ActionDisplayName));

				executablePath ??= System.Windows.Forms.Application.ExecutablePath;

				string sKey = string.Join(@"\", new[] { HCCRClass, CS_REG_KEY_SHELL, RegistryActionName });
				using RegistryKey? keyClass = Registry.ClassesRoot.OpenSubKey(sKey, false);
				string? defVlue = keyClass?.e_GetValue_StringOrEmpty("");
				if (defVlue != ActionDisplayName) return false;

				using RegistryKey? hkCommand = keyClass?.OpenSubKey(CS_REG_KEY_COMMAND, false);
				string commandString = ContextMenu_CreateRegCommandString(executablePath, cmdLineArgsPrefix, cmdLineArgs);
				string? regCommandValue = hkCommand?.e_GetValue_StringOrEmpty("");
				if (commandString == regCommandValue) return true;
				return false;
			}


			#region ContextMenu_RegisterForDirectory

			internal static bool ContextMenu_IsRegisteredForDirectory(
				string RegistryActionName,
				string ActionDisplayName,
				string? executablePath = null,
				string cmdLineArgsPrefix = "",
				string cmdLineArgs = CS_DEFAULT_CMDLINE_ARG)
				=> ContextMenu_IsRegisteredForClass(C_REG_CLASS_DIRECTORY, RegistryActionName, ActionDisplayName, executablePath, cmdLineArgsPrefix, cmdLineArgs);


			internal static void ContextMenu_RegisterForDirectory(
				string RegistryActionName,
				string ActionDisplayName,
				string? executablePath = null,
				string cmdLineArgsPrefix = "",
				string cmdLineArgs = CS_DEFAULT_CMDLINE_ARG)
				=> ContextMenu_RegisterForClass(C_REG_CLASS_DIRECTORY, RegistryActionName, ActionDisplayName, executablePath, cmdLineArgsPrefix, cmdLineArgs);


			internal static void ContextMenu_UnRegisterForDirectory(string registryActionName)
				=> ContextMenu_UnRegister(C_REG_CLASS_DIRECTORY, registryActionName);

			#endregion


			#region ContextMenu_RegisterForFile(s)

			/// <param name="RegistryActionName">
			/// !!! Registry has some unknown small limit to ActionKeyName in Shell key, so make it max shorter!!!
			/// </param>
			internal static string ContextMenu_RegisterForAllFiles(
				string RegistryActionName,
				string ActionDisplayName,
				string? executablePath = null,
				string cmdLineArgsPrefix = "",
				string cmdLineArgs = CS_DEFAULT_CMDLINE_ARG)
				=> ContextMenu_RegisterForClass("*", RegistryActionName, ActionDisplayName, executablePath, cmdLineArgsPrefix, cmdLineArgs);


			/// <summary>Регистрация для заданного разрешения !!!НЕ КОАССА!!!</summary>
			/// <param name="filesExtensions">Разрешение файла, например '.exe' '.png')</param>
			/// <param name="RegistryActionName">Внутреннее имя ключа операции в реестре, например 'Open'
			/// !!! Registry has some unknown small limit to ActionKeyName in Shell key, so make it max shorter!!!
			/// </param>
			/// <param name="ActionDisplayName">То, что видно в контекстном меню проводника</param>
			/// <param name="ExecutablePath">Можно не указывать, если эта же программа</param>
			/// <param name="CmdLineArgument"></param>
			internal static string[] ContextMenu_RegisterForFileExt(
				string[] filesExtensions,
				string RegistryActionName,
				string ActionDisplayName,
				string? executablePath = null,
				string cmdLineArgsPrefix = "",
				string cmdLineArgs = CS_DEFAULT_CMDLINE_ARG)
				=> filesExtensions
					.Select(ext => ContextMenu_RegisterForFileExt(ext, RegistryActionName, ActionDisplayName, executablePath, cmdLineArgsPrefix, cmdLineArgs))
					.ToArray()
					;


			/// <summary>Регистрация для заданного разрешения !!!НЕ КОАССА!!!</summary>
			/// <param name="fileExtensionWithDot">Разрешение файла, например '.exe' '.png')</param>
			/// <param name="RegistryActionName">Внутреннее имя ключа операции в реестре, например 'Open'</param>
			/// <param name="ActionDisplayName">То, что видно в контекстном меню проводника
			/// !!! Registry has some unknown small limit to ActionKeyName in Shell key, so make it max shorter!!!
			/// </param>
			/// <param name="ExecutablePath">Можно не указывать, если эта же программа</param>
			/// <param name="CmdLineArgument"></param>
			internal static string ContextMenu_RegisterForFileExt(
				string fileExtensionWithDot,
				string RegistryActionName,
				string ActionDisplayName,
				string? executablePath = null,
				string cmdLineArgsPrefix = "",
				string cmdLineArgs = CS_DEFAULT_CMDLINE_ARG)
			{
				if (fileExtensionWithDot.e_IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(fileExtensionWithDot));

				// Читаем класс файла из HKEY_CLASSES_ROOT\.pdf
				var fileClass = Extensions_Async_MT.e_RunTryCatch<string?>(
					() =>
					{
						using var hkeyFileExtension = Registry.ClassesRoot.OpenSubKey(fileExtensionWithDot);
						return hkeyFileExtension!.e_GetValue_StringOrEmpty("", null);
					}, null);

				if (Win10OrLater)
				{
					// в W10 контекстные команды работают по другому: 
					// HKEY_CLASSES_ROOT\SystemFileAssociations\.EXT\Shell\Action\Command = ""
					fileClass = @"SystemFileAssociations\" + fileExtensionWithDot;

					#region То работает то нет
					// Dim sW10SystemFileAssociationsClass = e_runOn_TryCatch_Func(Of String)(Function()
					// Using hkeySystemFileAssociations = Global.Microsoft.WinAPI.Registry.ClassesRoot.OpenSubKey()
					// Return CStr(hkeyFileExtension.GetValue("", vbNullString, Microsoft.WinAPI.RegistryValueOptions.DoNotExpandEnvironmentNames))
					// End Using
					// End Function, vbNullString, False)

					// 'в W10 контекстные команды почему-то работают по другому...
					// 'есть раздел HKEY_CLASSES_ROOT\.pdf\OpenWithProgids
					// 'где есть список "обработчиков"

					// Using hkOpenProgIDs = Global.Microsoft.WinAPI.Registry.ClassesRoot.OpenSubKey(FileExt & "\OpenWithProgids")
					// If (hkOpenProgIDs IsNot Nothing) Then
					// Dim aOpenProgIDsValues = hkOpenProgIDs.ExtReg_GetAllValues

					// aOpenProgIDsValues = (From T In aOpenProgIDsValues
					// Where ((T.Kind = RegistryValueKind.String) AndAlso T.ValueName. e_IsNOTNullOrWhiteSpace)).ToArray

					// If aOpenProgIDsValues.Any Then
					// Dim FirstValue = aOpenProgIDsValues.First
					// sFileClass = FirstValue.ValueName
					// End If
					// End If
					// End Using
					#endregion
				}

				if (fileClass.e_IsNullOrWhiteSpace()) fileClass = fileExtensionWithDot; // В разделе не указан Класс файла. Сделаем раздел прямо на самом расширении

				return ContextMenu_RegisterForClass(
					fileClass!,
					RegistryActionName,
					ActionDisplayName,
					executablePath,
					cmdLineArgsPrefix,
					cmdLineArgs);
			}

			#endregion

			/// <summary>Unregister this action on every registry class</summary>
			internal static void ContextMenu_UnRegisterAction(string[]? registryActionNames)
				=> registryActionNames?.e_ForEach(actionName => ContextMenu_UnRegisterAction(actionName));

			/// <inheritdoc cref="ContextMenu_UnRegisterAction" />
			internal static int ContextMenu_UnRegisterAction(string RegistryActionName, bool useActionNameAsPrefix = false)
			{
				int totalUnregistered = Registry
					.ClassesRoot?
					.GetSubKeyNames()?
					.Select(key => ContextMenu_UnRegister(key, RegistryActionName, useActionNameAsPrefix))?
					.Sum() ?? 0;

				if (!Win10OrLater) return totalUnregistered;

				try
				{
					// HKEY_CLASSES_ROOT\SystemFileAssociations\.EXT\Shell\Action\Command = ""
					const string C_W10_SystemFileAssociations = "SystemFileAssociations";

					using var hkeyW10SystemFileAssociations = Registry
						.ClassesRoot?
						.OpenSubKey(C_W10_SystemFileAssociations, RegistryKeyPermissionCheck.ReadSubTree);

					totalUnregistered += (hkeyW10SystemFileAssociations?
						.GetSubKeyNames()?
						.Select(key => ContextMenu_UnRegister(
							@$"{C_W10_SystemFileAssociations}\{key}",
							RegistryActionName,
							useActionNameAsPrefix))?
							.Sum() ?? 0);
				}
				catch { }
				return totalUnregistered;
			}

			internal static int ContextMenu_UnRegister(
				string registryClass,
				string registryActionName,
				bool useActionNameAsPrefix = false)
			{
				if (registryClass.e_IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(registryClass));

				string sShellKey = @$"{registryClass}\{CS_REG_KEY_SHELL}";

				string[]? keyNamesToKill = null;

				using (var keyShell = Registry
					.ClassesRoot
					.OpenSubKey(sShellKey, RegistryKeyPermissionCheck.ReadSubTree))
				{
					string actionL = registryActionName.ToLower().Trim();
					keyNamesToKill = keyShell?
						.GetSubKeyNames()?
						.Where(keyName => useActionNameAsPrefix
						? (keyName.ToLower().Trim().StartsWith(actionL))
						: (keyName.ToLower().Trim() == actionL))?
						.ToArray();

				}

				if (keyNamesToKill != null && keyNamesToKill.Any())
				{
					using var keyShell = Registry
					.ClassesRoot
					.OpenSubKey(sShellKey, RegistryKeyPermissionCheck.ReadWriteSubTree);

					keyNamesToKill?.ToList()?.ForEach(keyNameToKill
						=> keyShell?.DeleteSubKeyTree(keyNameToKill)
						);
					keyShell?.Flush();
				}
				return keyNamesToKill?.Length ?? 0;
			}


			public static void AssociateFileWithApp(
				string FileExtWithoutDot,
				string FileDecription,
				string? iconFile = null,
				int IconIndex = 0)
			{
				string newRegKey = "." + FileExtWithoutDot;
				using var keyExt = Registry.ClassesRoot.CreateSubKey(newRegKey);
				if (null == keyExt) throw new Exception($"Failed to create '{newRegKey}' registry key!");

				string sAppKeyName = string.Format("{0} {1}", System.Windows.Forms.Application.CompanyName, System.Windows.Forms.Application.ProductName).Trim();
				keyExt.SetValue("", sAppKeyName);
				keyExt.Flush();
				using var keyAppRoot = Registry.ClassesRoot.CreateSubKey(sAppKeyName);
				if (null == keyAppRoot) throw new Exception($"Failed to create '{sAppKeyName}' registry key!");

				keyAppRoot.SetValue("", FileDecription);
				keyAppRoot.Flush();

				iconFile ??= System.Windows.Forms.Application.ExecutablePath;
				using var keyIcon = keyAppRoot.CreateSubKey("DefaultIcon");
				keyIcon!.SetValue("", $"\"{iconFile}\", {IconIndex}");
				keyIcon!.Flush();
			}
			#endregion

			public static void RegisterSoundSchemeEvent(string EventName, string SoundFile, bool OnlyIfNotExist = true)
			{
				string sAppName = System.Windows.Forms.Application.ProductName;
				var EventKey = Registry.CurrentUser.CreateSubKey(@"AppEvents\Schemes\Apps\" + sAppName);
				EventKey!.SetValue("", sAppName);
				var KK = EventKey.OpenSubKey(EventName + @"\.current");
				bool bNeedCreate = false;
				if (OnlyIfNotExist) bNeedCreate = (null == KK);

				if (bNeedCreate)
				{
					KK = EventKey.CreateSubKey(EventName + @"\.current");
					KK.SetValue("", SoundFile);
					KK.Flush();
				}
			}
		}



		internal static partial class UserAccounts
		{

			#region Список скрытых в реестре пользователей


			private const string CS_KEY_WINLOGON = @"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon";
			private const string CS_KEY_HIDDEN_USERS_LIST = @"SpecialAccounts\UserList";
			public const string CS_KEY_HIDDEN_USERS_LIST_FULL = CS_KEY_WINLOGON + @"\" + CS_KEY_HIDDEN_USERS_LIST;


			/// <summary>Список скрытых в реестре пользователей</summary>
			public static string[] RegistryHiddenUsers_GetUsers()
			{
				if (!IsRegistryHiddenUsersKeyExist()) throw new FileNotFoundException(CS_KEY_HIDDEN_USERS_LIST_FULL);

				using var keyFULL = Registry.LocalMachine.OpenSubKey(CS_KEY_HIDDEN_USERS_LIST_FULL, false);
				return keyFULL?
					.GetValueNames().Where(
						sUser =>
						(keyFULL!.GetValueKind(sUser) == RegistryValueKind.DWord) && (keyFULL!.e_GetValue_Int32(sUser, -1)!.Value! == 0)
					)
					.ToArray()!;
			}


			/// <summary>Checks for existing 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList'</summary>
			public static bool IsRegistryHiddenUsersKeyExist()
			{
				using var keyFULL = Registry.LocalMachine.OpenSubKey(CS_KEY_HIDDEN_USERS_LIST_FULL, false);
				return (null != keyFULL);
			}


			#region Open Keys
			private static RegistryKey OpenWinLogonKey(bool bWritable)
				=> Registry.LocalMachine.OpenSubKey(CS_KEY_WINLOGON, bWritable)!;


			private static RegistryKey OpenUserListKey(RegistryKey keyWINLOGON, bool bWritable, bool bCreateIfNotExist)
			{
				RegistryKey? keyUserList = keyWINLOGON.OpenSubKey(CS_KEY_HIDDEN_USERS_LIST, bWritable);
				if (null != keyUserList) return keyUserList;
				if (!bCreateIfNotExist) throw new Exception("No hidden user profiles exist!");

				return keyWINLOGON.CreateSubKey(CS_KEY_HIDDEN_USERS_LIST, RegistryKeyPermissionCheck.ReadWriteSubTree)
					?? throw new Exception($"Failed to create registry key '{CS_KEY_HIDDEN_USERS_LIST}'!");

			}
			#endregion

			#region ModifyVisibility

			public static void RegistryHiddenUsers_SetVisibility(string UserName, bool bVisible)
			{
				// Чтобы скрыть отдельных пользователей в окне приветствия, 
				// запустите редактор реестра и перейдите в раздел 
				// HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon\SpecialAccounts\UserList
				// Теперь создайте новый параметр DWORD, назовите его так же, как имя пользователя, и укажите в качестве значения ноль.
				// Например, если нужно скрыть пользователя Petr, создайте параметр Petr со значением 0.
				// После этого имя Petr не будет появляться в окне приветствия Windows.


				// чтобы скрыть учетную запись в экране приветствия необходимо в
				// HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
				// создать подраздел с именем SpecialAccounts, а в нем еще один с именем UserList.
				// Затем в разделе UserList создайте параметр типа REG_DWORD с именем равным имени учетной записи, которую необходимо скрыть
				// и со значением равным 0 (ноль),
				// соответственно для отображения этой учетной записи в экране приветствия значение параметра нужно будет установить 1 (один) или удалить параметр.
				// Также можете текст кода скопировать в текстовый файл, исправить имя параметра ("User") на имя учетной записи, которую хотите скрыть, сохранить файл, присвоить ему расширение *.reg и запустить полученный файл, согласившись с внесением изменений в реестр.
				// Windows Registry Editor Version 5.00
				// [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList]
				// "Blast"=dword:00000000
				// Учтите, что вместе со скрытием учетной записи в экране приветствия также эта учетная запись будет скрыта и из апплета "Учетные записи пользователей" в Панели управления.
				// Конечно управлять учетной записью (настраивать) вы сможете из оснастки "Локальные пользователи и группы", которую можно открыть через Пуск - Выполнить - lusrmgr.msc, а так же в классическом управлении учетными записями пользователей: Пуск - Выполнить - control
				// Чтобы скрыть отдельных пользователей в окне приветствия, запустите редактор реестра и перейдите в раздел HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\ Winlogon\SpecialAccounts\UserList. Теперь создайте новый параметр DWORD, назовите его так же, как имя пользователя, и укажите в качестве значения ноль. Например, если нужно скрыть пользователя Petr, создайте параметр Petr со значением 0. После этого имя Petr не будет появляться в окне приветствия Windows.


				using var keyWINLOGON = OpenWinLogonKey(true);
				using var keyUserList = OpenUserListKey(keyWINLOGON!, true, !bVisible);
				int iCurrentValue = keyUserList!.e_GetValue_Int32(UserName, int.MaxValue)!.Value;
				if ((iCurrentValue == int.MaxValue) && bVisible) return; //'HIDE' Registry value is not exist, and bVisible=true
				int iTargetVisible = bVisible.e_ToInt32ABS();
				if (iCurrentValue == iTargetVisible) return;
				// Call OutString("Меняем значение видимости...")
				keyUserList!.SetValue(UserName, iTargetVisible, RegistryValueKind.DWord);
			}
			#endregion

			/// <summary>Удаляем из реестра раздел со скрытыми пользователями</summary>
			public static void RegistryHiddenUsers_DeleteRegKey()
			{
				string killSubKeyName = CS_KEY_HIDDEN_USERS_LIST.Split('\\').First();
				using RegistryKey keyWINLOGON = OpenWinLogonKey(true);
				keyWINLOGON?
					.GetSubKeyNames()?
					.e_ForEach(sSubKey =>
					{
						if (sSubKey.ToLower() == killSubKeyName.ToLower())
							keyWINLOGON!.DeleteSubKeyTree(sSubKey);
					});
			}


			#endregion

			#region Users

			/// <summary>Кэш для GetCurrentUser</summary>
			private static readonly EventArgs _CurrentUserSyncLock = new();
			private static WindowsIdentity? _CurrentUser = null;
			private static SecurityIdentifier? _CurrentSID = null;

			/// <summary>Возвращает данные о текущем пользователе (из под которого вызывается) ПО-УМОЛЧАНИЮ ИСПОЛЬЗУЕТ КЭШИРОВАНИЕ МЕЖДУ ВЫЗОВАМИ!!!</summary>
			/// <param name="NotUseCachedInfo">Не использовать ранее кэшированные данные, а запросить новые</param>
			/// <returns>Global.System.Security.Principal.WindowsIdentity</returns>
			internal static WindowsIdentity GetCurrentUser(bool NotUseCachedInfo = false)
			{
				if (NotUseCachedInfo) return WindowsIdentity.GetCurrent();
				lock (_CurrentUserSyncLock) { _CurrentUser ??= WindowsIdentity.GetCurrent(); return _CurrentUser; }
			}

			internal static SecurityIdentifier GetCurrentUserSID()
			{
				lock (_CurrentUserSyncLock)
				{
					_CurrentSID ??= GetCurrentUser(false).User;
					return _CurrentSID!;
				}
			}

			/// <summary>Имя пользователя с доменом</summary>
			internal static string GetCurrentUserName() => GetCurrentUser().Name;


			///// <summary>Имя пользователя без домена</summary>
			//internal static string GetCurrentUserShortName() => GetCurrentUserSID().LookupAccountSidUserName();

			internal static bool IsRunAsAdmin()
			{
				var U = GetCurrentUser();
				lock (U)
					return (new WindowsPrincipal(U)).IsInRole(WindowsBuiltInRole.Administrator);
			}


			/// <summary>The function checks whether the primary access token of the process belongs to user account that is a member of the local Administrators group, even if it currently is not elevated.</summary>
			/// <returns>Returns True if the primary access token of the process belongs to user account that is a member of the local Administrators group. Returns False if the token does not.</returns>
			/// <exception cref="System.ComponentModel.Win32Exception"> When any native Windows API call fails, the function throws a Win32Exception with the last error code.</exception>
			internal static bool UserInAdminGroup()
			{

				// Open the access token of the current process for query and duplicate.
				using var hToken = WinAPI.Security.OpenCurrentProcessToken(TokenAccessLevels.Query | TokenAccessLevels.Duplicate);
				SafeFileHandle? hTokenToCheck = null;
				try
				{
					// Determine whether system is running Windows Vista or later operating systems (major version >= 6)
					// because they support linked tokens, but previous versions (major version < 6) do not.
					if (uom.OS.VistaOrLater) // Running Windows Vista or later (major version >= 6). 
					{
						// Determine token type: limited, elevated, or default. 
						var eElevationType = WinAPI.Security.GetTokenInformation_Elevation(hToken);
						// If limited, get the linked elevated token for further check.
						if (eElevationType == WinAPI.Security.TOKEN_ELEVATION_TYPE.TokenElevationTypeLimited)
						{
							// Get the linked token.
							int cbSize = IntPtr.Size;
							IntPtr hLinkedToken = IntPtr.Zero;
							WinAPI.Security.GetTokenInformation_IntPtr(hToken, WinAPI.Security.TOKEN_INFORMATION_CLASS.TokenLinkedToken, ref hLinkedToken, cbSize, ref cbSize).e_ThrowLastWin32Exception_AssertFalse();
							hTokenToCheck = new SafeFileHandle(hLinkedToken, true);
						}
					}

					// CheckTokenMembership requires an impersonation token. 
					// If we Then just got a linked token, it already Is an impersonation token.
					// If we did Not Get a linked token, duplicate the original into an impersonation token for CheckTokenMembership.
					hTokenToCheck = hTokenToCheck ??= WinAPI.Security.DuplicateToken(hToken, WinAPI.Security.SECURITY_IMPERSONATION_LEVEL.SecurityIdentification);

					// Check if the token to be checked contains admin SID.
					var sid = new WindowsIdentity(hTokenToCheck.DangerousGetHandle());
					var principal = new WindowsPrincipal(sid);
					bool fInAdminGroup = principal.IsInRole(WindowsBuiltInRole.Administrator);
					return fInAdminGroup;
				}
				finally
				{
					if (hTokenToCheck.e_IsValid()) hTokenToCheck?.Dispose();
				}
			}



			#region User Tile Image

			[DllImport(WinAPI.core.WINDLL_SHELL, EntryPoint = "#261", CharSet = CharSet.Unicode, PreserveSig = false)]
			private static extern void GetUserTilePath(
				[In, MarshalAs(UnmanagedType.LPTStr)] string? username,
				uint whatever,
				[In, Out, MarshalAs(UnmanagedType.LPTStr)] StringBuilder picpath,
				int maxLength);

			/// <summary>При вызове этой функции ОС создаёт файл изображения User.bmp 
			/// в папке C:\Users\User\AppData\Local\temp\ ТЕКУЩЕГО ВЫЗЫВАЮЩЕГО ПОЛЬЗОВАТЕЛЯ!
			/// на который и возвращается ссылка.
			/// т.е. в этой папке создаются картинки всех пользователей</summary>
			/// <param name="UserName">username: use null For current user</param>
			public static string GetUserTilePath(string? UserName = null)
			{
				StringBuilder sb = new(1000);
				GetUserTilePath(UserName, 0x80000000, sb, sb.Capacity);
				return sb.ToString();
			}

			/// <summary>При вызове этой функции ОС создаёт файл изображения User.bmp 
			/// в папке C:\Users\User\AppData\Local\temp\ ТЕКУЩЕГО ВЫЗЫВАЮЩЕГО ПОЛЬЗОВАТЕЛЯ!
			/// на который и возвращается ссылка.
			/// т.е. в этой папке создаются картинки всех пользователей</summary>
			/// <param name="UserName">username: use null For current user</param>
			public static Image? GetUserTileImage(string? UserName = null)
			{
				string sUserImagePath = GetUserTilePath(UserName);
				if (File.Exists(sUserImagePath))
				{
					using var imgFile = Image.FromFile(sUserImagePath);
					// Надо использовать клонирование, чтобы не занимать файл изображения, а освободить его сразу после чтения
					return imgFile!.e_CloneAsSomeType();
				}
				// У пользователя картинки библиотеки его аватаров лежат в 'C:\Users\uom\AppData\Roaming\Microsoft\Windows\AccountPictures
				return null;

				// ********************** А так картинку пользователя в домене хранит Outlook
				// Newer versions of Office (2010+) use Active Directory to retrieve And display user photos. 
				// It 's a useful feature that also adds visual interest. I can look quickly at the thumbnails at the bottom of an email or meeting request in Outlook to see who’s invited; this is much faster than reading through the semi-colon delimited list of email addresses.
				/*                 
				Private void GetUserPicture(String userName)
				{
					var directoryEntry = New DirectoryEntry("LDAP://YourDomain");
					var directorySearcher = New DirectorySearcher(directoryEntry);
					directorySearcher.Filter = String.Format("(&(SAMAccountName={0}))", UserName);
					var user = directorySearcher.FindOne();

					var bytes = user.Properties["thumbnailPhoto"][0] as byte[];

					Using(var ms = New MemoryStream(bytes))
				 {
						var imageSource = New BitmapImage();
						imageSource.BeginInit();
						imageSource.StreamSource = MS;
						imageSource.EndInit();

						uxPhoto.Source = imageSource;
					}
				}
				*/
			}


			// Динамическая загрузка библиотеки
			// HMODULE shell32Dll = : LoadLibrary(L"shell32.dll");
			// HRESULT (__stdcall *getUserImage)(LPCWSTR userName,
			// DWORD zero, LPWSTR outPath, UINT size);

			// (FARPROC&)getUserImage = GetProcAddress(shell32Dll, MAKEINTRESOURCEA(261));
			// If (getUserImage)
			// {
			// WCHAR outPath[MAX_PATH];
			// getUserImage(NULL,0x80000000,outPath,MAX_PATH);
			// }
			// (FARPROC&)getUserImage = GetProcAddress(shell32Dll, MAKEINTRESOURCE(261));




			// [DllImport("shell32.dll", EntryPoint = "#262", CharSet = CharSet.Unicode, PreserveSig = false)]
			// Public Static extern void SetUserTile(String username, int whatever, String picpath);

			// [STAThread]
			// Static void Main(String[] args)
			// {
			// SetUserTile(args[0], 0, args[1]);
			// }


			// I have found relevant information at \HKEY_CURRENT_USER\Volatile Envirnment, but Not the exact path.
			// My guess Is that the avatar Is always at C: \Users\UserName\AppData\Local\Temp\ And the file name itself can be found from this algorithm:

			// // Note that $XYZ$ means \HKEY_CURRENT_USER\Volatile Envirnment\XYZ
			// If $USERDOMAIN$ = "" Then
			// Return $USERNAME$.Substring(0, $USERNAME$.IndexOf('.'));
			// Else
			// Return $USERDOMAIN$ + "+" + $USERNAME$.Substring(0, $USERNAME$.IndexOf('.'));
			// Again, just a guess.

			// P.S.: There Is Volatile Environment For all users, If you look at \HKEY_USERS. If you want a specific user, iterate over all users And check In the Volatile Environment For the user name (the Sub-keys Of \HKEY_USERS are just random strings, so you must look inside).


			// ''' <summary>Работает некорректно!!!</summary>
			// Public Shared Function GetUserTileImage() As Image
			// Dim sFile = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) & "\Temp\" & Environment.UserName & ".bmp"
			// If (File.Exists(sFile)) Then Return Image.FromFile(sFile)
			// Return Nothing
			// End Function
			#endregion



			#endregion

			internal static SecurityIdentifier GetSID(WellKnownSidType esid, SecurityIdentifier? domain = null)
				=> new(esid, domain);

			internal static SecurityIdentifier GetSID_Everyone()
				=> GetSID(WellKnownSidType.WorldSid);

		}


		#region SYSTEM_INFO
		[StructLayout(LayoutKind.Sequential)]
		public struct SYSTEM_INFO
		{
			public short wProcessorArchitecture;
			public short wReserved;
			public int dwPageSize;
			public int lpMinimumApplicationAddress;
			public int lpMaximumApplicationAddress;
			public int dwActiveProcessorMask;
			public int dwNumberOfProcessors;
			public int dwProcessorType;
			public int dwAllocationGranularity;
			public short wProcessorLevel;
			public short wProcessorRevision;

			[DllImport(WinAPI.core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
			private static extern void GetNativeSystemInfo([In, Out] ref SYSTEM_INFO lpSystemInfo);

			public static SYSTEM_INFO GetNativeSystemInfo()
			{
				var VVV = new SYSTEM_INFO();
				SYSTEM_INFO.GetNativeSystemInfo(ref VVV);
				return VVV;
			}
		}
		#endregion



		#region SystemUpTime
		/// <summary>OS до Windows 8: При гибернации счётчик сбрасывается в 0
		/// 
		/// Windows 10: Incorrect Uptime Reported by Task Manager and WMI
		/// Task Manager 's Performance tab (CPU section) shows the Up time information of the system, but you may be wondering why your boot up time doesn’t match the Up time data reported.
		/// This Is because Task Manager Or WMI wouldn't deduct the sleep/hibernation time when calculating up time, 
		/// and with Fast Startup introduced and enabled by default in Windows 8 (and higher), the Up time reported may not match with your actual last boot up time.
		/// 
		/// Fast startup Is a hybrid Of cold startup + hibernate; 
		/// When you shutdown the computer With fast startup enabled, the user accounts are logged off completely.
		/// Then the system goes To hibernate mode (instead Of traditional cold shutdown), so that the Next boot up till the logon screen will be quicker (30-70 % faster). 
		/// If you have old hardware you may Not see much difference In startup times.
		/// </summary>
		public static TimeSpan GetSystemUpTime_FromSystemCounters()
		{
			using var rUpTime = new PerformanceCounter(
				"System",
				"System Up Time");
			rUpTime.NextValue(); // Call this an extra time before reading its value
			return TimeSpan.FromSeconds(rUpTime.NextValue());

			// В Win10, WMI тоже даёт неверный результат, если используется 
			// Using OS As New ROOT.CIMV2.OperatingSystem
			// Dim dtBoot = OS.LastBootUpTime
			// Return dtBoot
			// End Using
		}

		public static async Task<TimeSpan> GetSystemUpTime_FromSystemCountersAsync()
		{
			return await uom.Extensions.Extensions_Async_MT.e_RunAsync(() => GetSystemUpTime_FromSystemCounters());
		}

		/// <summary>При гибернации счётчик НЕ сбрасывается и считается что комп не выключался
		/// На W8+ тот же косяк с fastboot, что и у GetSystemUpTime_FromSystemCounters</summary>
		public static TimeSpan GetSystemUpTime_FromTickCount64()
		{
			return TimeSpan.FromMilliseconds(uom.OS.TickCount_64);
		}

		internal static DateTime GetOSBootDate_FromSystemCounters()
		{
			var tsUpTime = GetSystemUpTime_FromSystemCounters();
			var dtOSBoot = DateTime.Now.Subtract(tsUpTime);
			return dtOSBoot;
		}
		#endregion

		internal static string GetWinSys32Folder() => Environment.GetFolderPath(Environment.SpecialFolder.System);


		internal static string GetWinSyst32Path(string sPath) => Path.Combine(GetWinSys32Folder(), sPath);

		#region Win Version

		internal static bool IsNT() => Environment.OSVersion.Platform.HasFlag(PlatformID.Win32NT);


		#region IsWinVersionMoreThan_

		#region Client versions

		/// <summary>Windows NT 3.51 Workstation</summary>
		internal static readonly Version OS_VERSION_CLIENT_NT_3_51 = new(3, 51, 0, 0);

		/// <summary>Windows 95</summary>
		internal static readonly Version OS_VERSION_CLIENT_W95 = new(4, 0, 0, 0);

		/// <summary>Windows NT 4.0 Workstation	1381 (Service Pack 6a)</summary>
		internal static readonly Version OS_VERSION_CLIENT_WIN_NT_4_0 = new(4, 0, 0, 0);

		/// <summary>Windows 98 / Windows 98 Second Edition</summary>
		internal static readonly Version OS_VERSION_CLIENT_W98 = new(4, 10, 0, 0);

		/// <summary>NT 5.0	Professional</summary>
		internal static readonly Version OS_VERSION_CLIENT_W2000 = new(5, 0);

		/// <summary>Windows Me</summary>
		internal static readonly Version OS_VERSION_CLIENT_ME = new(4, 90, 0, 0);

		/// <summary>Windows XP</summary>
		internal static readonly Version OS_VERSION_CLIENT_XP = new(5, 1);

		/// <summary>Windows XP 64-bit Edition</summary>
		internal static readonly Version OS_VERSION_CLIENT_XP_x64 = new(5, 2);

		/// <summary>Windows Vista</summary>
		internal static readonly Version OS_VERSION_CLIENT_VISTA = new(6, 0);

		/// <summary>Windows 7</summary>
		internal static readonly Version OS_VERSION_CLIENT_W7 = new(6, 1);

		/// <summary>Windows 8</summary>
		internal static readonly Version OS_VERSION_CLIENT_W8 = new(6, 2);

		/// <summary>Windows 8.1</summary>
		internal static readonly Version OS_VERSION_CLIENT_W81 = new(6, 3);

		/// <summary>Windows 10</summary>
		internal static readonly Version OS_VERSION_CLIENT_W10 = new(10, 0);

		/// <summary>Windows 11</summary>
		internal static readonly Version OS_VERSION_CLIENT_W11 = new(10, 0, 22000);
		#endregion


		#region Server versions
		/// <summary>Windows 2000 Server</summary>
		internal static readonly Version OS_VERSION_SERVER_2000 = new(5, 0);

		/// <summary>Windows Server 2003</summary>
		internal static readonly Version OS_VERSION_SERVER_2003 = new(5, 2);

		/// <summary>Windows Server 2003 R2</summary>
		internal static readonly Version OS_VERSION_SERVER_2003R2 = new(5, 2);

		/// <summary>Windows Server 2008</summary>
		internal static readonly Version OS_VERSION_SERVER_2008 = new(6, 0);

		/// <summary>Windows Server 2008 R2</summary>
		internal static readonly Version OS_VERSION_SERVER_2008R2 = new(6, 1);

		/// <summary>Windows Server 2012</summary>
		internal static readonly Version OS_VERSION_SERVER_2012 = new(6, 2);

		/// <summary>Windows Server 2012 R2</summary>
		internal static readonly Version OS_VERSION_SERVER_2012R2 = new(6, 3);

		/// <summary>Windows Server 2016</summary>
		internal static readonly Version OS_VERSION_SERVER_2016 = new(10, 0, 14393);

		internal static readonly Version OS_VERSION_SERVER_2019 = new(10, 0, 17763);

		internal static readonly Version OS_VERSION_SERVER_2022 = new(10, 0, 20348);
		#endregion



		internal static readonly bool VistaOrLater = IsNT() && CheckOS(OS_VERSION_CLIENT_VISTA);
		internal static readonly bool Win7OrLater = IsNT() && CheckOS(OS_VERSION_CLIENT_W7);
		internal static readonly bool Win8OrLater = IsNT() && CheckOS(OS_VERSION_CLIENT_W8);
		internal static readonly bool Win10OrLater = IsNT() && CheckOS(OS_VERSION_CLIENT_W10);
		internal static readonly bool Win11OrLater = IsNT() && CheckOS(OS_VERSION_CLIENT_W11);

		/// <summary>Aero UI supports only w7. W8 has flat UI</summary>
		internal static readonly bool SupportAeroUI = (VistaOrLater && !Win8OrLater);

		internal static readonly bool SupportMetroAppX = Win8OrLater;

		private static EventArgs _CurrentOSLock = new();
		private static OSVERSIONINFOEX? _CurrentOS = null;
		internal static OSVERSIONINFOEX CurrentOS
		{
			get
			{
				_CurrentOSLock ??= new();
				lock (_CurrentOSLock)
				{
					if (!_CurrentOS.HasValue) _CurrentOS = OSVERSIONINFOEX.RtlGetVersion();
					return _CurrentOS.Value;
				}
			}
		}

		/// <summary>Important!!!
		/// Environment.OSVersion.Version - Starting with Windows 8, the OSVersion Property returns the same major And minor version numbers For all Windows platforms. Therefore, we do Not recommend that you retrieve the value of this property to determine the operating system version.</summary>
		/// <param name="NeedOSVersion"></param>
		/// Important
		/// Environment.OSVersion.Version - Starting with Windows 8, the OSVersion Property returns the same major And minor version numbers For all Windows platforms. Therefore, we do Not recommend that you retrieve the value of this property to determine the operating system version.
		/// https://docs.microsoft.com/en-us/dotnet/api/system.environment.osversion?f1url=https%3A%2F%2Fmsdn.microsoft.com%2Fquery%2Fdev15.query%3FappId%3DDev15IDEF1%26l%3DEN-US%26k%3Dk(System.Environment.OSVersion);k(TargetFrameworkMoniker-.NETFramework,Version%3Dv4.5.2);k(DevLang-VB)%26rd%3Dtrue&view=netframework-4.7.1
		public static bool CheckOS(Version NeedOSVersion) => (CurrentOS.ToVersion() >= NeedOSVersion);

		internal static void CheckVistaOrLater()
		{
			if (!VistaOrLater) throw new NotSupportedException("Требуется минимум Windows Vista!");
		}

		internal static void CheckWin7OrLater()
		{
			if (!Win7OrLater) throw new NotSupportedException("Требуется минимум Windows7!");
		}

		#endregion





		#region OSVERSIONINFOEX

		// https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms724833(v=vs.85).aspx
		/// <summary>
		/// Remarks
		/// Relying on version information Is Not the best way to test for a feature. Instead, refer to the documentation for the feature of interest. For more information on common techniques for feature detection, see Operating System Version.
		/// If you must require a particular operating system, be sure To use it As a minimum supported version, rather than design the test For the one operating system. This way, your detection code will Continue To work On future versions Of Windows.
		/// The following table summarizes the values returned by supported versions Of Windows. Use the information In the column labeled "Other" To distinguish between operating systems With identical version numbers.
		/// Operating system	Version number	dwMajorVersion	dwMinorVersion	Other
		/// Windows 10	10.0*	10	0	OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION
		/// Windows Server 2016	10.0*	10	0	OSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION
		/// Windows 8.1	6.3*	6	3	OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION
		/// Windows Server 2012 R2	6.3*	6	3	OSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION
		/// Windows 8	6.2	6	2	OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION
		/// Windows Server 2012	6.2	6	2	OSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION
		/// Windows 7	6.1	6	1	OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION
		/// Windows Server 2008 R2	6.1	6	1	OSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION
		/// Windows Server 2008	6.0	6	0	OSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION
		/// Windows Vista	6.0	6	0	OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION
		/// Windows Server 2003 R2	5.2	5	2	GetSystemMetrics(SM_SERVERR2) != 0
		/// Windows Home Server	5.2	5	2	OSVERSIONINFOEX.wSuiteMask OR VER_SUITE_WH_SERVER
		/// Windows Server 2003	5.2	5	2	GetSystemMetrics(SM_SERVERR2) == 0
		/// Windows XP Professional x64 Edition	5.2	5	2	(OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION) AND (SYSTEM_INFO.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64)
		/// Windows XP	5.1	5	1	Not applicable
		/// Windows 2000	5.0	5	0	Not applicable
		/// * For applications that have been manifested for Windows 8.1 Or Windows 10. Applications Not manifested for Windows 8.1 Or Windows 10 will return the Windows 8 OS version value (6.2). To manifest your applications for Windows 8.1 Or Windows 10, refer to Targeting your application for Windows.
		/// </summary>
		[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
		internal struct OSVERSIONINFOEX
		{
			/// <summary>The size of this data structure, in bytes. Set this member to sizeof(OSVERSIONINFOEX).</summary>
			public int dwOSVersionInfoSize;
			/// <summary>The major version number of the operating system. For more information, see Remarks.</summary>
			public int dwMajorVersion;
			/// <summary>The minor version number of the operating system. For more information, see Remarks.</summary>
			public int dwMinorVersion;
			/// <summary>The build number of the operating system.</summary>
			public int dwBuildNumber;
			/// <summary>The operating system platform. This member can be VER_PLATFORM_WIN32_NT (2).</summary>
			public PlatformIds dwPlatformId;

			/// <summary>A null-terminated string, such as "Service Pack 3", that indicates the latest Service Pack installed on the system. If no Service Pack has been installed, the string is empty.</summary>
			[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
			public string szCSDVersion;

			/// <summary>The major version number of the latest Service Pack installed on the system. For example, for Service Pack 3, the major version number is 3. If no Service Pack has been installed, the value is zero.</summary>
			public ushort wServicePackMajor;
			/// <summary>The minor version number of the latest Service Pack installed on the system. For example, for Service Pack 3, the minor version number is 0.</summary>
			public ushort wServicePackMinor;
			/// <summary>A bit mask that identifies the product suites available on the system. This member can be a combination of the following values.</summary>
			public ProductSuites wSuiteMask;
			/// <summary>Any additional information about the system. This member can be one of the following values.</summary>
			public ProductTypes wProductType;
			/// <summary>Reserved for future use.</summary>
			public byte wReserved;


			/// <summary>A bit mask that identifies the product suites available on the system. This member can be a combination of the following values.</summary>
			[Flags]
			internal enum ProductSuites : ushort
			{
				/// <summary>Microsoft BackOffice components are installed.</summary>
				VER_SUITE_BACKOFFICE = 0x4,
				/// <summary>Windows Server 2003, Web Edition Is installed.</summary>
				VER_SUITE_BLADE = 0x400,
				/// <summary>Windows Server 2003, Compute Cluster Edition Is installed.</summary>
				VER_SUITE_COMPUTE_SERVER = 0x4000,
				/// <summary>Windows Server 2008 Datacenter, Windows Server 2003, Datacenter Edition, Or Windows 2000 Datacenter Server Is installed.</summary>
				VER_SUITE_DATACENTER = 0x80,
				/// <summary>Windows Server 2008 Enterprise, Windows Server 2003, Enterprise Edition, Or Windows 2000 Advanced Server Is installed. Refer To the Remarks section For more information about this bit flag.</summary>
				VER_SUITE_ENTERPRISE = 0x2,
				/// <summary>'Windows XP Embedded Is installed.</summary>
				VER_SUITE_EMBEDDEDNT = 0x40,
				/// <summary>Windows Vista Home Premium, Windows Vista Home Basic, Or Windows XP Home Edition Is installed.</summary>
				VER_SUITE_PERSONAL = 0x200,
				/// <summary>Remote Desktop Is supported, but only one interactive session Is supported. This value Is Set unless the system Is running In application server mode.</summary>
				VER_SUITE_SINGLEUSERTS = 0x100,
				/// <summary>Microsoft Small Business Server was once installed On the system, but may have been upgraded To another version Of Windows. Refer To the Remarks section For more information about this bit flag.</summary>
				VER_SUITE_SMALLBUSINESS = 0x1,
				/// <summary>Microsoft Small Business Server Is installed With the restrictive client license In force. Refer To the Remarks section For more information about this bit flag.</summary>
				VER_SUITE_SMALLBUSINESS_RESTRICTED = 0x20,
				/// <summary>Windows Storage Server 2003 R2 Or Windows Storage Server 2003Is installed.</summary>
				VER_SUITE_STORAGE_SERVER = 0x2000,
				/// <summary>Terminal Services Is installed. This value Is always Set.
				/// If VER_SUITE_TERMINAL Is set but VER_SUITE_SINGLEUSERTS Is Not set, the system Is running in application server mode.</summary>
				VER_SUITE_TERMINAL = 0x10,
				/// <summary>Windows Home Server Is installed.</summary>
				VER_SUITE_WH_SERVER = 0x8000
				// ''' <summary>AppServer mode Is enabled.</summary>
				// VER_SUITE_MULTIUSERTS = &H20000
			}

			/// <summary>Any additional information about the system. This member can be one Of the following values.</summary>
			internal enum ProductTypes : byte
			{
				/// <summary>The system Is a domain controller And the operating system Is Windows Server 2012 , Windows Server 2008 R2, Windows Server 2008, Windows Server 2003, Or Windows 2000 Server.</summary>
				VER_NT_DOMAIN_CONTROLLER = 0x2,

				/// <summary>The operating system Is Windows Server 2012, Windows Server 2008 R2, Windows Server 2008, Windows Server 2003, Or Windows 2000 Server.
				/// Note that a server that Is also a domain controller Is reported As VER_NT_DOMAIN_CONTROLLER, Not VER_NT_SERVER.</summary>
				VER_NT_SERVER = 0x3,

				/// <summary>The operating system Is Windows 8, Windows 7, Windows Vista, Windows XP Professional, Windows XP Home Edition, Or Windows 2000 Professional.</summary>
				VER_NT_WORKSTATION = 0x1
			}

			/// <summary>Any additional information about the system. This member can be one Of the following values.</summary>
			internal enum PlatformIds : int
			{
				VER_PLATFORM_WIN32_NT = 2
			}


			[DllImport(WinAPI.core.WINDLL_NTDLL, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
			private static extern int RtlGetVersion([In, Out] ref OSVERSIONINFOEX lpVersionInfo);
			public static OSVERSIONINFOEX RtlGetVersion()
			{
				var OVI = new OSVERSIONINFOEX() { dwOSVersionInfoSize = Marshal.SizeOf(typeof(OSVERSIONINFOEX)) };
				//int iResult = OSVERSIONINFOEX.RtlGetVersion(ref OVI);
				//if (iResult != 0) throw new Exception("RtlGetVersion Failed!");
				OSVERSIONINFOEX.RtlGetVersion(ref OVI).e_ThrowIfError();
				return OVI;
			}

			#region RtlGetNtVersionNumbers

			//    [DllImport(WinAPI.WINDLL_NTDLL, SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			//    using fnRtlGetNtVersionNumbers = void (WINAPI*) (LPDWORD major, LPDWORD minor, LPDWORD build);
			//    // 1809 17763
			//     fnRtlGetNtVersionNumbers RtlGetNtVersionNumbers = reinterpret_cast<fnRtlGetNtVersionNumbers>(GetProcAddress(GetModuleHandleW(L"ntdll.dll"), "RtlGetNtVersionNumbers"));
			//private static extern void RtlGetNtVersionNumbers(out uint major, [Out ] uint minor, [Out ] ushort build);

			///// <summary>Use RtlGetNtVersionNumbers from ntdll.dll</summary>
			//internal static Version RtlGetNtVersionNumbers()
			//{
			//    uint major, minor;
			//    ushort build;
			//    RtlGetNtVersionNumbers(ref major, ref minor, ref build);
			//    // build = build And Not &HF0000000
			//    // build = (build And &HF0000000)
			//    return new Version((int)major, (int)minor, build);
			//}
			#endregion


			public Version SPVersion() => new(wServicePackMajor, wServicePackMinor);
			public string SPVersionString()
			{
				var sSPVersion = "";
				if (wServicePackMajor != 0) sSPVersion += SPVersion().ToString();
				if (szCSDVersion.e_IsNOTNullOrWhiteSpace()) sSPVersion += $" {szCSDVersion}";
				return sSPVersion;

			}
			public override string ToString()
			{
				var spVersion = SPVersionString(); if (spVersion.e_IsNOTNullOrWhiteSpace()) spVersion = ", SP:" + spVersion;
				return $"Version: {ToVersion()}{spVersion}\n" +
					$"Known Name: {KnownName()}\n" +
					$"Platform Id: {dwPlatformId}\n" +
					$"Suite Mask: {wSuiteMask}\n" +
					$"Product Type: {wProductType}";
			}

			public Version ToVersion() => new(dwMajorVersion, dwMinorVersion, dwBuildNumber);




			internal enum KnownVersionNames : int
			{
				/// <summary>Unsupported OS</summary>
				Unknown = -1,

				NT4 = 0x400,
				WIN2K = 0x500,
				WS03 = 0x502,


				WIN6 = 0x600,
				VISTA = 0x600,
				WS08 = 0x600,
				LONGHORN = 0x600,


				/// <summary>Windows XP</summary>
				WinXP = 0x501,

				/// <summary>Windows 7</summary>
				Win7 = 0x601,

				/// <summary>Windows 8</summary>
				Win8 = 0x602,

				/// <summary>Windows 8.1</summary>
				Win8Point1 = 0x603,

				Win10 = 0xA00,
				Win10_Threshold1 = 10240,
				Win10_Threshold2 = 10586,
				Win10_Redstone1_AnniversaryUpdate,
				Win10_Redstone2_CreatorsUpdate = 15063,
				Win10_Redstone3_FallCreatorsUpdate = 16299,
				Win10_Redstone4 = 17134,
				Win10_Redstone5 = 17763,
				Win10_19H1 = 18362,
				Win10_19H2_Vanadium = 18363,
				Win10_20H1 = 19041,
				Win10_20H2 = 19042,
				Win10_21H1 = 19043,
				Win10_21H2 = 19044,
				Win11_21H2_SunValley = 22000,
			}

			public KnownVersionNames KnownName()
			{
				try
				{
					if (dwMajorVersion != 0)
					{
						int ifullver = dwMajorVersion << 8 | dwMinorVersion;
						var efullver = (KnownVersionNames)ifullver;

						switch (efullver)
						{
							case KnownVersionNames.Win10:
								{
									var Win10_ = KnownVersionNames.Win10.ToString() + "_";
									var Win11_ = KnownVersionNames.Win11_21H2_SunValley.ToString().Split('_').First() + "_";


									var aW10Builds = (from KnownVersionNames E in Enum.GetValues(typeof(KnownVersionNames))
													  where (E.ToString().StartsWith(Win10_) || E.ToString().StartsWith(Win11_))
													  orderby (int)E descending
													  select E).ToArray();


									var iBuild = dwBuildNumber;
									var eVerFound = aW10Builds.Where(e => (iBuild >= (int)e)).FirstOrDefault();
									if (eVerFound != default) return eVerFound;
									break;
								}

							default:
								return efullver;
						}

					}
				}
				catch { }//ignore any errors

				return KnownVersionNames.Unknown;
			}
		} // OSVERSIONINFOEX
		#endregion


		#endregion
	}


	internal static class MSOffice
	{
		public enum OfficeApplications : int
		{
			Excel,
			Word
		}

		public static dynamic CreateOfficeAppInstance(OfficeApplications oa)
		{
			string sCOMID = oa switch
			{
				OfficeApplications.Excel => "Excel.Application",
				OfficeApplications.Word => "Word.Application",
				_ => throw new ArgumentOutOfRangeException(oa.ToString())
			};


			Type? xlType = Type.GetTypeFromProgID(sCOMID, true);
			_ = xlType ?? throw new Exception(sCOMID + " is not installed!");

			dynamic? rCOMInstance = Activator.CreateInstance(xlType);
			_ = rCOMInstance ?? throw new Exception($"CreateInstance('{xlType.ToString()}') FAILED!");
			return rCOMInstance!;
		}
	}


	/// <summary>Создаёт мутекс вида 'AppTitle[_UserSID][_Suffix]'
	/// Пример: 'UOM Network Center_S-1-5-21-3677865666-450531355-3649671759-1002_UOMNetworkCenter.Tools.Apps.WOL.ToolLauncher'</summary>
	internal class AppMutex : AutoDisposable1T<Mutex>
	{
		public readonly Mutex Mutex;

		/// <summary>Signal that mutex is created there. If false - mutex was already exist.</summary>
		public readonly bool IsMutexCreated;
		public readonly bool ForCurrentUser;
		public readonly string? Suffix;
		public readonly string MutexName;

		/// <summary>Create Mutex with name like 'AppTitle[_UserSID][_Suffix]'
		/// Пример: 'App1_S-1-5-21-3677865666-450531355-3649671759-1002_suffix'</summary>
		/// <param name="ForCurrentUser">Mutex name will; be diferent for each logged on user !!! Session ID is not used!!!</param>
		/// <param name="Suffix">Mutex ID suffix - any string or null</param>
		public AppMutex(
			string? suffix = null,
			bool forCurrentUser = true,
			bool throwIfNotCrated = false) : base()
		{
			(Mutex, IsMutexCreated, MutexName) = CreateAppMutex(forCurrentUser, suffix);
			ForCurrentUser = forCurrentUser;
			Suffix = suffix;

			if (IsMutexCreated)
				RegisterDisposableObject(Mutex, true);
			else if (throwIfNotCrated)
				throw new AppMutexAlreadyExistException();
		}

		/// <inheritdoc />
		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		private static (Mutex Mutex, bool MutexCreated, string MutexID) CreateAppMutex(
			bool forCurrentUser,
			string? suffix = null)
		{
			string mutexID = CreateAppIDString(forCurrentUser, suffix);
			var mtx = new Mutex(
				true,
				mutexID,
				out bool bMutexCreated);

			return (mtx, bMutexCreated, mutexID);
		}

		/// <summary>Create MutexID string with name like 'AppTitle[_UserSID][_Suffix]'
		/// Пример: 'App1_S-1-5-21-3677865666-450531355-3649671759-1002_suffix'</summary>
		/// <param name="ForCurrentUser">Mutex name will; be diferent for each logged on user !!! Session ID is not used!!!</param>
		/// <param name="Suffix">Mutex ID suffix - any string or null</param>
		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		internal static string CreateAppIDString(
			bool forCurrentUser,
			string? Suffix = null)
		{
			const char C_PART_SEPARATOR = '_';

			string AppIDString = AppInfo.Title ?? "";
			if (AppIDString.e_IsNullOrWhiteSpace()) throw new Exception("Application.Title = null!");

			if (forCurrentUser)
				AppIDString += C_PART_SEPARATOR + OS.UserAccounts.GetCurrentUserSID().ToString();

			if (Suffix.e_IsNOTNullOrWhiteSpace())
				AppIDString += (C_PART_SEPARATOR + Suffix);

			return AppIDString;
		}

		public override string ToString() => MutexName;

		internal partial class AppMutexAlreadyExistException : Exception
		{
			public AppMutexAlreadyExistException() : base(uom.WinAPI.Errors.Win32Errors.ERROR_SERVICE_EXISTS.e_ToWin32Exception().Message) { }
		}
	}

	/// <summary>MT safe FPS counter</summary>
	internal class FPSCounter
	{


		private ulong _lLastSecondTimestamp = uom.OS.TickCount_64;


		private int _iCurrentSecondFramesCounter = 0;
		private int _iFPS = 0;
		private readonly string _sTitle = "";

		private readonly EventArgs _lock = new();


		public FPSCounter(string sTitle = "") : base() { _sTitle = sTitle; }

		public int FPS { get { lock (_lock) return _iFPS; } }
		public string Title { get { lock (_lock) return _sTitle; } }

		public void Reset()
		{
			lock (_lock)
			{
				_lLastSecondTimestamp = CurrentSecond;
				_iCurrentSecondFramesCounter = 0;
				_iFPS = 0;
			}
		}


		private static ulong CurrentSecond { get => (OS.TickCount_64 / 1000L); }


		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public void CountFrame()
		{
			lock (_lock)
			{
				var lCurrentTimestamp = CurrentSecond;
				if (lCurrentTimestamp == _lLastSecondTimestamp)
					_iCurrentSecondFramesCounter++;
				else
				{
					_iFPS = _iCurrentSecondFramesCounter;
					_iCurrentSecondFramesCounter = 1;
					_lLastSecondTimestamp = lCurrentTimestamp;
				}
			}
		}

		public override string ToString() { lock (_lock) return $"FPS{(_sTitle == "" ? "" : $" ({_sTitle})")}: {_iFPS}"; }
	}


	[DefaultProperty("Value")]

	internal class ComboboxItemContainer<T>
	{
		public readonly T Value;
		private readonly string _displayName = string.Empty;
		private readonly Func<T, string>? _dynamicDisplayNameProvider = null;

		public ComboboxItemContainer(T wrappedValue) : base()
		{
			if (wrappedValue == null) throw new ArgumentNullException(nameof(wrappedValue));
			Value = wrappedValue;
		}

		public ComboboxItemContainer(T wrappedValue, string displayName) : this(wrappedValue) => _displayName = displayName;

		public ComboboxItemContainer(T wrappedValue, Func<T, string> dynamicDisplayNameProvider) : this(wrappedValue) => _dynamicDisplayNameProvider = dynamicDisplayNameProvider;

		public string DisplayName
		{
			get
			{
				if (_dynamicDisplayNameProvider != null) return _dynamicDisplayNameProvider.Invoke(Value);
				if (!string.IsNullOrEmpty(_displayName)) return _displayName;
#pragma warning disable CS8603 // Dereference of a possibly null reference.
				return Value!.ToString();
#pragma warning restore CS8603 // Dereference of a possibly null reference.
			}
		}

		public override string ToString() => DisplayName;
	}


	/// <summary>The wrapper class for any objects which need to be displayed in Comboboxes with custum text</summary>
	[DefaultProperty("Value")]
	internal class ComboboxItemEnumContainer<T> : ComboboxItemContainer<T> where T : Enum
	{
		public ComboboxItemEnumContainer(T val, string description) : base(val, description)
		{
			throw new NotImplementedException();
			//@Value = val;
			//Description = description;

			/*	   			


							if (sUserDescription.e_IsNullOrWhiteSpace) {
				Me.ElementDescription = Me.Value.ToString

								//Извлекаем...
								Try
									var TT = typeof(T)
									//var E As [Enum] = CType(Me.Value, [Enum])
									//var S = ExtEnum_GetCommentAttributeValue(Me.Value)

									var sValue = Me.Value.ToString

									var OOO As Object = V
									var VVV As[Enum] = CType(OOO, [Enum])
									var S = ExtEnum_GetDescriptionValue(VVV)
									if (S.e_IsNOTNullOrWhiteSpace)
				{
					Me.ElementDescription = S
								Catch: End Try

							}
				else
				{ //Вручную указано конкретное описание
					Me.ElementDescription = sUserDescription
								}
			 */
		}
	}


	/// <summary> Class than automaticaly disposes 1 attached COM value </summary>
	internal class AutoDisposableCOM : AutoDisposableUniversal
	{
		protected readonly Stack<object> COMObjectsToDispose = new();

		public AutoDisposableCOM() : base() { RegisterDisposeCallback(FreeCOMObjects, true); }

		/// <summary>Register COM objects which need to be destroyed</summary>
		protected internal void RegisterDisposableCOMObject(object COMObject)
		{
			_ = COMObject ?? throw new ArgumentNullException(nameof(COMObject));
			if (COMObjectsToDispose.Contains(COMObject)) throw new ArgumentException($"'{COMObject}' already in dispose list!", nameof(COMObject));
			COMObjectsToDispose.Push(COMObject);


			//FreeUnmanagedObjects
		}


		protected virtual void FreeCOMObjects()
		{
			OnBeforeFreeCOMObjects(COMObjectsToDispose);
			while (COMObjectsToDispose.Any())
			{
				var rObjectToKill = COMObjectsToDispose.Pop();
				Marshal.ReleaseComObject(rObjectToKill);
			}
			OnAfterFreeCOMObjects(COMObjectsToDispose);
		}

		/// <summary>Just template, override if need</summary>            
		protected virtual void OnBeforeFreeCOMObjects(Stack<object> rCOMObjectsToDispose) { }

		/// <summary>Just template, override if need</summary>            
		protected virtual void OnAfterFreeCOMObjects(Stack<object> rCOMObjectsToDispose) { }
	}

	internal abstract partial class MTSafeContainerBase<T> : AutoDisposableUniversal
	{


		#region AttachToUI

		/// <summary>Прицепляет обработку изменения значения, к потоку заданного элемента управления</summary>
		/// <param name="ValueDisplayControl">Элемент управления, в потоке которого будет выполнен обработчик изменения значения</param>
		/// <param name="OnValueChanged">Будет вызываться в потоке ValueDisplayControl</param>
		/// <returns>При CTL.HandleDestroyed отслеживание изменения значения автоматически прекращается</returns>
		public ValueChangedUINotifer AttachToUI(Control ValueDisplayControl, Action<T?> OnValueChanged)
			=> new(this, ValueDisplayControl, OnValueChanged);

		/// <summary>Прицепляет обработку изменения значения, к отображению его в текстовом поле, с возможностью форматирования</summary>
		/// <param name="ValueDisplayControl">Элемент управления, в потоке которого будет выполнен обработчик изменения значения</param>
		/// <param name="TemplateFormatString">Шаблон строки для отображения</param>
		/// <returns>При CTL.HandleDestroyed отслеживание изменения значения автоматически прекращается</returns>
		public ValueChangedUINotifer AttachToUI(TextBox ValueDisplayControl, string? TemplateFormatString = null)
		{
			//var VT = Value.GetType();
			switch (Value!)
			{
				case string sV:
				case int iV:
				case long lV:
				case short srtV:
				case StringBuilder sb:
				case DateTime dt:
				case Guid g:
					{
						Action<T?> CB = new(NewVal =>
					   {
						   if (TemplateFormatString.e_IsNOTNullOrWhiteSpace())
						   {
							   string S = TemplateFormatString!.e_Format(NewVal?.ToString()!);
							   ValueDisplayControl.Text = S;
						   }
						   else
						   {
							   ValueDisplayControl.Text = NewVal!.ToString();
						   }
					   });
						return AttachToUI(ValueDisplayControl, CB);
					}

				default:
					throw new ArgumentOutOfRangeException($"Элемент управления {ValueDisplayControl.GetType()}, не может отобразить тип значения {Value!.GetType()}");
			}
		}

		/// <summary>Прицепляет обработку изменения значения, к установке ProgressBar.Value</summary>
		/// <param name="pb">Элемент управления, в потоке которого будет выполнен обработчик изменения значения</param>
		/// <returns>При CTL.HandleDestroyed отслеживание изменения значения автоматически прекращается</returns>
		public ValueChangedUINotifer AttachToUI(ProgressBar pb)
			=> Value! switch
			{
				int iVal => AttachToUI(pb, NewVal => pb.Value = iVal),
				_ => throw new ArgumentOutOfRangeException($"Элемент управления {pb.GetType()}, не может отобразить тип значения {Value!.GetType()}"),
			};

		public partial class ValueChangedUINotifer : AutoDisposableUniversal
		{
			private MTSafeContainerBase<T>? __changedNotifer = null;

			private MTSafeContainerBase<T>? _ChangedNotifer
			{
				[MethodImpl(MethodImplOptions.Synchronized)]
				get => __changedNotifer;

				[MethodImpl(MethodImplOptions.Synchronized)]
				set
				{
					if (__changedNotifer != null) __changedNotifer.AfterValueChanged -= _VCN_OnAfterValueChanged!;

					__changedNotifer = value;
					if (__changedNotifer != null) __changedNotifer.AfterValueChanged += _VCN_OnAfterValueChanged!;
				}
			}

			public readonly Control control;
			public readonly Action<T?> OnValueChangedCallBack;//{ get; private set; } = null;

			protected internal ValueChangedUINotifer(MTSafeContainerBase<T> MTSC, Control ValueDisplayControl, Action<T?> cbValueChangedCallBack) : base()
			{
				_ChangedNotifer = MTSC;
				control = ValueDisplayControl;
				OnValueChangedCallBack = cbValueChangedCallBack;

				// Отключаем слежение за изменением значения для этого элемента управления, и освобождаем ресурсы
				control.HandleDestroyed += (_, _) => Dispose();
				RegisterDisposeCallback(Destroy);
			}

			/// <summary> IDisposable</summary>
			private void Destroy()
			{
				_ChangedNotifer = null;
				//control = null;
				//OnValueChangedCallBack = null;
			}
			/// <summary>Обновляем показания в UI</summary>
			private void _VCN_OnAfterValueChanged(object sender, ValueChangedEventArgs e)
			{
				if (null == OnValueChangedCallBack) return;
				control?.e_runInUIThread(() => OnValueChangedCallBack?.Invoke(e.NewValue!));
			}

			public MTSafeContainerBase<T> ChangedNotifer { get => ChangedNotifer; }
		}
		#endregion



	}


	namespace MessageBoxWithCheckbox
	{

		namespace WinAPI_Internals
		{
			internal enum CbtHookAction
			{
				HCBT_MOVESIZE,
				HCBT_MINMAX,
				HCBT_QS,
				HCBT_CREATEWND,
				HCBT_DESTROYWND,
				HCBT_ACTIVATE,
				HCBT_CLICKSKIPPED,
				HCBT_KEYSKIPPED,
				HCBT_SYSCOMMAND,
				HCBT_SETFOCUS
			}
			internal enum HookType
			{
				WH_JOURNALRECORD,
				WH_JOURNALPLAYBACK,
				WH_KEYBOARD,
				WH_GETMESSAGE,
				WH_CALLWNDPROC,
				WH_CBT,
				WH_SYSMSGFILTER,
				WH_MOUSE,
				WH_HARDWARE,
				WH_DEBUG,
				WH_SHELL,
				WH_FOREGROUNDIDLE,
				WH_CALLWNDPROCRET,
				WH_KEYBOARD_LL,
				WH_MOUSE_LL
			}

			internal class CbtEventArgs : EventArgs
			{
				public IntPtr Handle;
				public string Title;
				public string ClassName;
				public bool IsDialogWindow;
				public CbtEventArgs(IntPtr hwnd, string title, string className, bool isDialog) : base()
				{
					Handle = hwnd;
					Title = title;
					ClassName = className;
					IsDialogWindow = isDialog;
				}
			}

			internal class HookEventArgs : EventArgs
			{
				public int HookCode;
				public IntPtr wParam;
				public IntPtr lParam;
				public HookEventArgs(int code, IntPtr wp, IntPtr lp) : base()
				{
					HookCode = code;
					wParam = wp;
					lParam = lp;
				}
			}

			internal class LocalWindowsHook : uom.AutoDisposableUniversal
			{
				public delegate int HookProc(int code, IntPtr wParam, IntPtr lParam);
				public delegate void HookEventHandler(object sender, HookEventArgs e);

				protected IntPtr _hhook = IntPtr.Zero;
				protected HookProc _filterFunc;
				protected HookType _hookType;
				public event HookEventHandler HookInvoked = delegate { };

				protected void OnHookInvoked(HookEventArgs e) => HookInvoked?.Invoke(this, e);

				private LocalWindowsHook(HookProc? func) : base()
				{
					_filterFunc = func ?? CoreHookProc;
					this.RegisterDisposeCallback(() => Uninstall(), false);
				}
				public LocalWindowsHook(HookType hook) : this(null)
				{
					_hookType = hook;
					//_filterFunc = CoreHookProc;
				}

				public LocalWindowsHook(HookType hook, HookProc func) : this(func)
				{
					_hookType = hook;
					//_filterFunc = func;
				}

				protected int CoreHookProc(int code, IntPtr wParam, IntPtr lParam)
				{
					if (code < 0) return CallNextHookEx(_hhook, code, wParam, lParam);
					HookEventArgs hookEventArgs = new(code, wParam, lParam);
					OnHookInvoked(hookEventArgs);
					return CallNextHookEx(_hhook, code, wParam, lParam);
				}

				public void Install()
				{
#pragma warning disable CS0618 // Type or member is obsolete
					#region This is Does Not Work!
					//m_hhook = SetWindowsHookEx(m_hookType, m_filterFunc, IntPtr.Zero, System.Threading.Thread.CurrentThread.ManagedThreadId);
					#endregion
					//int iThread = AppDomain.GetCurrentThreadId();
					int iThread = GetCurrentThreadId();
					_hhook = SetWindowsHookEx(_hookType, _filterFunc, IntPtr.Zero, iThread);
#pragma warning restore CS0618 // Type or member is obsolete

				}

				public void Uninstall()
				{
					if (_hhook.e_IsValid()) UnhookWindowsHookEx(_hhook); _hhook = IntPtr.Zero;
				}

				[DllImport("Kernel32.dll")]
				static extern int GetCurrentThreadId();

				[DllImport("user32.dll")]
				protected static extern IntPtr SetWindowsHookEx(HookType code, HookProc func, IntPtr hInstance, int threadID);

				[DllImport("user32.dll")]
				protected static extern int UnhookWindowsHookEx(IntPtr hhook);

				[DllImport("user32.dll")]
				protected static extern int CallNextHookEx(IntPtr hhook, int code, IntPtr wParam, IntPtr lParam);
			}

			internal class LocalCbtHook : LocalWindowsHook
			{
				public delegate void CbtEventHandler(object sender, CbtEventArgs e);
				protected IntPtr _hwnd = IntPtr.Zero;
				protected string _title = "";
				protected string _class = "";
				protected bool _isDialog = false;
				public event CbtEventHandler WindowCreated = delegate { };
				public event CbtEventHandler WindowDestroyed = delegate { };
				public event CbtEventHandler WindowActivated = delegate { };

				public LocalCbtHook() : base(HookType.WH_CBT) { base.HookInvoked += CbtHookInvoked; }

				public LocalCbtHook(HookProc func) : base(HookType.WH_CBT, func) { base.HookInvoked += CbtHookInvoked; }

				private void CbtHookInvoked(object sender, HookEventArgs e)
				{
					CbtHookAction hookCode = (CbtHookAction)e.HookCode;
					IntPtr wParam = e.wParam;
					IntPtr lParam = e.lParam;
					switch (hookCode)
					{
						case CbtHookAction.HCBT_CREATEWND:
							HandleCreateWndEvent(wParam, lParam);
							break;
						case CbtHookAction.HCBT_DESTROYWND:
							HandleDestroyWndEvent(wParam, lParam);
							break;
						case CbtHookAction.HCBT_ACTIVATE:
							HandleActivateEvent(wParam, lParam);
							break;
					}
				}

				private void HandleCreateWndEvent(IntPtr wParam, IntPtr lParam)
				{
					UpdateWindowData(wParam);
					OnWindowCreated();
				}

				private void HandleDestroyWndEvent(IntPtr wParam, IntPtr lParam)
				{
					UpdateWindowData(wParam);
					OnWindowDestroyed();
				}

				private void HandleActivateEvent(IntPtr wParam, IntPtr lParam)
				{
					UpdateWindowData(wParam);
					OnWindowActivated();
				}

				private void UpdateWindowData(IntPtr wParam)
				{
					_hwnd = wParam;
					_class = uom.WinAPI.Windows.GetClassName(_hwnd);
					_title = uom.WinAPI.Windows.GetWindowText(_hwnd);
					_isDialog = _class == "#32770";
				}

				protected virtual void OnWindowCreated() => WindowCreated?.Invoke(this, PrepareEventData());

				protected virtual void OnWindowDestroyed() => WindowDestroyed?.Invoke(this, PrepareEventData());

				protected virtual void OnWindowActivated() => WindowActivated?.Invoke(this, PrepareEventData());

				private CbtEventArgs PrepareEventData() => new(_hwnd, _title, _class, _isDialog);

			}
		}

		internal class MessageBox : AutoDisposable1T<WinAPI_Internals.LocalCbtHook>
		{
			protected WinAPI_Internals.LocalCbtHook _apiHook;
			protected IntPtr _hwndDialogWindow = IntPtr.Zero;
			protected IntPtr _hwndCheckBox = IntPtr.Zero;
			protected bool _bInit = false;
			protected bool _dialogCheckBoxValue = false;
			protected string? _checkBoxText;

			public MessageBox() : base()
			{
				_apiHook = new WinAPI_Internals.LocalCbtHook();
				_apiHook.WindowCreated += OnWndCreated;
				_apiHook.WindowDestroyed += OnWndDestroyed;
				_apiHook.WindowActivated += OnWndActivated;

				RegisterDisposableObject(_apiHook, false);
			}

			public static void ClearLastUserAnswer(string dialogID)
			{
				try { dialogID.e_DeleteSettings(); }
				catch
				{
					// No processing needed...the convert might throw an exception,
					// but if so we proceed as if the value was false.
				}
			}

			public const string DEFAULT_CHECKBOX_TEXT = "Don't ask me this again";

			private DialogResult Show(
			string dialogID,
			string text,
			string title = "",
			string checkBoxText = DEFAULT_CHECKBOX_TEXT,
			MessageBoxButtons buttons = MessageBoxButtons.OK,
			MessageBoxIcon icon = MessageBoxIcon.Information,
			MessageBoxDefaultButton defbtn = MessageBoxDefaultButton.Button1)
			{
				//_ = keyDialogStateStorage ?? throw new ArgumentNullException(nameof(keyDialogStateStorage));
				if (string.IsNullOrWhiteSpace(dialogID)) throw new ArgumentNullException(nameof(dialogID));

				if (string.IsNullOrWhiteSpace(checkBoxText)) checkBoxText = DEFAULT_CHECKBOX_TEXT;
				if (string.IsNullOrWhiteSpace(title)) title = Application.ProductName;

				try
				{
					const int VALUE_INVALID = -1;
					int? regOldCheckBoxValue = dialogID.e_GetSettings_int(VALUE_INVALID, true);

					if (regOldCheckBoxValue.HasValue
						&& regOldCheckBoxValue.Value != VALUE_INVALID
						&& System.Enum.IsDefined(typeof(DialogResult), regOldCheckBoxValue.Value))
					{
						//Registry contains some old value & This is valid DialogResult enum
						DialogResult drReg = (DialogResult)regOldCheckBoxValue;
						return drReg;
					}
				}
				catch
				{
					// No processing needed...the convert might throw an exception,
					// but if so we proceed as if the value was false.
				}

				_checkBoxText = checkBoxText;
				_apiHook.Install();
				try
				{
					DialogResult dr = System.Windows.Forms.MessageBox.Show(text, title, buttons, icon, defbtn);
					//Save User Answer to registry
					if (_dialogCheckBoxValue) uom.AppTools.AppSettings.Save<int>(dialogID, (int)dr);

					return dr;
				}
				finally
				{
					_apiHook.Uninstall();
				}
			}

			/*

			public DialogResult Show(
				string dialogID,
				string text,
				string title = "",
				string checkBoxText = DEFAULT_CHECKBOX_TEXT,
				MessageBoxButtons buttons = MessageBoxButtons.OK,
				MessageBoxIcon icon = MessageBoxIcon.Information,
				MessageBoxDefaultButton defbtn = MessageBoxDefaultButton.Button1)
				=> Show(
					Application.UserAppDataRegistry,
					dialogID,
					text,
					title,
					checkBoxText,
					buttons,
					icon,
					defbtn);
			 */

			public static DialogResult ShowDialog(
				string dialogID,
				string text,
				string title = "",
				string checkBoxText = DEFAULT_CHECKBOX_TEXT,
				MessageBoxButtons buttons = MessageBoxButtons.OK,
				MessageBoxIcon icon = MessageBoxIcon.Information,
				MessageBoxDefaultButton defbtn = MessageBoxDefaultButton.Button1)
			{
				using MessageBox dlg = new();
				return dlg.Show(dialogID, text, title, checkBoxText, buttons, icon, defbtn);
			}


			private void OnWndCreated(object sender, WinAPI_Internals.CbtEventArgs e)
			{
				if (e.IsDialogWindow)
				{
					_bInit = false;
					_hwndDialogWindow = e.Handle;
				}
			}

			private void OnWndDestroyed(object sender, WinAPI_Internals.CbtEventArgs e)
			{
				if (e.Handle == _hwndDialogWindow)
				{
					_bInit = false;
					_hwndDialogWindow = IntPtr.Zero;
					if (BST_CHECKED == (int)uom.WinAPI.Windows.SendMessage(_hwndCheckBox, BM_GETCHECK, IntPtr.Zero, IntPtr.Zero))
						_dialogCheckBoxValue = true;
				}
			}

			private void OnWndActivated(object sender, WinAPI_Internals.CbtEventArgs e)
			{
				if (_hwndDialogWindow != e.Handle || _bInit) return;

				_bInit = true;
				// Get the current font, either from the static text window or the message box itself
				IntPtr hwndText = uom.WinAPI.Windows.GetDlgItem(_hwndDialogWindow, 0xFFFF);
				IntPtr hFont = uom.WinAPI.Windows.SendMessage(
					hwndText.e_IsValid() ? hwndText : _hwndDialogWindow,
					WinAPI.Windows.WindowMessages.WM_GETFONT, IntPtr.Zero, IntPtr.Zero);

				Font fCur = Font.FromHfont(hFont);

				// Get the x coordinate for the check box.  Align it with the icon if possible, or one character height in
				Point ptCheckBoxLocation = new();
				IntPtr hwndIcon = uom.WinAPI.Windows.GetDlgItem(_hwndDialogWindow, 0x0014);
				if (hwndIcon != IntPtr.Zero)
				{
					Rectangle rcIcon = uom.WinAPI.Windows.GetWindowRect(hwndIcon);
					Point pt = rcIcon.Location;
					uom.WinAPI.Windows.ScreenToClient(_hwndDialogWindow, ref pt);
					ptCheckBoxLocation.X = pt.X + (rcIcon.Width / 2) - 4;
				}
				else
					ptCheckBoxLocation.X = (int)fCur.GetHeight();

				// Get the y coordinate for the check box, which is the bottom of the
				// current message box client area
				System.Drawing.Rectangle rcLicent = uom.WinAPI.Windows.GetClientRect(_hwndDialogWindow);
				int fontHeight = (int)fCur.GetHeight();
				ptCheckBoxLocation.Y = rcLicent.Height + fontHeight;


				// Resize the message box with room for the check box
				Rectangle rc = uom.WinAPI.Windows.GetWindowRect(_hwndDialogWindow);
				uom.WinAPI.Windows.MoveWindow(_hwndDialogWindow,
					rc.Left,
					rc.Top,
					rc.Width,
					rc.Height + (fontHeight * 3),
					true);


				_hwndCheckBox = uom.WinAPI.Windows.CreateWindowEx(
					0,
					"button",
					_checkBoxText!,

					WinAPI.Windows.WindowStyles.BS_AUTOCHECKBOX |
					WinAPI.Windows.WindowStyles.WS_CHILD |
					WinAPI.Windows.WindowStyles.WS_VISIBLE |
					WinAPI.Windows.WindowStyles.WS_TABSTOP,

					ptCheckBoxLocation.X,
					ptCheckBoxLocation.Y,
					rc.Width - ptCheckBoxLocation.X,
					fontHeight,
					_hwndDialogWindow,
					IntPtr.Zero, IntPtr.Zero, IntPtr.Zero);


				uom.WinAPI.Windows.SendMessage(_hwndCheckBox, WM_SETFONT, hFont, new IntPtr(1));
			}

			#region Win32 Imports
			private const int WM_SETFONT = 0x00000030;
			//private const int WM_GETFONT = 0x00000031;
			private const int BM_GETCHECK = 0x00F0;
			private const int BST_CHECKED = 0x0001;

			#endregion
		}
	}



#pragma warning disable IDE1006 // Naming Styles

	namespace Extensions
	{



		[EditorBrowsable(EditorBrowsableState.Never)]
		internal static class Extensions_StringAndFormat_Win
		{


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static string ToString_WxH(this Point PT) => $"{PT.X}x{PT.Y}";


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static string ToString_WxH(this PointF PT) => $"{PT.X}x{PT.Y}";


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static string ToString_WxH(this PointF PT, int iRound) => $"{PT.X.e_Round(iRound)}x{PT.Y.e_Round(iRound)}";


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static string ToString_WxH(this Size PT) => $"{PT.Width}x{PT.Height}";


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static string ToString_WxH(this SizeF PT) => $"{PT.Width}x{PT.Height}";


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static string ToString_WxH(this SizeF PT, int iRound) => $"{PT.Width.e_Round(iRound)}x{PT.Height.e_Round(iRound)}";

			/// <summary>Ограничивает длинну строки по заданному количеству символов</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static (string Result, bool StringWasTrimmed) e_LimitLenght(this string SourceText, int MaxLenght = WinAPI.IO.MAX_PATH)
			{
				if (SourceText.e_IsNOTNullOrWhiteSpace() && (SourceText.Length > MaxLenght))
					return (SourceText.Substring(0, MaxLenght), true);

				return (SourceText, false);
			}


		}


		[EditorBrowsable(EditorBrowsableState.Never)]
		internal static class Extensions_Arrays_Win
		{

			#region PInvoke, для CRT функции memcmp()	 

			/// <summary>PInvoke memcmp() из msvcrt.dll
			/// Теоретически, это должен быть самый быстрый способ, но выяснилось, что это не всегда так: 
			/// накладные расходы на взаимодействие с платформой съедают довольно большое время.</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static bool e_CompareArrays_MemCmp(this byte[] ArrayA, byte[] ArrayB, int bytesToCompare)
				=> uom.WinAPI.Memory.memcmp(ArrayA, ArrayB, bytesToCompare) == 0;

			/// <inheritdoc cref="e_CompareArrays_MemCmp" />
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static bool e_CompareArrays_MemCmp(this byte[] ArrayA, byte[] ArrayB)
				=> ArrayA.e_CompareArrays_MemCmp(ArrayB, ArrayA.Length);



#if NET6_0_OR_GREATER
			/// <summary>Проверяет заканчивается ли массив байт на указанные байты</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static bool e_EndsWith(this byte[] A, byte[] B)
			{
				// Validate buffers are the same length. This also ensures that the count does not exceed the length of either buffer.  
				int elementsToCompare = B.Length;
				if (A.Length < elementsToCompare) return false;
				if (A.Length == 0 && elementsToCompare == 0) return true;

				A = A.TakeLast(elementsToCompare).ToArray();
				bool bEq = A.e_CompareArrays_MemCmp(B);
				return bEq;
			}


			/// <inheritdoc cref="e_EndsWith" />
			/// <param name="A"></param>
			/// <param name="abFinishHex">Строка байт вида 0D-0A-2B-43-53-51-3A</param>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static bool e_EndsWith(this byte[] A, string abFinishHex)
			{
				var abFinish = abFinishHex.e_HexStringToBytes();
				bool bEq = A.e_EndsWith(abFinish);
				return bEq;
			}
#endif

			/// <summary>Проверяет начинается ли массив байт на указанные байты</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static bool e_StartsWith(this byte[] A, byte[] B)
			{

				// Validate buffers are the same length. This also ensures that the count does not exceed the length of either buffer.  
				int iElementsToCompare = B.Length;
				if (A.Length < iElementsToCompare)
					return false;
				if (A.Length == 0 && iElementsToCompare == 0)
					return true;

				A = A.Take(iElementsToCompare).ToArray();
				bool bEq = A.e_CompareArrays_MemCmp(B);
				return bEq;
			}


			/// <inheritdoc cref="e_StartsWith" />
			/// <param name="A"></param>
			/// <param name="abFinishHex">Строка байт вида 0D-0A-2B-43-53-51-3A</param>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static bool e_StartsWith(this byte[] A, string abFinishHex)
			{
				var abFinish = abFinishHex.e_HexStringToBytes();
				return A.e_StartsWith(abFinish);
			}


			/// <summary>Проверяет равна ли строка двоичному образцу</summary>
			/// <param name="sTargetHexString">Строка байт вида 0D-0A-2B-43-53-51-3A</param>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static bool e_EqualToHex(this byte[] A, string sTargetHexString)
			{
				var abTarge = sTargetHexString.e_HexStringToBytes();
				if (A.Length != abTarge.Length) return false;
				return A.e_StartsWith(abTarge);
			}



			// aa 12 30 30 30 30 00 ee                           Є.0000.о         
			/// <summary>
			/// 
			/// </summary>
			/// <param name="A"></param>
			/// <param name="sTemplateStringHex">00-00-XX-01-aa</param>
			/// <returns></returns>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static byte[] e_SearchTemplate(this byte[] A, string sTemplateStringHex)
			{
				char C_SEP = constants.SystemDefaultHexByteSeparator; // Получаем символ-разделитель
				sTemplateStringHex = sTemplateStringHex.e_NormalizeHexString(null, C_SEP);
				string sSourceStringHex = A.e_ToStringHex();
				var aSourceHexBytes = sSourceStringHex.Split(C_SEP);
				var aTemplateHexBytes = sTemplateStringHex.Split(C_SEP);
				if (aSourceHexBytes.Length < aTemplateHexBytes.Length)
					return Array.Empty<byte>();
				int iEnd = aSourceHexBytes.Length - aTemplateHexBytes.Length;
				for (int iSourceCharPos = 0, loopTo = iEnd; iSourceCharPos <= loopTo; iSourceCharPos++)
				{
					string cSourceChar = aSourceHexBytes[iSourceCharPos];
					if ((cSourceChar ?? "") == (aTemplateHexBytes[0] ?? ""))
					{
						// Проверяем все оставшиеся символы на вхождение
						int iTemplateBytesCount = aTemplateHexBytes.Length;
						int iFound = 0;
						for (int iSubScanChar = 0; iSubScanChar <= iTemplateBytesCount; iSubScanChar++)
						{
							int iFullCharIndex = iSourceCharPos + iSubScanChar;
							string sTemplateCompareChar = aTemplateHexBytes[iSubScanChar];
							string sSourceCompareChar = aSourceHexBytes[iFullCharIndex];
							if (sTemplateCompareChar == "XX" || sTemplateCompareChar == "X")// Шаблонный символ - пропускаем
								iFound++;
							else if ((sTemplateCompareChar ?? "") != (sSourceCompareChar ?? ""))// Сравниваем
								break;
							else
								iFound++;
						}

						if (iFound == iTemplateBytesCount) // найдено!
						{
							var abFound = A.e_TakeFrom(iSourceCharPos);
							abFound = abFound.Take(iTemplateBytesCount).ToArray();
							return abFound;
						}
					}
				}

				return Array.Empty<byte>();
			}


		}


		[EditorBrowsable(EditorBrowsableState.Never)]
		internal static class Extensions_Registry_Win
		{




			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static RegistryKey e_HiveToKey(this RegistryHive Hive)
				=> Hive switch
				{
					RegistryHive.ClassesRoot => Registry.ClassesRoot,
					RegistryHive.CurrentConfig => Registry.CurrentConfig,
					RegistryHive.CurrentUser => Registry.CurrentUser,
#if NET6_0_WINDOWS
						case RegistryHive.DynData=> Registry.DynData,
#endif
					RegistryHive.LocalMachine => Registry.LocalMachine,
					RegistryHive.PerformanceData => Registry.PerformanceData,
					RegistryHive.Users => Registry.Users,
					_ => throw new ArgumentOutOfRangeException(nameof(Hive))
				};


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static RegistryKey e_OpenBaseKey(this RegistryHive Hive, RegistryView View = RegistryView.Default) => RegistryKey.OpenBaseKey(Hive, View);





			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static (Boolean ValueFound, RegistryValueKind Kind, object? Value)
			e_GetValueExt(
				this RegistryKey hRegKey,
				string? valueName,
				object? defaultValue,
				RegistryValueOptions rvo = RegistryValueOptions.DoNotExpandEnvironmentNames)
			{
				valueName ??= "";
				try
				{
					object? objValue = hRegKey?.GetValue(valueName, null, rvo);
					_ = objValue ?? throw new Exception($"RegKey.GetValue('{valueName}') Failed! RegKey = '{hRegKey}'!");
					return (true, (hRegKey?.GetValueKind(valueName) ?? RegistryValueKind.Unknown), objValue);
				}
				catch { return (false, RegistryValueKind.Unknown, defaultValue); }
			}


			[DebuggerNonUserCode, DebuggerStepThrough]
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static (Boolean ValueFound, RegistryValueKind Kind, T? Value)
				e_GetValueT<T>(this RegistryKey hRegKey, string ValueName, T? defaultValue)
			{
				try
				{
					var (ValueFound, Kind, Value) =
						hRegKey.e_GetValueExt(
							ValueName,
							defaultValue,
							(typeof(T) == typeof(string)) ? RegistryValueOptions.DoNotExpandEnvironmentNames : RegistryValueOptions.None);

					if (ValueFound && (null != Value)) return (true, Kind, (T)Value);
				}
				catch { }//ignore any errors
				return (false, RegistryValueKind.Unknown, defaultValue);
			}


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static string? e_GetValue_String(this RegistryKey? hRegKey, string ValueName, string? DefaultValue = null)
				=> hRegKey?.e_GetValueT<string>(ValueName, DefaultValue).Value;

			public static string e_GetValue_StringOrEmpty(this RegistryKey? hRegKey, string ValueName, string? DefaultValue = null)
				=> hRegKey?.e_GetValue_String(ValueName, DefaultValue)
				?? string.Empty;


			public enum RegOptions : int
			{
				None = 0,
				KEY_WOW64_64KEY = 0x100,
				KEY_WOW64_32KEY = 0x200,

				ReadKey = 131097,
				WriteKey = 131078
			}

			[DllImport(WinAPI.core.WINDLL_ADVAPI32, SetLastError = true, ExactSpelling = false, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			internal static extern uom.WinAPI.Errors.Win32Errors RegOpenKeyEx(
				[In] IntPtr hKey,
				[In, Optional, MarshalAs(UnmanagedType.LPTStr)] string? subKey,
				[In] int ulOptions,
				[In] RegOptions samDesired,
				[Out] out IntPtr hkResult);

			[DllImport(WinAPI.core.WINDLL_ADVAPI32, SetLastError = true, ExactSpelling = false, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			internal static extern uom.WinAPI.Errors.Win32Errors RegCloseKey([In] IntPtr hKey);

			[DllImport(WinAPI.core.WINDLL_ADVAPI32, SetLastError = true, ExactSpelling = false, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			internal static extern uom.WinAPI.Errors.Win32Errors RegRenameKey(
				this IntPtr hKey,
				[MarshalAs(UnmanagedType.LPTStr)] string? lpSubKeyName,
				[MarshalAs(UnmanagedType.LPTStr)] string lpNewKeyName);

			[DllImport(WinAPI.core.WINDLL_ADVAPI32, SetLastError = true, ExactSpelling = false, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			internal static extern uom.WinAPI.Errors.Win32Errors RegCopyTree(
				this IntPtr hKeySrc,
				[In, Optional, MarshalAs(UnmanagedType.LPTStr)] string? lpSubKey,
				[In] IntPtr hKeyDest);

			[Flags]
			internal enum SAVE_REG_FLAGS : int
			{
				//The key or hive is saved in standard format.The standard format is the only format supported by Windows 2000.
				REG_STANDARD_FORMAT = 1,

				//The key or hive is saved in the latest format.
				//The latest format is supported starting with Windows XP.After the key or hive is saved in this format, it cannot be loaded on an earlier system.
				REG_LATEST_FORMAT = 2,

				//The hive is saved with no compression, for faster save operations.
				//The hKey parameter must specify the root of a hive under HKEY_LOCAL_MACHINE or HKEY_USERS. For example, HKLM\SOFTWARE is the root of a hive.
				REG_NO_COMPRESSION = 4
			}

			/// <summary>
			/// Unlike RegSaveKey, this function does not support the HKEY_CLASSES_ROOT predefined key.
			/// If hKey represents a key on a remote computer, the path described by lpFile is relative to the remote computer.
			/// The RegSaveKeyEx function saves only nonvolatile keys.
			/// It does not save volatile keys.
			/// A key is made volatile or nonvolatile at its creation; see RegCreateKeyEx.           
			/// You can use the file created by RegSaveKeyEx in subsequent calls to the RegLoadKey, RegReplaceKey, or RegRestoreKey function.
			/// If RegSaveKeyEx fails partway through its operation, the file will be corrupt and subsequent calls to RegLoadKey, RegReplaceKey, or RegRestoreKey for the file will fail.
			/// Using RegSaveKeyEx together with RegRestoreKey to copy subtrees in the registry is not recommended. 
			/// This method does not trigger notifications and can invalidate handles used by other applications. 
			/// Instead, use the SHCopyKey function or the RegCopyTree function.
			/// The calling process must have the SE_BACKUP_NAME privilege enabled.For more information, see Running with Special Privileges.
			/// 
			/// Note
			/// The winreg.h header defines RegSaveKeyEx as an alias which automatically selects the ANSI or Unicode version of this function based on the definition of the UNICODE preprocessor constant. Mixing usage of the encoding-neutral alias with code that not encoding-neutral can lead to mismatches that result in compilation or runtime errors. For more information, see Conventions for Function Prototypes.
			/// </summary>
			[DllImport(WinAPI.core.WINDLL_ADVAPI32, SetLastError = true, ExactSpelling = false, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			internal static extern uom.WinAPI.Errors.Win32Errors RegSaveKeyEx(
				this IntPtr hKey,
				[In, MarshalAs(UnmanagedType.LPTStr)] string lpFile,
				[In, Optional] IntPtr lpSecurityAttributes,
				[In] SAVE_REG_FLAGS Flags);


			/// <summary>Work ONLY on local registry, dont work on remote connected registry!</summary>
			public static void e_RenameSubKey(this RegistryKey KeyParent, string Name, string NewName)
			{
				//RegistryKey _keyHKLM = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Default);
				//KeyParent = _keyHKLM?.OpenSubKey("_uom_Test", true)!;
				if (NewName.e_IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(NewName));
				_ = RegRenameKey(
					KeyParent.Handle.DangerousGetHandle(),
					Name,
					NewName);

				KeyParent.Flush();
			}


			public static void e_RenameSubKeyViaCopy(this RegistryKey KeyParent, string Name, string newName)
			{
				if (string.IsNullOrWhiteSpace(newName)) throw new ArgumentNullException(nameof(newName));

				newName = newName.Trim();
				Name = Name.Trim();

				if (newName == Name) return;//Already has this name
				if (newName.e_IsDifferOlyInCase(Name)) throw new ArgumentException("New key name differ only in case!", nameof(newName));

				KeyParent.e_CopySubkey(Name, newName, false);
				KeyParent.DeleteSubKeyTree(Name, false);
				KeyParent.Flush();
			}


			public static void e_CopySubkey(this RegistryKey KeyParent, string subKeyName, string newSubKeyName, bool owerwriteOnExist)
			{
				if (string.IsNullOrWhiteSpace(subKeyName)) throw new ArgumentNullException(nameof(subKeyName));
				if (string.IsNullOrWhiteSpace(newSubKeyName)) throw new ArgumentNullException(nameof(newSubKeyName));

				subKeyName = subKeyName.Trim();
				newSubKeyName = newSubKeyName.Trim();

				if (newSubKeyName == subKeyName) throw new ArgumentException($"{nameof(newSubKeyName)} = {nameof(subKeyName)}!");
				if (subKeyName.e_IsDifferOlyInCase(newSubKeyName))
					throw new ArgumentException($"The {nameof(newSubKeyName)} and {nameof(subKeyName)} differ only in case!", nameof(newSubKeyName));

				RegistryKey? keyOld = KeyParent.OpenSubKey(subKeyName, false);
				if (keyOld == null) throw new Exception($"Failed to open key '{KeyParent}\\{subKeyName}'!");

				if (KeyParent.GetSubKeyNames().Contains(newSubKeyName))
				{
					if (!owerwriteOnExist) throw new Exception($"Key name '{newSubKeyName}' already exist!");

					KeyParent.DeleteSubKeyTree(newSubKeyName, false);
				}
				using RegistryKey keyNew = KeyParent.CreateSubKey(newSubKeyName, true);
				keyOld.e_CopyTo(keyNew);
			}


			public static void e_CopyTo(this RegistryKey keyOld, RegistryKey keyNew)
			{
				//Copy All Values
				var aValueNames = keyOld.GetValueNames();
				foreach (var valueName in aValueNames)
				{
					var kind = keyOld.GetValueKind(valueName);
					RegistryValueOptions rvo = (kind == RegistryValueKind.ExpandString)
						? RegistryValueOptions.None
						: RegistryValueOptions.DoNotExpandEnvironmentNames;

					object? val = keyOld.GetValue(valueName, null, rvo);
					if (val != null)
						keyNew.SetValue(valueName, val!, kind);
				}

				if (!aValueNames.Contains(""))//Default value not exist
				{
					if (keyNew.GetValueNames().Contains("")) keyNew.DeleteValue("", false);
				}
				keyNew.Flush();

				//Copy Sub Keys
				var aKeyNames = keyOld.GetSubKeyNames();
				foreach (var keyName in aKeyNames)
				{
					using RegistryKey? keyChildOld = keyOld.OpenSubKey(keyName, false);
					using RegistryKey keyChildNew = keyNew.CreateSubKey(keyName, true);
					keyChildOld?.e_CopyTo(keyChildNew);
				}
				keyNew.Flush();
			}


			public static void e_Export(this RegistryKey keyOld, string path)
			{
				WinAPI.Security.PRIVELEGE_NAMES.SeBackupPrivilege.e_AdjustProcessPrivilegeAndCloseToken();
				var result = RegSaveKeyEx(
					keyOld.Handle.DangerousGetHandle(),
					path,
					IntPtr.Zero,
					SAVE_REG_FLAGS.REG_LATEST_FORMAT);

				result.e_ThrowIfError();
			}



			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static Int32? e_GetValue_Int32(this RegistryKey? hRegKey, string ValueName, Int32 DefaultValue = 0)
				=> hRegKey?.e_GetValueT<Int32>(ValueName, DefaultValue).Value;


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static bool? e_GetValue_Bool(this RegistryKey? hRegKey, string ValueName, bool DefaultValue = false)
				=> (1 == e_GetValue_Int32(hRegKey, ValueName, DefaultValue ? 1 : 0));


			private static void e_SetValueObject(this RegistryKey hRegKey, string name, object? value, RegistryValueKind kind)
			{
				if (null == value)
					hRegKey.DeleteValue(name, false);
				else
					hRegKey.SetValue(name, value, kind);
			}




			#region Set Value


			/// <summary>if value == null, value will be deleted!</summary>
			public static void e_SetValue<T>(this RegistryKey hRegKey, string name, T? value) where T : struct
			{
				if (null == value || !value.HasValue)
				{
					hRegKey.e_SetValueObject(name, (object?)null, RegistryValueKind.None);//Delete Value
					return;
				}

				RegistryValueKind kind = RegistryValueKind.Unknown;
				object valueToWrite;

				//sbyte, byte, short, ushort, int, uint, long, ulong, char, float, double, decimal, or bool
				switch (value)
				{
					case Int32 i32: valueToWrite = i32; kind = RegistryValueKind.DWord; break;
					case Int64 i64: valueToWrite = i64; kind = RegistryValueKind.QWord; break;
					case bool b: valueToWrite = (b ? 1 : 0); kind = RegistryValueKind.DWord; break;
					case Enum e: valueToWrite = e; kind = RegistryValueKind.DWord; break;
					case byte[] data: valueToWrite = data; kind = RegistryValueKind.Binary; break;
					case byte data: valueToWrite = data; kind = RegistryValueKind.DWord; break;
					case sbyte data: valueToWrite = data; kind = RegistryValueKind.DWord; break;
					case short data: valueToWrite = data; kind = RegistryValueKind.DWord; break;
					case ushort data: valueToWrite = data; kind = RegistryValueKind.DWord; break;
					case uint data: valueToWrite = data; kind = RegistryValueKind.DWord; break;
					case ulong data: valueToWrite = data; kind = RegistryValueKind.QWord; break;
					case char data: valueToWrite = data; kind = RegistryValueKind.String; break;

					// float, double, decimal
					default: throw new ArgumentOutOfRangeException($"Unknown type of '{nameof(value)}' = '{typeof(T)}'");
				}
				hRegKey.e_SetValueObject(name, valueToWrite, kind);
			}

			/// <summary>if value == null, value will be deleted!</summary>
			public static void e_SetValueString(this RegistryKey hRegKey, string name, string? value)
			{
				if (null == value)
				{
					hRegKey.e_SetValueObject(name, (object?)null, RegistryValueKind.None);//Delete Value
					return;
				}
				hRegKey.SetValue(name, value!, RegistryValueKind.MultiString);
			}

			public static void e_SetValueStrings(this RegistryKey hRegKey, string name, string[]? value)
			{
				if (null == value)
				{
					hRegKey.e_SetValueObject(name, (object?)null, RegistryValueKind.None);//Delete Value
					return;
				}
				hRegKey.SetValue(name, value!, RegistryValueKind.String);
			}


			#endregion


			/*
		   [MethodImpl(MethodImplOptions.AggressiveInlining)]
		   public static void e_SaveSettings<T>(this T? val, string name) where T:unmanaged				=> uom.AppTools.AppSettings.Save<T>(name, val);

		   [MethodImpl(MethodImplOptions.AggressiveInlining)]
		   public static void e_SaveSettings(this string? val, string name) => uom.AppTools.AppSettings.Save(name, val);

		   [MethodImpl(MethodImplOptions.AggressiveInlining)]
		   public static void e_SaveSettings(this string[]? val, string name) => uom.AppTools.AppSettings.Save(name, val);
			 */




			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void e_DeleteSettings(this string name) => uom.AppTools.AppSettings.Delete(name);

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static T? e_GetSettings<T>(
				this string name,
				T? defaultValue,
				bool searchAllVersions = true,
				Version? searchVersionBelowOrEqual = null)
				=> uom.AppTools.AppSettings.Get_T<T>(name,
					defaultValue,
					searchAllVersions,
					searchVersionBelowOrEqual);

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static int e_GetSettings_int(
				this string name,
				int defaultValue = 0,
				bool searchAllVersions = true,
				Version? searchVersionBelowOrEqual = null)
				=> name.e_GetSettings<int>(defaultValue, searchAllVersions, searchVersionBelowOrEqual);

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static string? e_GetSettings_str(
				this string name,
				string? defaultValue = null,
				bool searchAllVersions = true,
				Version? searchVersionBelowOrEqual = null)
				=> name.e_GetSettings<string>(defaultValue, searchAllVersions, searchVersionBelowOrEqual);

			public static RegistryKey e_RegGetRootKey(this string rootKeyName)
				=> rootKeyName switch
				{
					"HKEY_CLASSES_ROOT" => Registry.ClassesRoot,
					"HKEY_CURRENT_USER" => Registry.CurrentUser,
					"HKEY_LOCAL_MACHINE" => Registry.LocalMachine,
					"HKEY_USERS" => Registry.Users,
					_ => throw new ArgumentOutOfRangeException(nameof(rootKeyName))
				};

			//			[ MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static RegistryKey? e_RegOpenKeyByPath(this string fullPath, bool writable)
			{
				string[] pathParts = fullPath.Split('\\');
				string rootKeyName = pathParts[0];
				RegistryKey keyRoot = rootKeyName.e_RegGetRootKey();
				fullPath = String.Join(@"\", pathParts.e_TakeFrom(1));
				return keyRoot.OpenSubKey(fullPath, writable);
			}

		}


		internal static partial class Extensions_Async_MT
		{



			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void e_RunOnDisabled(this Control ctl, Action a)
			{
				_ = a ?? throw new ArgumentNullException(nameof(a));

				bool oldEnabledStatus = ctl.Enabled;
				ctl.Enabled = false;
				try
				{
					a.Invoke();
				}
				finally
				{
					if (oldEnabledStatus) ctl.Enabled = true;
				}
			}


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void e_RunOnDisabled(this IEnumerable<Control> actls, Action a)
			{
				_ = a ?? throw new ArgumentNullException(nameof(a));

				var L = actls.Select(ctl => new { Ctl = ctl, EnabledStatus = ctl.Enabled }).ToList();

				L.ForEach(ctl => ctl.Ctl.Enabled = false);
				try
				{
					a.Invoke();
				}
				finally
				{
					L.ForEach(ctl => ctl.Ctl.Enabled = ctl.EnabledStatus);
				}
			}

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void e_Enable(this IEnumerable<Control> actls, bool e)
				=> actls.ToList().ForEach(ctl => ctl.Enabled = e);

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void e_EnableItems(this ToolStrip ts, bool e)
			{
				foreach (ToolStripItem ctl in ts.Items) ctl.Enabled = e;
			}




			/*

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static async Task e_RunOnDisabledAsync(this IEnumerable<Control>? actls, Task a)
			{
				var L = actls?.Select(ctl => new { Ctl = ctl, EnabledStatus = ctl.Enabled }).ToList();
				L?.ForEach(ctl => ctl.Ctl.Enabled = false);
				try
				{
					await a;
				}
				finally
				{
					L?.ForEach(ctl => ctl.Ctl.Enabled = ctl.EnabledStatus);
				}
			}
			*/

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static async Task e_RunOnDisabledAsync(
				this IEnumerable<Control>? actls,
				Func<Task> a,
				Form? waitCursorForm = null)
			{
				_ = a ?? throw new ArgumentNullException(nameof(a));

				if (null != waitCursorForm) waitCursorForm!.UseWaitCursor = true;
				var L = actls?.Select(ctl => new { Ctl = ctl, OldEnabledStatus = ctl.Enabled }).ToList();

				try
				{
					L?.ForEach(ctl =>
					{
						ctl.Ctl.Enabled = false;
						ctl.Ctl.Update();
					});

					await a.Invoke();
				}
				finally
				{
					L?.ForEach(ctl =>
					{
						if (ctl.OldEnabledStatus) ctl.Ctl.Enabled = true;
					});

					if (null != waitCursorForm) waitCursorForm!.UseWaitCursor = false;
				}

			}

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static async Task e_RunOnDisabledAsync(
				this Control ctl,
				Func<Task> a,
				Form? waitCursorForm = null)
				=> await ctl.e_ToArrayOf().e_RunOnDisabledAsync(a, waitCursorForm);






			/// <summary>
			/// Usually used when you need to do an action with a slight delay after exiting the current method. 
			/// For example, if some data will be ready only after exiting the control event handler processing branch
			/// </summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void e_RunDelay(this Action DelayedAction, int DelayInterval = 100)
			{
				_ = DelayedAction ?? throw new ArgumentNullException(nameof(DelayedAction));

				//Use 'System.Windows.Forms.Timer' that uses some thread with caller to raise events
				System.Windows.Forms.Timer tmrDelay = new()
				{
					Interval = DelayInterval,
					Enabled = false //do not start timer untill we finish it's setup
				};
				tmrDelay.Tick += (s, te) =>
				{
					//first stop and dispose our timer, to avoid double e_runution
					tmrDelay.Stop();
					tmrDelay.Dispose();

					//Now start action
					DelayedAction.Invoke();
				};

				//Start delay timer
				tmrDelay.Start();
			}




			/// <summary>
			/// e_runute's an async Task<T> method which has a void return value synchronously
			/// </summary>
			/// <param name="task">Task<T> method to e_runute</param>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void e_RunSync(this Task task)
			{
				Func<Task> tsk = new(() => task);
				tsk.e_RunSync();
			}

			/// <summary>
			/// e_runute's an async Task<T> method which has a void return value synchronously
			/// </summary>
			/// <param name="task">Task<T> method to e_runute</param>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void e_RunSync(this Func<Task> task)
			{
				var oldContext = SynchronizationContext.Current;
				ExclusiveSynchronizationContext synch = new();
				SynchronizationContext.SetSynchronizationContext(synch);
				synch.Post(async _ =>
				{
					try
					{
						await task();
					}
					catch (Exception e)
					{
						synch.InnerException = e;
						throw;
					}
					finally
					{
						synch.EndMessageLoop();
					}
				}, null);
				synch.BeginMessageLoop();

				SynchronizationContext.SetSynchronizationContext(oldContext);
			}

			/// <summary>
			/// e_runute's an async Task<T> method which has a T return type synchronously
			/// </summary>
			/// <typeparam name="T">Return Type</typeparam>
			/// <param name="task">Task<T> method to e_runute</param>
			/// <returns></returns>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static T? e_RunSync<T>(this Func<Task<T?>> task)
			{
				var oldContext = SynchronizationContext.Current;
				var synch = new ExclusiveSynchronizationContext();
				SynchronizationContext.SetSynchronizationContext(synch);
				T? ret = default;
				synch.Post(async _ =>
				{
					try
					{
						ret = await task.Invoke();
					}
					catch (Exception e)
					{
						synch.InnerException = e;
						throw;
					}
					finally
					{
						synch.EndMessageLoop();
					}
				}, null);
				synch.BeginMessageLoop();
				SynchronizationContext.SetSynchronizationContext(oldContext);
				return ret;
			}

			/// <summary>
			/// e_runute's an async Task<T> method which has a T return type synchronously
			/// </summary>
			/// <typeparam name="T">Return Type</typeparam>
			/// <param name="task">Task<T> method to e_runute</param>
			/// <returns></returns>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static T e_RunSync<T>(this Task<T> task)
			{
				T ret = e_RunSync(() => task!)!;
				return ret;
			}

			private class ExclusiveSynchronizationContext : SynchronizationContext
			{
				private bool done;
				public Exception? InnerException { get; set; }

				private readonly AutoResetEvent workItemsWaiting = new(false);
				private readonly Queue<Tuple<SendOrPostCallback, object?>> items = new();

				public override void Send(SendOrPostCallback d, object? state)
				{
					throw new NotSupportedException("We cannot send to our same thread");
				}

				public override void Post(SendOrPostCallback d, object? state)
				{
					lock (items)
					{
						items.Enqueue(Tuple.Create(d, state));
					}
					workItemsWaiting.Set();
				}

				public void EndMessageLoop() => Post(_ => done = true, null);

				public void BeginMessageLoop()
				{
					while (!done)
					{
						Tuple<SendOrPostCallback, object?>? task = null;
						lock (items)
						{
							if (items.Count > 0)
							{
								task = items.Dequeue();
							}
						}
						if (task != null)
						{
							task.Item1(task.Item2);
							if (InnerException != null) // the method threw an exeption
							{
								//throw new AggregateException("AsyncHelpers.Run method threw an exception.", InnerException);
								throw InnerException;
							}
						}
						else
						{
							workItemsWaiting.WaitOne();
						}
					}
				}

				public override SynchronizationContext CreateCopy()
				{
					return this;
				}
			}





			public static Task e_AsTask(this WaitHandle handle, int timeout = Timeout.Infinite)
			{
				TaskCompletionSource<object> tcs = new();
				RegisteredWaitHandle registration = ThreadPool.RegisterWaitForSingleObject(handle,
					(state, timedOut) =>
				{
					//if (state == null) throw new ArgumentNullException(nameof(state));
					var localTcs = (TaskCompletionSource<object>)state!;

					if (timedOut)
						localTcs.TrySetCanceled();
					else
#pragma warning disable CS8600, CS8625 // Possible null reference argument for parameter.
						localTcs.TrySetResult(null);
#pragma warning restore CS8600, CS8625 // Possible null reference argument for parameter.

				},
				tcs, timeout, executeOnlyOnce: true);

				tcs.Task.ContinueWith((_, state) => ((RegisteredWaitHandle)(state!)).Unregister(null), registration, TaskScheduler.Default);
				return tcs.Task;
			}

			public static Task e_WaitAsync(this WaitHandle handle, int timeout = Timeout.Infinite) => handle.e_AsTask(timeout);


		}


		[EditorBrowsable(EditorBrowsableState.Never)]
		internal static class Extensions_Controls
		{


			#region ShortcutKeys to/from string

			/// <summary>Converts Keys value to shortcut keys string like 'Ctrl+I' </summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static string e_ToShortcutKeysString(this System.Windows.Forms.Keys eKey)
				=> (string)(new KeysConverter().ConvertTo(eKey, typeof(string))!);


			/// <summary>Converts shortcut keys string to Keys value</summary>
			/// <param name="sKeys">Sample 'Ctrl+I'</param>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static System.Windows.Forms.Keys e_ToShortcutKeys(this string sKeys)
				=> (Keys)(new KeysConverter().ConvertFrom(sKeys)!);

			#endregion


			#region runInUIThread


			/// <summary>MT Safe call code in UI thread.</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void e_runInUIThread(this Control context, MethodInvoker code)
			{
				#region SAMPLE WITH RETURN VALUE:
				/*
				lstvwgrp.ListView.e_runInUIThread(delegate
				{
					result = SendMessage(lstvwgrp.ListView.Handle, ListViewMessages.LVM_SETGROUPINFO, groupId, ref group);
				});
				return result;
				 */
				#endregion

				#region SAMPLE WITHOUT RETURN VALUE:
				/*
				  lstvwgrp.ListView.e_runInUIThread(delegate
				  {
					  SendMessage(lstvwgrp.ListView.Handle, ListViewMessages.LVM_SETGROUPINFO, groupId, ref group);
				  });
				  */
				#endregion

				_ = context ?? throw new ArgumentNullException(nameof(context));
				_ = code ?? throw new ArgumentNullException(nameof(code));

				if (!context.IsHandleCreated || context.IsDisposed) return;

				if (context.InvokeRequired)
				{
					try { context.Invoke(code); }
					/*
					catch (System.ObjectDisposedException odex) { }
					 */
					catch { }
					return;
				}
				code.Invoke();
			}


			/// <summary>MT Safe call code in UI thread.</summary>
			/// <param name="bAsync">If true - used BeginInvoke, else used Invoke</param>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void e_runInUIThread(this Control context, Action A, bool bAsync = false, Action<Exception>? OnError = null)
			{
				_ = context ?? throw new ArgumentNullException(nameof(context));
				_ = A ?? throw new ArgumentNullException(nameof(A));
				if (!context.IsHandleCreated || context.IsDisposed) return;
				try
				{
					if (bAsync) { context.BeginInvoke(A); return; }
					if (context.InvokeRequired) { context.Invoke(A); return; }
					A.Invoke();
				}
				catch (Exception EX) { OnError?.Invoke(EX); }
			}

			/// <summary>MT Safe</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void e_runInUIThread_AppendText(this TextBox ctl, string Text)
				=> ctl.e_runInUIThread(() => { ctl.AppendText(Text); ctl.Update(); });

#if NET6_0_OR_GREATER
			/// <summary>MT Safe</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void e_runInUIThread_AppendLine(this TextBox ctl, string Text, int limitLinesCount = 0)
				=> ctl.e_runInUIThread(() =>
				{
					if (limitLinesCount > 0)
					{
						ctl.Lines = ctl.Lines.TakeLast(limitLinesCount).ToArray();
					}
					ctl.AppendText($"{Text}\r\n"); ctl.Update();
				}
				);
#endif

			/// <summary>MT Safe</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void e_runInUIThread_SetText(this Control ctl, string Text)
				=> ctl.e_runInUIThread(() => { ctl.Text = Text; ctl.Update(); });

			/// <summary>MT Safe</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void e_runInUIThread_SetText(this ToolStripItem ctl, string Text, Form? frmUI = null)
			{
				_ = ctl ?? throw new ArgumentNullException(nameof(ctl));
				frmUI ??= ctl.GetCurrentParent()?.FindForm();//If form not specifed = search form...
															 //_ = frmUI ?? throw new ArgumentNullException("ToolStripItem.GetCurrentParent.FindForm() = NULL!");
				frmUI?.e_runInUIThread(() => { if (frmUI.IsHandleCreated && !frmUI.IsDisposed && !ctl.IsDisposed) ctl.Text = Text; });
			}

			// TODO: List View NF
			///// <summary>Потокобезопасное обновление свойства</summary>
			////[ MethodImpl(MethodImplOptions.AggressiveInlining)]
			////public static void e_runInUIThread_SetEmptyText(this UOM.WinAPI.WinControls.ListView.ListViewNF Ctl, string Text) => Ctl.e_runInUIThread(new Action(() => { Ctl.EmptyText = Text; Ctl.Update(); }));
			//// '''<summary>Потокобезопасный вызов процедуры в потоке UI элемента, без параметра.
			//// '''Любые ошибки игнорируются</summary>
			//// ''' <param name="ctlUIThreadControl">Элемент, в потоке которого будет вызываться код</param>
			//// ''' <param name="bAsync">Если асинхронно, то будет использоваться BeginInvoke, иначе Invoke</param>
			// <DebuggerNonUserCode, DebuggerStepThrough>
			// <MethodImpl(MethodImplOptions.AggressiveInlining), System.Runtime.CompilerServices.Extension()>
			// Public Async Sub e_runInUIThreadAwait(ByVal ctlUIThreadControl As Control,
			// ByVal A As Task,
			// Optional ByVal bAsync As bool  = False)
			// 'If (UIThreadCtl Is Nothing) OrElse (A Is Nothing) Then Return
			// If (ctlUIThreadControl Is Nothing) Then Throw New ArgumentNullException("UIThreadCtl")
			// If (A Is Nothing) Then Throw New ArgumentNullException("Action")
			// If (Not ctlUIThreadControl.IsHandleCreated) OrElse (ctlUIThreadControl.IsDisposed) Then Return
			// Try
			// If (bAsync) Then
			// Await ctlUIThreadControl.BeginInvoke(A)
			// Return
			// End If
			// If (ctlUIThreadControl.InvokeRequired) Then
			// Await Call ctlUIThreadControl.Invoke(A)
			// Else
			// Await A()
			// End If
			// Catch odex As ObjectDisposedException
			// '
			// End Try
			// End Sub

			#endregion

			#region FORM

			#region CloseFormWhenClick
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void e_CloseFormWhenClick(this Form F, System.Windows.Forms.ToolStripMenuItem MI)
				=> MI.Click += (_, _) => F?.e_CloseSafe();

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void e_CloseFormWhenClick(this Form F, Button Ctl)
				=> Ctl.Click += (_, _) => F?.e_CloseSafe();

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			private static void e_CloseSafe(this Form F) => F?.e_runInUIThread(() => F?.Close());
			#endregion


			/// <summary>Executes after form shown on screen, with specifed delay.
			/// Delay starts after 'Form.Shown' ebent</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static void e_runOnFormClosed(this Form context, Action action, bool ignoreExceptions = false)
			{
				_ = context ?? throw new ArgumentNullException(nameof(context));

				context.FormClosed += (ctx, ea) =>
				{
					try { action.Invoke(); }
					catch
					{ if (!ignoreExceptions) throw; }
				};
			}


			#region runDelayed 

			internal const int DEFAULT_DELAY = 100;
			internal const int DEFAULT_DELAY_AFTER_SHOWN = 500;


			/// <summary>Executes after form shown on screen, with specifed delay.
			/// Delay starts after 'Form.Shown' ebent</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static void e_runDelayedOnFormShown(
				this Form context,
				Action action,
				int delay = DEFAULT_DELAY_AFTER_SHOWN,
				bool OnErrorShowMessage = true,
				bool OnErrorCloseForm = true,
				bool UseWaitCursor = true)
			{
				_ = context ?? throw new ArgumentNullException(nameof(context));
				if (UseWaitCursor) context.UseWaitCursor = true;

				// attaching to form.Shown event.
				context.Shown += async (ctx, ea) =>
				{
					await System.Threading.Tasks.Task.Delay(delay);
					context = (Form)ctx!;
					try
					{
						try { action.Invoke(); }
						finally { if (UseWaitCursor) context.UseWaitCursor = false; }
					}
					catch (Exception ex)
					{
						ex.e_FIX_ERROR(OnErrorShowMessage);
						if (OnErrorCloseForm) context.Close();
					}
				};
			}


			/// <summary>Executes after form shown on screen, with specifed delay.
			/// Delay starts after 'Form.Shown' ebent</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static void e_runDelayedOnFormShown(
				this Form context,
				IEnumerable<Task> tasks,
				bool startTasks,
				int delay = DEFAULT_DELAY_AFTER_SHOWN,
				bool OnErrorShowMessage = true,
				bool OnErrorCloseForm = true,
				bool UseWaitCursor = true)
			{
				_ = context ?? throw new ArgumentNullException(nameof(context));
				if (UseWaitCursor) context.UseWaitCursor = true;

				// Подключаем обработчик, к события показа формы на экране, Будет выполнено в потоке формы, по событию F.Shown
				context.Shown += async (ctx, ea) =>
				{
					await System.Threading.Tasks.Task.Delay(delay);
					context = (Form)ctx!;

					// В потоке формы выполняем заданные действия
					try
					{
						try
						{
							if (startTasks) foreach (var TSK in tasks) TSK.Start();
							await Task.WhenAll(tasks);
						}
						finally { if (UseWaitCursor) context.UseWaitCursor = false; }
					}
					catch (Exception ex)
					{
						ex.e_FIX_ERROR(OnErrorShowMessage);
						if (OnErrorCloseForm) context.Close();
					}
				};
			}


			/// <summary>Executes after form shown with specifed delay. Delay starts after 'Form.Shown'</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static void e_runDelayedOnFormShown(
				this Form context,
				Task task,
				bool startTasks,
				int delay = DEFAULT_DELAY_AFTER_SHOWN,
				bool OnErrorShowMessage = true,
				bool OnErrorCloseForm = true,
				bool UseFormWaitCursor = true)
					=> context.e_runDelayedOnFormShown(new[] { task }, startTasks, delay, OnErrorShowMessage, OnErrorCloseForm, UseFormWaitCursor);


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void e_runDelayed_SetFocus(this Form F, int delay = DEFAULT_DELAY_AFTER_SHOWN)
				=> F?.e_runDelayedOnFormShown(delegate
				{
					F?.Focus();
					F?.Activate();
					F?.BringToFront();
				}, delay);


			/// <summary>
			/// Usually used when you need to do an action with a slight delay after exiting the current method. 
			/// For example, if some data will be ready only after exiting the control event handler processing branch
			/// </summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void e_RunDelayed(
				this Control ctl,
				Action delayedAction,
				int DelayInterval = DEFAULT_DELAY)
			{
				ctl.ThrowIfNull();//ArgumentNullException.ThrowIfNull(ctl);
				delayedAction.ThrowIfNull();//ArgumentNullException.ThrowIfNull(delayedAction);

				//Use 'System.Windows.Forms.Timer' that uses some thread with caller to raise events
				System.Windows.Forms.Timer tmrDelay = new()
				{
					Interval = DelayInterval,
					Enabled = false //do not start timer untill we finish it's setup
				};
				tmrDelay.Tick += (s, e) =>
				{
					System.Windows.Forms.Timer tmr = (System.Windows.Forms.Timer)s!;
					//first stop and dispose our timer, to avoid double e_runution
					tmr.Stop();
					//Now start action incontrols UI thread
					ctl.Invoke(delayedAction);
					tmr.Dispose();
				};

				//Start delay timer
				tmrDelay.Start();
			}


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void e_RunDelayedAsync(
				this Control ctl,
				Task delayedAction,
				int DelayInterval = DEFAULT_DELAY)
			{
				ctl.ThrowIfNull();
				delayedAction.ThrowIfNull();

				//Use 'System.Windows.Forms.Timer' that uses some thread with caller to raise events
				System.Windows.Forms.Timer tmrDelay = new()
				{
					Interval = DelayInterval,
					Enabled = false //do not start timer untill we finish it's setup
				};

				tmrDelay.Tick += async (s, e) =>
				{
					System.Windows.Forms.Timer tmr = (System.Windows.Forms.Timer)s!;
					//first stop and dispose our timer, to avoid double e_runution
					tmr.Stop();

					//Now start action incontrols UI thread
					await delayedAction;
					tmr.Dispose();
				};

				tmrDelay.Start();//Start delay timer
			}







			/*
	public static async Task e_InvokeAsync(this Control ctl,
	 Func<Task> invokeDelegate,
	 TimeSpan timeOutSpan = default,
	 CancellationToken cancellationToken = default,
	 params object[] args)
	{
	 var tokenRegistration = default(CancellationTokenRegistration);
	 RegisteredWaitHandle? registeredWaitHandle = null;

	 try
	 {
		 TaskCompletionSource<bool> taskCompletionSource = new();
		 IAsyncResult? asyncResult = ctl.BeginInvoke(invokeDelegate, args);

		 registeredWaitHandle = ThreadPool.RegisterWaitForSingleObject(
			 asyncResult.AsyncWaitHandle,
			 new WaitOrTimerCallback(InvokeAsyncCallBack),
			 taskCompletionSource,
			 timeOutSpan.Milliseconds,
			 true);

		 tokenRegistration = cancellationToken.Register(
			 CancellationTokenRegistrationCallBack,
			 taskCompletionSource);

		 await taskCompletionSource.Task;

		 object? returnObject = ctl.EndInvoke(asyncResult);
		 return;
	 }
	 finally
	 {
		 registeredWaitHandle?.Unregister(null);
		 tokenRegistration.Dispose();
	 }

	 static void CancellationTokenRegistrationCallBack(object? state)
	 {
		 if (state is TaskCompletionSource<bool> source)
			 source.TrySetCanceled();
	 }

	 static void InvokeAsyncCallBack(object? state, bool timeOut)
	 {
		 if (state is TaskCompletionSource<bool> source)
			 source.TrySetResult(timeOut);
	 }
	}

	public static async Task<T> e_InvokeAsync<T>(this Control ctl,
	 Func<Task> invokeDelegate,
	 TimeSpan timeOutSpan = default,
	 CancellationToken cancellationToken = default,
	 params object[] args)
	{
	 var tokenRegistration = default(CancellationTokenRegistration);
	 RegisteredWaitHandle? registeredWaitHandle = null;

	 try
	 {
		 TaskCompletionSource<bool> taskCompletionSource = new();
		 IAsyncResult? asyncResult = ctl.BeginInvoke(invokeDelegate, args);

		 registeredWaitHandle = ThreadPool.RegisterWaitForSingleObject(
			 asyncResult.AsyncWaitHandle,
			 new WaitOrTimerCallback(InvokeAsyncCallBack),
			 taskCompletionSource,
			 timeOutSpan.Milliseconds,
			 true);

		 tokenRegistration = cancellationToken.Register(
			 CancellationTokenRegistrationCallBack,
			 taskCompletionSource);

		 await taskCompletionSource.Task;

		 object? returnObject = ctl.EndInvoke(asyncResult);
		 return (T)returnObject;
	 }
	 finally
	 {
		 registeredWaitHandle?.Unregister(null);
		 tokenRegistration.Dispose();
	 }

	 static void CancellationTokenRegistrationCallBack(object? state)
	 {
		 if (state is TaskCompletionSource<bool> source)
			 source.TrySetCanceled();
	 }

	 static void InvokeAsyncCallBack(object? state, bool timeOut)
	 {
		 if (state is TaskCompletionSource<bool> source)
			 source.TrySetResult(timeOut);
	 }
	}

	   */


			#endregion









			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static bool e_tryOnWaitCursor(
					this Form f,
					Action a,
					bool showErrorMessageBox = true,
					string ErrorMessageBoxTitle = "Error")
			{
				try
				{
					f.Cursor = Cursors.WaitCursor;
					try { a.Invoke(); }
					finally { f.Cursor = Cursors.Default; }

					return true;
				}
				catch (Exception ex)
				{
					if (showErrorMessageBox) MessageBox.Show(ex.Message.ToString(), ErrorMessageBoxTitle, MessageBoxButtons.OK, MessageBoxIcon.Error);
					return false;
				}
			}



			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void e_RunWhenHandleReady<T>(this T ctl, Action<Control> HandleReadyAction) where T : Control
			{
				_ = ctl ?? throw new ArgumentNullException(nameof(ctl));

				if (ctl.Disposing || ctl.IsDisposed) return;

				if (ctl.IsHandleCreated)
				{
					HandleReadyAction?.Invoke(ctl);//Control handle already Exist, run immediate
				}
				else
				{
					//Delay action when handle will be ready...
					ctl.HandleCreated += (s, e) => HandleReadyAction?.Invoke((T)s!);
				}
			}






			/// <summary>ThreadSafe excute action in control UI thread
			/// Any errors will be ignored!</summary>
			/// <param name="ctl">Control in which UI thread action e_runutes</param>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void e_RunInUIThread(
				this Control ctl,
				Action? a,
				bool useBeginInvoke = false)
			{
				ctl.ThrowIfNull();//				ArgumentNullException.ThrowIfNull(ctl);
				if (a == null) return;

				try
				{
					if (!ctl.IsHandleCreated || ctl.IsDisposed) return;
					if (useBeginInvoke) { ctl.BeginInvoke(a); return; }
					if (ctl.InvokeRequired) { ctl.Invoke(a); return; }
					a.Invoke();
				}
				catch (ObjectDisposedException) { }//just ignore			
			}






















			#region SetIcon_

#if NETFRAMEWORK

			[ MethodImpl(MethodImplOptions.AggressiveInlining)]
			private static void e_SetIcon_Core<t>(this t Ctl, System.Drawing.Icon rIcon) where t : class
			{
				switch (Ctl)
				{
					case Form frm: frm.Icon = rIcon; break;
					case ToolStripItem tsb: tsb.Image = rIcon.ToBitmap(); break;
					default: throw new NotImplementedException($"Can't set icon for {Ctl.GetType()}");

						//case ToolStripButton tsb: tsb.Image = rIcon.ToBitmap(); break;
						//case ToolStripMenuItem tsmi: tsmi.Image = rIcon.ToBitmap(); break;
				}

			}


			//[ MethodImpl(MethodImplOptions.AggressiveInlining)]
			//internal static void SetIconsSafe<t>(this IEnumerable<t> eCtl, int IconID, LRI_Libs eLib = C_DEFAULT_LRI_Libs, LRI_METHOD eMethod = C_DEFAULT_LRI_METHOD, LRI_ICON_SIZE eIconSize = LRI_ICON_SIZE.Small) where t : class
			//{
			//    foreach (var rCtl in eCtl) rCtl.SetIconSafe(IconID, eLib, eMethod, eIconSize);
			//}

			//[ MethodImpl(MethodImplOptions.AggressiveInlining)]
			//internal static void SetIconSafe<t>(this t rCtl, int IconID, LRI_Libs eLib = C_DEFAULT_LRI_Libs, LRI_METHOD eMethod = C_DEFAULT_LRI_METHOD, LRI_ICON_SIZE eIconSize = LRI_ICON_SIZE.Small) where t : class
			//{
			//    var rImg = LoadResWin32Icon_Safe(IconID, eLib, eMethod, eIconSize);
			//    rCtl.SetIcon_Core(rImg);
			//}

			//[ MethodImpl(MethodImplOptions.AggressiveInlining)]
			//internal static void SetIconsSafe<t>(this IEnumerable<t> eCtl, LRI_ID IconID, LRI_Libs eLib = C_DEFAULT_LRI_Libs, LRI_METHOD eMethod = C_DEFAULT_LRI_METHOD, LRI_ICON_SIZE eIconSize = LRI_ICON_SIZE.Small) where t : class
			//{
			//    eCtl.SetIconsSafe(IconID, eLib, eMethod, eIconSize);
			//}

			//[ MethodImpl(MethodImplOptions.AggressiveInlining)]
			//internal static void SetIconSafe<t>(this t rCtl, LRI_ID IconID, LRI_Libs eLib = C_DEFAULT_LRI_Libs, LRI_METHOD eMethod = C_DEFAULT_LRI_METHOD, LRI_ICON_SIZE eIconSize = LRI_ICON_SIZE.Small) where t : class
			//{
			//    rCtl.SetIconSafe(IconID, eLib, eMethod, eIconSize);
			//}

#endif

			#endregion

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static bool e_ShowDialog_OK(this Form FormToShow, Form? ParentForm = null)
				=> ((null == ParentForm) ? FormToShow.ShowDialog() : FormToShow.ShowDialog(ParentForm)) == System.Windows.Forms.DialogResult.OK;

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static bool e_ShowDialog_NotOK(this Form FormToShow, Form? ParentForm = null) => !FormToShow.e_ShowDialog_OK(ParentForm);

			#endregion


			#region IIf



			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void e_IIF_EnableControl(this bool B, params Component[] cmpnents)
			{
				cmpnents?.e_ForEach(cmpnent =>
				{
					var BB = B;
					switch (cmpnent)
					{
						case Control ctl: ctl.Enabled = BB; break;
						case ToolStripItem tsi: tsi.Enabled = BB; break;
						default: throw new Exception($"IIFEnableControl failed for '{cmpnent.GetType()}'");
					}
				});
			}


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void e_IIF_SetVisible(this bool B, params Component[] cmpnents)
			{
				cmpnents?.e_ForEach(cmpnent =>
				{
					var BB = B;
					switch (cmpnent)
					{
						case Control ctl: ctl.Visible = BB; break;
						case ToolStripItem tsi: tsi.Visible = BB; break;
						default: throw new Exception($"e_IIFSetVisible failed for '{cmpnent.GetType()}'");
					}
				});
			}



			#endregion



			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static HandleRef e_CreateHandleReff(this Control Ctl)
				=> new(
					Ctl ?? throw new ArgumentNullException(nameof(Ctl)),
					Ctl.Handle);
















			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void e_SetStyleInternal(this Control ctl, ControlStyles st, bool bset)
			{
				_ = ctl ?? throw new ArgumentNullException(nameof(ctl));

				MethodInfo objMethodInfo = typeof(Control).GetMethod("SetStyle", BindingFlags.NonPublic | BindingFlags.Instance)!;
				object[] args = new object[] { st, bset };
				objMethodInfo.Invoke(ctl, args);
			}

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static StringAlignment e_GetAlignment(this ContentAlignment ca)
				=> ca switch
				{
					var ca2
					when ca2 == ContentAlignment.TopLeft || ca2 == ContentAlignment.MiddleLeft || ca2 == ContentAlignment.BottomLeft
					=> StringAlignment.Near,

					var ca2
					when ca2 == ContentAlignment.TopCenter || ca2 == ContentAlignment.MiddleCenter || ca2 == ContentAlignment.BottomCenter
					=> StringAlignment.Center,

					var ca2
					when ca2 == ContentAlignment.TopRight || ca2 == ContentAlignment.MiddleRight || ca2 == ContentAlignment.BottomRight
						=> StringAlignment.Far,

					_ => StringAlignment.Center,
				};

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static StringAlignment e_GetLineAlignment(this ContentAlignment ca)
				=> ca switch
				{
					var ca2
					when ca2 == ContentAlignment.TopLeft || ca2 == ContentAlignment.TopCenter || ca2 == ContentAlignment.TopRight
					=> StringAlignment.Near,

					var ca2
					when ca2 == ContentAlignment.MiddleLeft || ca2 == ContentAlignment.MiddleCenter || ca2 == ContentAlignment.MiddleRight
					=> StringAlignment.Center,

					var ca2
					when ca2 == ContentAlignment.BottomLeft || ca2 == ContentAlignment.BottomCenter || ca2 == ContentAlignment.BottomRight
						=> StringAlignment.Far,

					_ => StringAlignment.Center,
				};


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static TextFormatFlags e_ToTextFormatFlags(this ContentAlignment ca)
			=> ca switch
			{
				ContentAlignment.TopLeft => TextFormatFlags.Left | TextFormatFlags.Top,
				ContentAlignment.TopCenter => TextFormatFlags.HorizontalCenter | TextFormatFlags.Top,
				ContentAlignment.TopRight => TextFormatFlags.Right | TextFormatFlags.Top,

				ContentAlignment.MiddleLeft => TextFormatFlags.Left | TextFormatFlags.VerticalCenter,
				ContentAlignment.MiddleCenter => TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter,
				ContentAlignment.MiddleRight => TextFormatFlags.Right | TextFormatFlags.VerticalCenter,

				ContentAlignment.BottomLeft => TextFormatFlags.Left | TextFormatFlags.Bottom,
				ContentAlignment.BottomCenter => TextFormatFlags.HorizontalCenter | TextFormatFlags.Bottom,
				ContentAlignment.BottomRight => TextFormatFlags.Right | TextFormatFlags.Bottom,
				_ => TextFormatFlags.Default
			};

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static StringFormat e_ToStringFormat(this ContentAlignment ca)
			{
				var sf = new StringFormat()
				{
					Alignment = ca.e_GetAlignment(),
					LineAlignment = ca.e_GetLineAlignment()
				};
				return sf;
			}

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void e_DrawTextEx(
			this Graphics g,
			string text,
			Font font,
			Color textcolor,
			Rectangle rect,
			ContentAlignment textAlign)
			{
				using Brush brText = new SolidBrush(textcolor);
				g.e_DrawTextEx(text, font, brText, rect, textAlign);
			}

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void e_DrawTextEx(
				this Graphics g,
				string text,
				Font font,
				Brush textbrush,
				Rectangle rect,
				ContentAlignment textAlign)
			{
				using var sf = textAlign.e_ToStringFormat();
				g.DrawString(text, font, textbrush, rect, sf);
			}






		}


		[EditorBrowsable(EditorBrowsableState.Never)]
		internal static partial class Extensions_Controls_TextBox
		{


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void e_SetVistaCueBanner(this TextBox ctl, string? BannerText = null)
			{
				_ = ctl ?? throw new ArgumentNullException(nameof(ctl));

				ctl.e_RunWhenHandleReady(tb => WinAPI.Windows.SendMessage(
					tb.Handle,
					(int)WinAPI.Windows.TextBoxMessages.EM_SETCUEBANNER,
					0,
					BannerText));
			}





			#region AttachDelayedFilter

			private const int DEFAULT_TEXT_EDIT_DELAY = 1000;
			private const string DEFAULT_FILTER_CUEBANNER = "Filter";


			/// <summary>
			/// Attaches a deferred text change event handler that makes it possible to react to text changes with some delay, 
			/// allowing the user to correct erroneous input, 
			/// or complete input, rather than reacting immediately to each letter.
			/// </summary>
			/// <param name="onTextChanged">TextChanged Handler</param>
			/// <param name="delay">Delay (ms.) during which repeated input will not call the handler</param>
			/// <param name="cueBanner">Vista cueabanner text</param>
			/// <param name="changeBackColor">Sets the background color for textbox to Systemcolors.Info</param>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void e_AttachDelayedFilter(
				this TextBox txt,
				Action<string> onTextChanged,
				int delay = DEFAULT_TEXT_EDIT_DELAY,
				string? cueBanner = DEFAULT_FILTER_CUEBANNER,
				bool changeBackColor = true)
			{
				var TMR = new System.Windows.Forms.Timer() { Interval = delay };
				txt.Tag = TMR; //Сохраняем ссылку на таймер хоть где-то, чтобы GC его не грохнул.

				if (cueBanner != null) txt.e_SetVistaCueBanner(cueBanner);
				if (changeBackColor) txt.BackColor = SystemColors.Info;

				TMR.Tick += delegate
				{
					TMR.Stop(); //Останавливаем таймер
					var sNewText = txt.Text;
					onTextChanged.Invoke(sNewText);
				};

				txt.TextChanged += delegate
				{
					//Restart timer...
					TMR.Stop();
					TMR.Start();
				};
			}

			/// <inheritdoc cref="AttachDelayedFilter" />
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void e_AttachDelayedFilter(
				this TextBox txt,
				MethodInvoker onTextChanged,
				int delay = DEFAULT_TEXT_EDIT_DELAY,
				string cueBanner = DEFAULT_FILTER_CUEBANNER,
				bool changeBackColor = true)
					=> txt.e_AttachDelayedFilter(
						new Action<string>((_) => onTextChanged.Invoke()),
						delay, cueBanner, changeBackColor);

			/// <inheritdoc cref="AttachDelayedFilter" />
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void e_AttachDelayedFilter(
				this ToolStripTextBox tstb,
				Action<string> onTextChanged,
				int delay = DEFAULT_TEXT_EDIT_DELAY,
				string cueBanner = DEFAULT_FILTER_CUEBANNER,
				bool changeBackColor = true)
					=> tstb.TextBox.e_AttachDelayedFilter(onTextChanged, delay, cueBanner, changeBackColor);



			#endregion



		}


		[EditorBrowsable(EditorBrowsableState.Never)]
		internal static class Extensions_Controls_ComboBox
		{

			#region FillCBO

			///<summary>Fills ComboBox with <see cref="ComboboxItemContainer"/> wrappers and returns selected index</summary>
			///<remarks>Sample: cboGroupFileLogRecordsBy.FillCBOWithEnumContainers(FILE_LOG_RECORDS_GROUPING)</remarks>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static int e_CBOFillAndSelectByContainer<T>(
				this ComboBox cbo,
				IEnumerable<ComboboxItemContainer<T>> items,
				ComboboxItemContainer<T>? selectedItem = null,
				ComboBoxStyle style = ComboBoxStyle.DropDownList,
				bool doNotSelectAnyItem = false)
			{
				cbo.DataSource = null;
				cbo.Items.Clear();
				cbo.DropDownStyle = style;

				ComboboxItemContainer<T>[] a = items.ToArray();
				cbo.Items.AddRange(a);

				if (doNotSelectAnyItem) return -1;

				if (null != selectedItem)
					cbo.SelectedItem = selectedItem!;
				else
					cbo.SelectedIndex = 0;

				return cbo.SelectedIndex;
			}

			///<summary>Fills ComboBox with <see cref="ComboboxItemContainer"/> wrappers and returns selected index</summary>
			///<remarks>Sample: cboGroupFileLogRecordsBy.FillCBOWithEnumContainers(FILE_LOG_RECORDS_GROUPING)</remarks>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static int e_CBOFillAndSelectByItem<T>(
				this ComboBox cbo,
				IEnumerable<ComboboxItemContainer<T>> items,
				T? selectedItem = default,
				ComboBoxStyle style = ComboBoxStyle.DropDownList,
				bool doNotSelectAnyItem = false)
			{
				cbo.e_CBOFillAndSelectByContainer<T>(items, null, style, (selectedItem != null));

				if (doNotSelectAnyItem) return -1;
				if (selectedItem != null)
				{
					ComboboxItemContainer<T>? containerToSelect = cbo.e_ItemsAs_ObjectContainerOf<T>()
						.Where(row => row!.Value!.Equals(selectedItem))
						.FirstOrDefault();

					if (containerToSelect != null)
					{
						cbo.SelectedItem = containerToSelect;
						return cbo.SelectedIndex;
					}
				}
				cbo.SelectedIndex = 0;
				return cbo.SelectedIndex;
			}

			///<summary>Fills ComboBox with <see cref="ComboboxItemContainer"/> wrappers and returns selected index</summary>
			///<remarks>Sample: cboGroupFileLogRecordsBy.FillCBOWithEnumContainers(FILE_LOG_RECORDS_GROUPING)</remarks>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static int e_CBOCreateContainersAndFill<T>(
				this ComboBox cbo,
				IEnumerable<T> items,
				T? selectedItem = default,
				ComboBoxStyle style = ComboBoxStyle.DropDownList,
				bool doNotSelectAnyItem = false)
			{

				ComboboxItemContainer<T>? selectedItemContainer = null;

				ComboboxItemContainer<T>[] a = items
					.Select(obj =>
					{
						ComboboxItemContainer<T> cont = new(obj);
						if (selectedItem != null && obj!.Equals(selectedItem)) selectedItemContainer = cont;
						return cont;
					})
					.ToArray();

				return cbo.e_CBOFillAndSelectByContainer<T>(a, selectedItemContainer, style, doNotSelectAnyItem);
			}


			///<summary>Fills ComboBox with <see cref="EnumContainer"/> wrappers. ONLY FOR ENUM!</summary>
			///<remarks>Sample: cboGroupFileLogRecordsBy.FillCBOWithEnumContainers(FILE_LOG_RECORDS_GROUPING.ByCaller)</remarks>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void e_CBOFillWithEnumContainersOfEnum<T>(ComboBox CBO, T selectedItem) where T : Enum
			{
				throw new NotImplementedException();
				/*
			var aContainers = EnumItem.ExtEnum_GetAllValuesAsEnumContainers

				cbo.e_FillCBOWithEnumContainers(aContainers);
				 */
			}

			/*
	//////<summary>Заполняет ComboBox лбъектами типа <see cref="My.UOM.EnumTools.EnumContainer"/>, и выбирает текущим элементом EnumItem</summary>
	//////<remarks>Пример: Call Me.cboGroupFileLogRecordsBy.FillCBOWithEnumContainers(FILE_LOG_RECORDS_GROUPING.ByCaller)</remarks>
	<DebuggerNonUserCode, DebuggerStepThrough>
	<MethodImpl(MethodImplOptions.AggressiveInlining), System.Runtime.CompilerServices.Extension()>
	Friend Sub FillCBOWithEnumContainers(Of T)(CBO As ToolStripComboBox, ByVal EnumItem As T)
	//Пример: Call Me.cboGroupFileLogRecordsBy.FillCBOWithEnumContainers(FILE_LOG_RECORDS_GROUPING.ByCaller)

	Call CBO.ComboBox.FillCBOWithEnumContainers(EnumItem)
	End Sub

	<DebuggerNonUserCode, DebuggerStepThrough>
	<MethodImpl(MethodImplOptions.AggressiveInlining), System.Runtime.CompilerServices.Extension()>
	Friend Function SelectItemWithEnumContainers(Of T)(CBO As ComboBox, EnumItem As T) As Integer
	var I = CBO.ExtEnum_IndexOfEnumContainerForItem(Of T)(EnumItem)
	if(I >= 0) { CBO.SelectedIndex = I
	return I
	End Function


			*/
			#endregion


			#region Get Items From CBO

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static ComboboxItemContainer<T>[] e_ItemsAs_ObjectContainerOf<T>(this ComboBox cbo)
				=> cbo.Items.Cast<ComboboxItemContainer<T>>().ToArray();

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static ComboboxItemContainer<T>? e_SelectedItemAs_ObjectContainerOf<T>(this ComboBox cbo)
			{
				object? obj = cbo.SelectedItem;
				return (obj == null)
					? null
					: (ComboboxItemContainer<T>)obj!;
			}

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static T? e_SelectedItemAs_ObjectContainerValue<T>(this ComboBox cbo)
			{
				ComboboxItemContainer<T>? ec = cbo.e_SelectedItemAs_ObjectContainerOf<T>();
				return (ec == null)
					? default
					: ec.Value;
			}

			/*
	<DebuggerNonUserCode, DebuggerStepThrough>
	<MethodImpl(MethodImplOptions.AggressiveInlining), System.Runtime.CompilerServices.Extension()>
	Friend Function ExtEnum_SelectedItemAsEnumContainerValue(Of T)(ByVal CBO As ComboBox) As T
	var objSel = CBO.ExtEnum_SelectedItemAsEnumcontainer(Of T)()
	var V = objSel.Value
	return V
	End Function

	<DebuggerNonUserCode, DebuggerStepThrough>
	<MethodImpl(MethodImplOptions.AggressiveInlining), System.Runtime.CompilerServices.Extension()>
	Friend Function ExtEnum_SelectedItemAsEnumContainerValue(Of T)(CBO As ToolStripComboBox) As T
	return CBO.ComboBox.ExtEnum_SelectedItemAsEnumContainerValue(Of T)
	End Function







	//# Region "CBO EnumContainer Helpers"


	<DebuggerNonUserCode, DebuggerStepThrough>
	<MethodImpl(MethodImplOptions.AggressiveInlining), System.Runtime.CompilerServices.Extension()>
	Friend Function ExtEnum_ItemsAsEnumContainers(Of T)(CBO As ComboBox) As List(Of My.UOM.EnumTools.EnumContainer(Of T))
	var aWrappers = (From O As Object In CBO.Items
	Let OO = DirectCast(O, My.UOM.EnumTools.EnumContainer(Of T))
	Select OO).ToArray

	return aWrappers.ToList
	End Function

	<DebuggerNonUserCode, DebuggerStepThrough>
	<MethodImpl(MethodImplOptions.AggressiveInlining), System.Runtime.CompilerServices.Extension()>
	Friend Function ExtEnum_IndexOfEnumContainerForItem(Of T)(CBO As ComboBox, EnumItem As T) As Integer
	var aContainers = CBO.ExtEnum_ItemsAsEnumContainers(Of T)()
	For N = 1 To aContainers.Count
	var iFound = (N - 1)
	if (aContainers(iFound).Value.Equals(EnumItem))
		{
			return iFound
	}
		Next
	return -1
	End Function

	<DebuggerNonUserCode, DebuggerStepThrough>
	<MethodImpl(MethodImplOptions.AggressiveInlining), System.Runtime.CompilerServices.Extension()>
	Friend Function ExtEnum_GetEnumContainerForItem(Of T)(CBO As ComboBox, Item As T) As My.UOM.EnumTools.EnumContainer(Of T)
	var aWrappers = CBO.ExtEnum_ItemsAsEnumContainers(Of T)()
	var aFound = (From O In aWrappers Where(O.Value.Equals(Item)))

	if(Not aFound.Any) { return Nothing
	var F = aFound.First
	return F
	End Function


	//# Region "EnumContainer"


	<DebuggerNonUserCode, DebuggerStepThrough>
	<MethodImpl(MethodImplOptions.AggressiveInlining), System.Runtime.CompilerServices.Extension()>
	Friend Function ExtEnum_ItemAsEnumcontainer(Of T)(ByVal CBO As ComboBox, ItemIndex As Integer) As My.UOM.EnumTools.EnumContainer(Of T)
	var Obj = CBO.Items(ItemIndex)
	var EC As My.UOM.EnumTools.EnumContainer(Of T) = DirectCast(Obj, My.UOM.EnumTools.EnumContainer(Of T))
	return EC
	End Function

	


	//# End Region





		//# End Region
			 */
			#endregion

		}

















		[EditorBrowsable(EditorBrowsableState.Never)]
		internal static partial class Extensions_Controls_ListBox
		{

			///<summary>MT Safe!!!</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void e_runOnLockedUpdateMTSafe(this ListBox? lst, Action a)
			{
				Action a2 = delegate
				{
					lst?.BeginUpdate();
					try { a!.Invoke(); }
					finally { lst?.EndUpdate(); }
				};

				if (lst != null && lst.InvokeRequired)
					lst.e_runInUIThread(a2);
				else
					a2.Invoke();
			}

			/// <summary>/Limit count of lines to value</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void e_LimitRowsCountTo(this ListBox lst, int maxRows)
			{
				lst.e_runOnLockedUpdateMTSafe(delegate
				{
					while (lst.Items.Count >= maxRows) lst.Items.RemoveAt(0);
				});
			}
		}




		[EditorBrowsable(EditorBrowsableState.Never)]
		internal static partial class Extensions_Controls_Listview
		{



			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void e_AutoSizeColumns(this ListView? lvw)
			{
				if (lvw == null || lvw.IsDisposed) return;

				if (lvw.Items.Count > 0)
					lvw.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
				else
					lvw.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
			}


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static void e_ClearItemsAndGroups(this ListView? lvw, bool autoSizeColumns = true, bool clearGroups = true, bool clearColumns = false)
			{
				lvw?.e_runOnLockedUpdate(delegate
				{
					lvw?.Items.Clear();
					if (clearGroups) lvw?.Groups.Clear();
					if (clearColumns) lvw?.Columns.Clear();
				}, autoSizeColumns);
			}


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void e_ClearItems(this ListView lvw, bool autoSizeColumns = false)
				=> lvw.e_ClearItemsAndGroups(autoSizeColumns, false);


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void e_AddFakeSubitems(this ListViewItem li, int ListViewColumnsCount, string fakeText = "")
			{
				if (li != null) for (int i = 0; i < ListViewColumnsCount; i++) li.SubItems.Add(fakeText);
			}


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void e_AddFakeSubitems(
				this ListViewItem? li,
				ListView? lvw = null,
				string fakeText = "")
			{
				if (li == null) return;

				lvw ??= li.ListView;
				lvw.ThrowIfNull();//ArgumentNullException.ThrowIfNull(lvw);
				li?.e_AddFakeSubitems(lvw.Columns.Count, fakeText);
			}


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void e_UpdateTexts(
				 this ListViewItem? li,
				 int startIndex,
				 params string?[] aSubItemsText)
			{
				if (li == null || !aSubItemsText.Any()) return;

				li.ListView.e_runOnLockedUpdate(() =>
				{
					int i = 0;
					aSubItemsText.e_ForEach(text =>
					{
						if (null != text) li.SubItems[(startIndex + i)].Text = text;
						i++;
					});
				});
			}


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void e_UpdateTexts(this ListViewItem? li, params string[] aSubItemsText)
				=> e_UpdateTexts(li, 0, aSubItemsText);


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static IEnumerable<ListViewGroup> e_GroupsAsIEnumerable(this ListView lvw)
				=> lvw.Groups.Cast<ListViewGroup>();


#if NETCOREAPP3_0_OR_GREATER

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static (ListViewGroup Group, bool Created) e_GroupsCreateGroupByKey(
				this ListView lvw,
				string key,
				string? header = null,
				ListViewGroupCollapsedState newGroupState = ListViewGroupCollapsedState.Collapsed,
				Action<ListViewGroup>? onNewGroup = null
				)
			{
				ListViewGroup? grp = lvw.e_GroupsAsIEnumerable()?.Where(g => (g.Name == key)).FirstOrDefault();
				bool exist = (grp != null);
				if (!exist)
				{
					grp = new ListViewGroup(key, header ?? key);
					lvw.Groups.Add(grp);
					onNewGroup?.Invoke(grp);
					grp.CollapsedState = newGroupState;
				}
				return (grp!, !exist);
			}
#else
			// Defined in ListViewEx extensions...
#endif

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static (ListViewGroup Group, bool Created) e_GroupsCreateGroupByKey(
				this ListView lvw,
				string key,
				string? header = null,
				Action<ListViewGroup>? onNewGroup = null
			)
			{
				ListViewGroup? foundGroup = lvw!.e_GroupsAsIEnumerable()
					.Where(g => (g.Name == key))
					.FirstOrDefault();

				if (foundGroup != null) return (foundGroup, false);


				ListViewGroup grp = new(key, header ?? key);
				lvw.Groups.Add(grp);
				onNewGroup?.Invoke(grp);
				return (grp, true);
			}


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static (ListViewGroup Group, bool Created) e_GroupsCreateGroupByKey(
				Dictionary<string, ListViewGroup> dicGroups,
				string key,
				string? header = null,
				Action<ListViewGroup>? onNewGroup = null)
			{
				bool exist = dicGroups.TryGetValue(key, out ListViewGroup? grp);
				if (!exist)
				{
					header ??= key;
					grp = new ListViewGroup(key, header);
					dicGroups.Add(key, grp);
					onNewGroup?.Invoke(grp);
				}
				return (grp!, !exist);
			}


			/*



	[MethodImpl(MethodImplOptions.AggressiveInlining)]
	internal static void e_SetAllGroupsTitlesBy_TagAndCount(this ListView lvw)
	{
	var GNP = ListViewGroup grp =>
	{
	var sTitle = G.Tag.ToString;
	return sTitle;
	};

	lvw.e_SetAllGroupsTitlesBy_Count(GNP);
	}

	*/


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void e_SetGroupsTitlesFast(
				this ListView? lvw,
				Func<ListViewGroup, string>? getGroupHeader = null)
					=> lvw?.e_GroupsAsIEnumerable().e_ForEach(g =>
				{
					string sTitle = g.Name ?? "";
					if (getGroupHeader != null)
						sTitle = getGroupHeader.Invoke(g);
					else
						sTitle = $"{sTitle} ({g.Items.Count:N0})".Trim();

					if (!string.IsNullOrWhiteSpace(sTitle)) g.Header = sTitle;
				});

#if NETCOREAPP3_0_OR_GREATER


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void e_SetAllGroupsState(
				this ListView? lvw,
				ListViewGroupCollapsedState state = ListViewGroupCollapsedState.Collapsed)
					=> lvw?.e_GroupsAsIEnumerable().e_ForEach(g => g.CollapsedState = state);

#endif

			///<summary>MT Safe!!!</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void e_runOnLockedUpdate(
				this ListView? lvw,
				Action a,
				bool autoSizeColumns = false,
				bool fastUpdateGroupHeaders = false)
			{
				_ = a ?? throw new ArgumentNullException(nameof(a));

				Action a2 = delegate
				{
					lvw?.BeginUpdate();
					try { a!.Invoke(); }
					finally
					{
						if (autoSizeColumns) lvw?.e_AutoSizeColumns();
						if (fastUpdateGroupHeaders) lvw?.e_SetGroupsTitlesFast();
						lvw?.EndUpdate();
					}
				};

				if (lvw != null && lvw.InvokeRequired)
					lvw.e_runInUIThread(a2);
				else
					a2.Invoke();
			}


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static async Task<T?> e_runOnLockedUpdateAsync<T>(
				this ListView lvw,
				Func<Task<T?>> tsk,
				bool autoSizeColumns = false,
				bool fastUpdateGroupHeaders = false) where T : class
			{
				//ArgumentNullException.ThrowIfNull(tsk);
				tsk.ThrowIfNull();// = tsk ?? throw new ArgumentNullException(nameof(tsk));

				lvw?.BeginUpdate();
				try
				{
					//tsk.Start();
					T? ret = await tsk.Invoke();
					return ret;
				}
				finally
				{
					if (autoSizeColumns) lvw?.e_AutoSizeColumns();
					if (fastUpdateGroupHeaders) lvw?.e_SetGroupsTitlesFast();
					lvw?.EndUpdate();
				}
			}

			/*

			[ MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static async Task<T?> e_runOnLockedUpdateAsync<T>(
				this ListView lvw,
				Task<T?> tsk,
				bool autoSizeColumns = false,
				bool fastUpdateGroupHeaders = false) where T : class
			{
				//ArgumentNullException.ThrowIfNull(tsk);
				tsk.ThrowIfNull();// = tsk ?? throw new ArgumentNullException(nameof(tsk));

				lvw?.BeginUpdate();
				try
				{
					tsk.Start();
					T? ret = await tsk;
					return ret;
				}
				finally
				{
					if (autoSizeColumns) lvw?.e_AutoSizeColumns();
					if (fastUpdateGroupHeaders) lvw?.e_SetGroupsTitlesFast();
					lvw?.EndUpdate();
				}
			}
						 */

			//************************************** OLD


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void e_SelectFirstItem(this ListView lvw)
			{
				var first = lvw.e_ItemsAsIEnumerable().FirstOrDefault();
				if (first == default) return;

				first.Selected = true;
				first.Focused = true;
				first.EnsureVisible();
			}


			public static void e_AddSubitems(this ListViewItem? li, params string[] subitems)
				=> subitems?.e_ForEach(s => li?.SubItems.Add(s));


			public static async void e_FlashAsync(this ListViewItem? li, int flashCount = 10)
			{
				if (li == null) return;

				Color clrFore = li.ForeColor; Color clrBack = li.BackColor;
				try
				{
					for (int i = 1, loopTo = flashCount * 2; i <= loopTo; i++)
					{
						(li.BackColor, li.ForeColor) = (li.ForeColor, li.BackColor);
						await Task.Delay(100);
					}
				}
				finally //Restore original colors
				{ li.ForeColor = clrFore; li.BackColor = clrBack; }
			}


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void e_ItemsRemoveRange(
				this ListView? lvw,
				IEnumerable<ListViewItem> ItemsToRemove,
				bool aAutoSizeColumnsAtFinish = false)
				=> lvw?.e_runOnLockedUpdate(() => lvw?.Items.e_ItemsRemoveRange(ItemsToRemove), aAutoSizeColumnsAtFinish);

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void e_ItemsRemoveRange(
				this ListView.ListViewItemCollection liC,
				IEnumerable<ListViewItem> ItemsToRemove)
					=> ItemsToRemove.e_ForEach(li => liC.Remove(li));


			#region ItemsAsIEnumerable

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static IEnumerable<ListViewItem> e_ItemsAsIEnumerable(this ListView lvw) => lvw.Items.Cast<ListViewItem>();

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static IEnumerable<ListViewItem> e_ItemsAsIEnumerable(this ListViewGroup G) => G.Items.Cast<ListViewItem>();

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static IEnumerable<ListViewItem> e_SelectedItemsAsIEnumerable(this ListView lvw) => lvw.SelectedItems.Cast<ListViewItem>();

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static IEnumerable<ListViewItem> e_CheckedItemsAsIEnumerable(this ListView lvw) => lvw.CheckedItems.Cast<ListViewItem>();

			#endregion


			#region ItemsAndTags


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static T? e_TagAs<T>(this ListViewGroup lvg) => (T?)lvg.Tag;

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static T? e_TagAs<T>(this ListViewItem li) => (T?)li.Tag;

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static T? e_TagAs<T>(this TreeNode nd) => (T?)nd.Tag;

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static T? e_TagAs<T>(this Control ctl) => (T?)ctl.Tag;

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static int e_ItemsCount_Selected(this ListView lvw) => lvw.SelectedItems.Count;

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static int e_ItemsCount_Checked(this ListView lvw) => lvw.CheckedItems.Count;

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static int e_ItemsCount(this ListView lvw) => lvw.Items.Count;


			#region ItemsAndTags2

			public sealed class ListViewItemAndTag<T>
			{
				public ListViewItem Item { get; set; }

				public ListViewItemAndTag(ListViewItem li) : base() { Item = li; }

				public T? Tag => Item.e_TagAs<T>();
			}


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static IEnumerable<T?> e_Tags<T>(this IEnumerable<ListViewItemAndTag<T>> A)
				=> A.Select(li => li.Tag);

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static IEnumerable<ListViewItem> e_Items<T>(this IEnumerable<ListViewItemAndTag<T>> A)
				=> A.Select(li => li.Item);

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static IEnumerable<ListViewItemAndTag<T>> e_ItemsAndTags<T>(this IEnumerable<ListViewItem> A)
				=> A.Select(li => new ListViewItemAndTag<T>(li));

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static IEnumerable<ListViewItemAndTag<T>> e_ItemsAndTags<T>(this ListViewGroup G)
				=> e_ItemsAndTags<T>(G.e_ItemsAsIEnumerable());

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static IEnumerable<ListViewItemAndTag<T>> e_ItemsAndTags<T>(this ListView lvw)
				=> e_ItemsAndTags<T>(lvw.e_ItemsAsIEnumerable());

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static IEnumerable<ListViewItemAndTag<T>> e_SelectedItemsAndTags<T>(this ListView lvw)
				=> e_ItemsAndTags<T>(lvw.e_SelectedItemsAsIEnumerable());

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static IEnumerable<ListViewItemAndTag<T>> e_CheckedItemsAndTags<T>(this ListView lvw)
				=> e_ItemsAndTags<T>(lvw.e_CheckedItemsAsIEnumerable());


			#endregion


			#region ItemsAs


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static IEnumerable<T> e_ItemsAs<T>(this ListViewGroup lvg) where T : ListViewItem => lvg.Items.Cast<T>();

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static IEnumerable<T> e_ItemsAs<T>(this ListView lvw) where T : ListViewItem => lvw.Items.Cast<T>();

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static IEnumerable<T> e_SelectedItemsAs<T>(this ListView lvw) where T : ListViewItem => lvw.SelectedItems.Cast<T>();

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static IEnumerable<T> e_CheckedItemsAs<T>(this ListView lvw) where T : ListViewItem => lvw.CheckedItems.Cast<T>();

			#endregion

			#endregion

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static IEnumerable<ColumnHeader> e_ColumnsAsIEnumerable(this ListView lvw) => lvw.Columns.Cast<ColumnHeader>();

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static ListViewGroup? e_GroupsGetByKey(this ListView lvw, string? key)
				=> lvw.e_GroupsAsIEnumerable().Where(grp => (grp.Name ?? "") == (key ?? "")).FirstOrDefault();


			/// <summary>Предыдущий элемент (Index меньше на 1)</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static ListViewItem? e_Previous(this ListViewItem li)
				=> (li.Index <= 0) ? null : li.ListView.Items[li.Index - 1];

			/// <summary>Предыдущий элемент в той же группе (Index меньше на 1)</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static ListViewItem? e_PreviousInGroup(this ListViewItem li)
			{
				var liPrev = li.e_Previous();
				if (liPrev != null && object.ReferenceEquals(liPrev.Group, li.Group)) return liPrev;
				return null;
			}


			/// <summary>Next элемент (Index +1)</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static ListViewItem? e_Next(this ListViewItem li)
				=> (li.Index >= (li.ListView.Items.Count - 1)) ? null : li.ListView.Items[li.Index + 1];


			/// <summary>Next элемент в той же группе (Index +1)</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static ListViewItem? e_NextInGroup(this ListViewItem li)
			{
				var liNext = li.e_Next();
				if (liNext != null && object.ReferenceEquals(liNext.Group, li.Group)) return liNext;
				return null;
			}



			/// <summary>Counts distance from cursor to the nearest item in the list.</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static (ListViewItem? Item, Size? VectorToItemCenter, Double? Distance) e_GetNearestItem(this ListView lvw, Point pt)
			{
				if (lvw.Items.Count < 1) return (null, null, null);

				var nearest = lvw.Items
							.Cast<ListViewItem>()
							.Select(item =>
							{
								Rectangle rcItem = item.GetBounds(ItemBoundsPortion.Entire);
								var ptItemCenter = rcItem.e_GetCenter().e_RoundToInt();

								var szDistace = pt.e_GetVectorTo(ptItemCenter);
								var hyp = szDistace.e_GetHypotenuse();
								var hypA = Math.Abs(hyp);
								return (Item: item, VectorToItemCenter: szDistace, Distace: hyp, DistaceAbs: hypA, Center: ptItemCenter);
							})
							.OrderBy(r => r.Distace)
							.FirstOrDefault();

				return (nearest.Item, nearest.VectorToItemCenter, nearest.Distace);
			}


			/// <summary>Counts distance from cursor to the nearest item in the list.</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void e_Activate(this ListViewItem li, bool deactivateOther = true)
			{
				ListView? lvw = li.ListView as ListView;

				lvw?.e_runOnLockedUpdate(delegate
				{
					if (deactivateOther)
						lvw?.e_ItemsAsIEnumerable().ToList().ForEach(li => li.Selected = false);

					li.Selected = true;
					li.Focused = true;
					li.EnsureVisible();
				});
			}
		}


		[EditorBrowsable(EditorBrowsableState.Never)]
		internal static partial class Extensions_Controls_ProgressBar
		{
			internal enum PBM_STATES : int
			{
				PBST_NORMAL = 1,
				PBST_ERROR = 2,
				PBST_PAUSE = 3
			}

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static void e_SetState(this ProgressBar pb, PBM_STATES state)
			{
				const int PBM_SETSTATE = 0x400 + 16;
				_ = uom.WinAPI.Windows.SendMessage(pb.Handle, PBM_SETSTATE, (int)state, 0);
			}

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static void e_SetValues(
				this ProgressBar pb,
				int iMin = 0,
				int iMax = 100,
				int iValue = 0)
			{
				pb.SuspendLayout();
				try
				{
					pb.Minimum = iMin;
					pb.Maximum = iMax;
					pb.Value = iValue;
				}
				finally
				{
					pb.ResumeLayout();
					pb.Update();
				}
			}
		}


		[EditorBrowsable(EditorBrowsableState.Never)]
		internal static partial class Extensions_Controls_CommonDislogs
		{


			public const string C_DEFAULT_XML_EXT = "xml";
			public const string C_DEFAULT_XML_EXPORT_FILTER = "XML-files|*." + C_DEFAULT_XML_EXT;


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void e_InitDefault(this SaveFileDialog sfd, string defaultExt, string filter)
			{
				sfd.ShowHelp = false;
				sfd.AddExtension = true;
				sfd.AutoUpgradeEnabled = true;
				sfd.CheckPathExists = true;
				sfd.DereferenceLinks = true;
				sfd.DefaultExt = defaultExt;
				sfd.SupportMultiDottedExtensions = true;
				sfd.ValidateNames = true;
				sfd.Filter = filter;
				sfd.OverwritePrompt = true;
			}


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void e_InitDefault(this OpenFileDialog ofd, string defaultExt, string filter, bool Multiselect = false)
			{
				ofd.ShowHelp = false;
				ofd.ShowReadOnly = false;

				ofd.AutoUpgradeEnabled = true;

				ofd.AddExtension = true;
				ofd.CheckPathExists = true;
				ofd.CheckFileExists = true;
				ofd.DereferenceLinks = true;
				ofd.SupportMultiDottedExtensions = true;
				ofd.ValidateNames = true;
				ofd.Multiselect = Multiselect;

				ofd.Filter = filter;
				if (defaultExt.e_IsNOTNullOrWhiteSpace()) ofd.DefaultExt = defaultExt;
			}


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static string[] e_OpenLoadFilesDialog(
				this Form owner,
				string defaultExt = "",
				string filter = C_DEFAULT_XML_EXPORT_FILTER,
				bool multiselect = true,
				string initialFile = "",
				string initialDirectory = "")
			{
				using OpenFileDialog ofd = new();
				ofd.e_InitDefault(defaultExt, filter, multiselect);

				ofd.Filter = filter;

				if (initialFile.e_IsNOTNullOrWhiteSpace()) ofd.FileName = initialFile;
				if (initialDirectory.e_IsNOTNullOrWhiteSpace()) ofd.InitialDirectory = initialDirectory;

				return (ofd.ShowDialog(owner) != DialogResult.OK)
					? Array.Empty<string>()
					: ofd.FileNames;
			}


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static string e_OpenLoadFileDialog(
				this Form owner,
				string defaultExt = "",
				string filter = C_DEFAULT_XML_EXPORT_FILTER,
				string initialFile = "",
				string initialDirectory = "")
				=> e_OpenLoadFilesDialog(owner,
					defaultExt,
					filter,
					false,
					initialFile,
					initialDirectory).FirstOrDefault() ?? string.Empty;



			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static string e_OpenLoadFileDialog(
				this Form owner,
				string defaultExt = "",
				string filter = C_DEFAULT_XML_EXPORT_FILTER,
				string initialFile = "",
				Environment.SpecialFolder initialDirectory = Environment.SpecialFolder.DesktopDirectory)
				=> e_OpenLoadFileDialog(owner,
					defaultExt,
					filter,
					initialFile,
					System.Environment.GetFolderPath(initialDirectory));



			/*









					<DebuggerNonUserCode, DebuggerStepThrough>
					<MethodImpl(MethodImplOptions.AggressiveInlining), Extension()>
					Public Function e_OpenSaveFileDialog(ParentForm As Form,
															  Optional sDefaultFileName As String = vbNullString,
															  Optional sDefaultExt As String = C_DEFAULT_XML_EXT,
															  Optional sFilter As String = C_DEFAULT_XML_EXPORT_FILTER,
															  Optional sAutoFileNameSuffix As String = "Данные от",
															  Optional neInitialDirectory As Nullable(Of Environment.SpecialFolder) = Environment.SpecialFolder.DesktopDirectory) As String
						Using SFD As New SaveFileDialog
							With SFD
								If (sDefaultFileName.e_IsNullOrWhiteSpace) Then
									sDefaultFileName = Now.ToFileName
									If (sAutoFileNameSuffix.e_IsNOTNullOrWhiteSpace) Then sDefaultFileName = sAutoFileNameSuffix & " " & sDefaultFileName
								End If
								.FileName = sDefaultFileName

								.DefaultExt = sDefaultExt
								.Filter = sFilter

								.AddExtension = True
								.AutoUpgradeEnabled = True
								.CheckPathExists = True
								.DereferenceLinks = True
								.ShowHelp = False
								.SupportMultiDottedExtensions = True
								.ValidateNames = True


								If neInitialDirectory.HasValue Then
									Dim eInitialDirectory = neInitialDirectory.Value
									.InitialDirectory = Environment.GetFolderPath(eInitialDirectory)
								End If

								If (.ShowDialog(ParentForm) <> Forms.DialogResult.OK) Then Return vbNullString

								Return .FileName
							End With
						End Using
					End Function





	# End Region


							 */













		}


		[EditorBrowsable(EditorBrowsableState.Never)]
		internal static class Extensions_IO_Win
		{

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static FileInfo e_GetFileIn_AppDir(this string FileName)
				=> new(Path.Combine(System.Windows.Forms.Application.StartupPath, FileName));


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static string e_GetFileIn_AppData_Local(this string FileName)
				=> Path.Combine(AppInfo.UserAppDataPath_Local().FullName, FileName);


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static string e_GetFileIn_AppData_Roaming(this string FileName)
				=> Path.Combine(AppInfo.UserAppDataPath_Roaming().FullName, FileName);





			[Obsolete("Устаревший класс! использовать надо многопоточный поисковик многоплатформенный", true)]
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static FileInfo[] e_SearchFile(
				this DirectoryInfo Dir,
				string SearchPattern,
				bool OnlyForFirstFile = true,
				bool SkipNTFSJunctions = true,
				Action<Exception>? ErrorHandler = null)
			{
				var leFound = new List<FileInfo>();
				try // Поиск в текущей папке
				{
					var aFoundFiles = Dir.GetFiles(SearchPattern, SearchOption.TopDirectoryOnly);
					if (aFoundFiles.Any())
					{
						lock (leFound)
						{
							if (OnlyForFirstFile)
							{
								leFound.Add(aFoundFiles.First());
								return leFound.ToArray();
							}

							leFound.AddRange(aFoundFiles);
						}
					}
				}
				catch (Exception ex)
				{ ErrorHandler?.Invoke(ex); }



				// Поиск в подкаталогах
				try
				{
					var aSubDirs = Dir.GetDirectories();
					var aFoundFiles = aSubDirs.e_SearchFile(SearchPattern, OnlyForFirstFile, SkipNTFSJunctions, ErrorHandler);
					if (aFoundFiles.Any())
					{
						lock (leFound)
						{
							if (OnlyForFirstFile)
							{
								leFound.Add(aFoundFiles.First());
								return leFound.ToArray();
							}

							leFound.AddRange(aFoundFiles);
						}
					}
				}
				catch (Exception ex)
				{ ErrorHandler?.Invoke(ex); }

				return leFound.ToArray();
			}

#if NETFRAMEWORK
			[ MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static string? e_ExtractAssociatedIcon(
				this FileInfo App,
				ImageList IML,
				bool TryLoadFileAsImage = false) => App!.FullName!.e_ExtractAssociatedIcon(IML, TryLoadFileAsImage);


			[ MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static string? e_ExtractAssociatedIcon(this string sPath, ImageList IML, bool TryLoadFileAsImage = false)
			{
				lock (IML)
				{
					sPath = sPath.ToLower();
					if (IML.Images.ContainsKey(sPath)) return sPath; // Для этого файла уже была извлечена иконка - используем её

					// Иконка ещё не извлекалась - Пытаемся извлечь её 
					if (TryLoadFileAsImage)
					{
						try
						{
							var BM = new Bitmap(sPath);
							// Image loaeded OK! Creating Icon
							var rFileIcon = BM.e_CreateIcon(IML.ImageSize);
							if (rFileIcon != null)
							{
								var FileIcon_16 = new Icon(rFileIcon, IML.ImageSize);
								IML.Images.Add(sPath, FileIcon_16);
								return sPath;
							}
						}
						catch
						{
						}
						// Failed to load file as image!
					}

					// Use System Default Icon Extractor
					try
					{
						System.Drawing.Icon rFileIcon = System.Drawing.Icon.ExtractAssociatedIcon(sPath)!;
						System.Drawing.Icon FileIcon_16 = new Icon(rFileIcon, IML.ImageSize);
						IML.Images.Add(sPath, FileIcon_16);
						return sPath;
					}
					catch
					{
					}

					return null;
				}
			}



#endif



			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static System.Drawing.Icon? e_ExtractAssociatedIcon(this string sFile)
				=> System.Drawing.Icon.ExtractAssociatedIcon(sFile);


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static System.Drawing.Icon? e_ExtractAssociatedIcon(this FileSystemInfo FI)
				=> FI.FullName.e_ExtractAssociatedIcon();


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static void e_OpenExplorer(this FileSystemInfo FI, uom.AppTools.WindowsExplorerPathModes PathMode = uom.AppTools.C_DEFAULT_EXPLORER_MODE)
				=> FI.FullName.e_OpenExplorer(PathMode);


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static void e_OpenExplorer(this string sPath, uom.AppTools.WindowsExplorerPathModes PathMode = uom.AppTools.C_DEFAULT_EXPLORER_MODE)
				=> uom.AppTools.StartWinSysTool_Explorer(sPath, PathMode);


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static void e_OpenURLInBrowser(this string uri)
			{
				ProcessStartInfo psi = new()
				{
					UseShellExecute = true,
					FileName = uri
				};
				Process.Start(psi);
			}


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static (string? Description, FileVersionInfo? Version)
				e_GetFileTitle(
				this FileInfo fi,
				string? DefaultTitle = null)
			{
				DefaultTitle ??= fi.FullName;

				if (!fi.Exists) return (DefaultTitle, null);
				string sTitle = fi.Name;
				var Ver = FileVersionInfo.GetVersionInfo(fi.FullName);
				if (Ver.FileDescription.e_IsNOTNullOrWhiteSpace()) sTitle = Ver.FileDescription!;
				return (sTitle, Ver);
			}


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static DirectoryInfo e_CheckPath(this string sPath, Environment.SpecialFolder defaultDir = Environment.SpecialFolder.DesktopDirectory)
			{
				if (sPath.e_IsNullOrWhiteSpace() || !Directory.Exists(sPath)) sPath = Environment.GetFolderPath(defaultDir);
				return new(sPath.Trim());
			}


			/// <summary>Determines whether a path to a file system object such as a file or folder is valid</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static bool e_Shell_IsExist(this string sPath) => uom.WinAPI.Shell.PathFileExists(sPath);


			/// <summary>Use UOM.Win32.Shell.PathIsDirectory</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static bool e_Shell_IsDirectoryWin32(this string sPath) => uom.WinAPI.Shell.PathIsDirectory(sPath);


			/// <summary>Использует Shell API PathRelativePathTo</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static FileAttributes e_ToNETFileAttributes(this WinAPI.IO.EFileAttributes WinFileAttrs) => (FileAttributes)(int)WinFileAttrs;


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static bool e_Shell_IsNetworkPath(this FileSystemInfo Path) => uom.WinAPI.Shell.PathIsNetworkPath(Path.FullName);


			/// <summary>Использует Shell API PathRelativePathTo</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static string e_Shell_GetRelativeTo(this FileSystemInfo PathFrom, FileSystemInfo PathTo)
				=> uom.WinAPI.Shell.GetRelativePathTo(PathFrom.FullName, PathFrom.Attributes, PathTo.FullName, PathTo.Attributes);


			[Obsolete("Use new multithread scanner", true)]
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static FileInfo[] e_SearchFile(
				this DirectoryInfo[] aDirs,
				string SearchPattern,
				bool OnlyForFirstFile = true,
				bool SkipNTFSJunctions = true,
				Action<Exception>? ErrorHandler = null)
			{
				throw new NotImplementedException();


				//var leFound = new List<FileInfo>();
				//foreach (var rDir in aDirs)
				//{
				//    if (SkipNTFSJunctions && rDir.FullName.e_IsNTFS_SymLink_Win32())
				//    {
				//        // Skip
				//    }
				//    else
				//    {
				//        var aFoundFiles = rDir.e_SearchFile(SearchPattern, OnlyForFirstFile, SkipNTFSJunctions, ErrorHandler);
				//        if (aFoundFiles.Any())
				//        {
				//            lock (leFound)
				//            {
				//                if (OnlyForFirstFile)
				//                {
				//                    leFound.Add(aFoundFiles.First());
				//                    return leFound.ToArray();
				//                }

				//                leFound.AddRange(aFoundFiles);
				//            }
				//        }
				//    }
				//}

				//return leFound.ToArray();
			}


			/// <summary>WinAPI FILE_ATTRIBUTE_REPARSE_POINT</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static bool e_IsNTFS_SymLink_WinAPI(this string sPath)
				=> WinAPI.IO.GetFileAttributes(sPath).HasFlag(WinAPI.IO.EFileAttributes.FILE_ATTRIBUTE_REPARSE_POINT);


			/// <summary>Получаем из реестра описание типа файла по расширению</summary>
			/// <param name="FileExt">Расширение файла, например '.exe'</param>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static string e_GetFileTypeDescription(this string FileExt)
			{

				throw new NotImplementedException();


				//    const string CS_FRIENDLY_TYPE_NAME = "FriendlyTypeName";
				//    string sResult = null;
				//    bool bEmptyExt = FileExt.e_IsNullOrWhiteSpace();

				//    if (!bEmptyExt)
				//    {
				//        FileExt = FileExt.ToLower().Trim();
				//        var keyRoot = Registry.ClassesRoot;
				//        try
				//        {
				//            using (var keyFileExt = keyRoot.OpenSubKey(FileExt, RegistryKeyPermissionCheck.ReadSubTree))
				//            {
				//                if (keyFileExt != null)
				//                {
				//                    string sTypeKeyName = constants.ToString(keyFileExt.GetValue(null, null));
				//                    if (sTypeKeyName.e_IsNOTNullOrWhiteSpace())
				//                    {
				//                        using (var keyFileType = keyRoot.OpenSubKey(sTypeKeyName, false))
				//                        {
				//                            if (keyFileType != null)
				//                            {
				//                                string sTypeDescription = null;
				//                                var aValueNames = keyFileType.GetValueNames().ToArray();
				//                                bool bHasFriendlyTypeName = (from sValName in aValueNames
				//                                                             where (sValName.ToLower() ?? "") == (CS_FRIENDLY_TYPE_NAME.ToLower() ?? "")
				//                                                             select sValName).Any();
				//                                if (bHasFriendlyTypeName)
				//                                {
				//                                    string sFriendlyTypeName = constants.ToString(keyFileType.GetValue(CS_FRIENDLY_TYPE_NAME, null));
				//                                    if (sFriendlyTypeName.e_IsNOTNullOrWhiteSpace())
				//                                    {
				//                                        if (UOM.Win32.Resources.mResourcesAPI.HasResourceStringPrefix(sFriendlyTypeName))
				//                                            sFriendlyTypeName = UOM.Win32.Resources.mResourcesAPI.ExtractResourceString(sFriendlyTypeName);
				//                                        sTypeDescription = sFriendlyTypeName;
				//                                    }
				//                                }

				//                                if (sTypeDescription.e_IsNullOrWhiteSpace())
				//                                    sTypeDescription = constants.ToString(keyFileType.GetValue(null, null));
				//                                if (sTypeDescription.e_IsNOTNullOrWhiteSpace())
				//                                    sResult = sTypeDescription;
				//                            }
				//                        }
				//                    }
				//                }
				//            }
				//        }
				//        catch (Exception ex)
				//        {
				//            // 
				//        }
				//    }

				//    return sResult;
			}



			/// <summary>
			/// Convert local file path to full remote path: 'C:\Windows\explorer.exe' => '\\x.x.x.x\c$\Windows\explorer.exe'
			/// If 'local' path is like \\x.x.x.x\apps\var\any.exe, the path does not changes
			/// </summary>
			public static FileInfo e_RemoteHostLocalPathToNetworkPath(this string localPath, string remoteHost)
			{
				try
				{
					FileInfo fiApp = new FileInfo(localPath);   //'C:\Windows\explorer.exe' or '\\x.x.x.x\apps\var\app.exe'
					DirectoryInfo diRemote = fiApp.Directory!;  //'C:\Windows' or '\\x.x.x.x\apps'
					string sRoot = diRemote.Root.FullName;      //'C:\' or '\\x.x.x.x\apps'
					if (!(sRoot.Length == 3 && sRoot.EndsWith(@":\"))) return new FileInfo(localPath);

					char cDisk = sRoot.First();
					string dirPath = fiApp.Directory!.FullName.Substring(3);       //'Windows'
					dirPath = remoteHost.e_CreateWinSharePrefix() + @$"{cDisk}$\{dirPath}"; //'c$\Windows'
					string fullRemoteFilePath = Path.Combine(dirPath, fiApp.Name);          //'c$\Windows\explorer.exe'
					return new FileInfo(fullRemoteFilePath);
				}
				catch
				{
					return new FileInfo(localPath);
				}
			}

#if NET6_0_OR_GREATER
			/// <summary>
			/// Convert full remote path to remote host local file path: '\\x.x.x.x\c$\Windows\explorer.exe' => 'C:\Windows\explorer.exe'
			/// If remote path is like \\x.x.x.x\apps\var\any.exe, the path does not changes!
			/// If remote path host name or IP does not equal to 'remoteHost' arg, the path does not changes!
			/// </summary>
			public static FileInfo e_NetworkPathToRemoteHostLocalPath(this string remotePath, string remoteHost)
			{
				string netPrefix = remoteHost.e_CreateWinSharePrefix(); //'\\x.x.x.x/'
				if (!remotePath.ToLower().StartsWith(netPrefix.ToLower())) return new FileInfo(remotePath);// another remote host. do not modify path '\\y.y.y.y\aaaa\bbbb....'

				//Path starts with '\\host\', sample: '\\x.x.x.x\c$\Windows\System32\Defrag.exe'
				string path = remotePath.Substring(netPrefix.Length);            //'c$\Windows\System32\Defrag.exe' or 'c$\Windows\System32\Eap3Host.exe'

				const string MIN_REMOTE_PATH_TO_PARSE = @"c$\a.b";
				if (path.Length >= MIN_REMOTE_PATH_TO_PARSE.Length)
				{
					string diskPrefix = path.Substring(0, 3); //'c$\'
					char diskChar = diskPrefix.First();                             //'c'
					if (char.IsLetter(diskChar) && diskPrefix.EndsWith(@"$\"))// path like 'c$\', not like 'share1\dir2...'
					{
						path = string.Concat($@"{diskChar}:\", path.AsSpan(diskPrefix.Length));//'c:\Windows\System32\Defrag.exe'
						return new FileInfo(path);
					}
				}
				return new FileInfo(remotePath);//Dont change path
			}
#endif

		}


		[EditorBrowsable(EditorBrowsableState.Never)]
		internal static class Extensions_Errors_Win
		{

			#region ThrowLastWin32Exception

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static void e_ThrowLastWin32Exception(this string? DescriptionOfErrorAction)
				=> WinAPI.Errors.ThrowLastWin23Error(DescriptionOfErrorAction);

			/// <summary>Вызывает ошибку, только если условие истинно</summary>
			/// <param name="b">Если условие верно - вызывается ошибка</param>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static void e_ThrowLastWin32Exception_Assert(this bool b, string? DescriptionOfErrorAction = null)
			{
				if (b) e_ThrowLastWin32Exception(DescriptionOfErrorAction);
			}

			/// <summary>Вызывает ошибку если условие НЕВЕРНО!</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static void e_ThrowLastWin32Exception_AssertFalse(this bool b, string? DescriptionOfErrorAction = null)
			{
				if (!b) e_ThrowLastWin32Exception(DescriptionOfErrorAction);
			}

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static void e_ThrowLastWin32Exception_AssertFalse(this bool b, WinAPI.Errors.Win32Errors DoNotThrowErrorCode)
			{
				if (!b) DoNotThrowErrorCode.e_ThrowLastWin32Exception_IfNot();
			}


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static void e_ThrowLastWin32Exception_IfNot(this WinAPI.Errors.Win32Errors DoNotThrowErrorCode)
				=> new Win32Exception().e_ThrowIfNot(DoNotThrowErrorCode);


			/// <summary>Вызывает ошибку если указатель пуст</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static void e_ThrowLastWin32Exception_Assert_NUL(
				this IntPtr H,
				string? DescriptionOfErrorAction = null)
			{
				if (H.e_IsNotValid()) e_ThrowLastWin32Exception(DescriptionOfErrorAction);
			}


			#endregion

			#region Win32Exception Throw
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static void e_Throw(this Win32Exception WEX)
			{
				throw WEX;
			}

			/// <summary>Вызывает ошибку, если win32ErrorCode не равно 0 (ERROR_SUCCESS)</summary>
			/// <param name="win32ErrorCode">Проверяемый код ошибки</param>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static void e_ThrowIfError(this int win32ErrorCode)
			{
				var eResult = win32ErrorCode.e_ToWin32Error();
				if (eResult != WinAPI.Errors.Win32Errors.ERROR_SUCCESS) eResult.e_ToWin32Exception().e_Throw();
			}

			/// <summary>Вызывает ошибку, если win32ErrorCode не равно 0 (ERROR_SUCCESS)</summary>
			/// <param name="win32ErrorCode">Проверяемый код ошибки</param>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static void e_ThrowIfError(this WinAPI.Errors.Win32Errors eResult)
			{
				if (eResult != WinAPI.Errors.Win32Errors.ERROR_SUCCESS) eResult.e_ToWin32Exception().e_Throw();
			}


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static void e_ThrowIf(this Win32Exception WEX, WinAPI.Errors.Win32Errors ThrowErrorCode)
			{
				if (WEX.e_ToWin32Error() == ThrowErrorCode) throw WEX;
			}

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static void e_ThrowIfNot(this Win32Exception WEX, WinAPI.Errors.Win32Errors DoNotThrowErrorCode)
			{
				if (WEX.e_ToWin32Error() != DoNotThrowErrorCode) throw WEX;
			}

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static void e_ThrowIfNot(this WinAPI.Errors.Win32Errors EX, WinAPI.Errors.Win32Errors DoNotThrowErrorCode)
			{
				if (EX == DoNotThrowErrorCode) return;
				throw new Win32Exception((int)EX);
			}



			#endregion

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static WinAPI.Errors.Win32Errors e_ToWin32Error(this WinAPI.MTSync.WaitResults WR)
				=> (WinAPI.Errors.Win32Errors)WR;

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static WinAPI.Errors.Win32Errors e_ToWin32Error(this int iError)
				=> (WinAPI.Errors.Win32Errors)iError;

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static WinAPI.Errors.Win32Errors e_ToWin32Error(this Win32Exception WEX)
				=> (WinAPI.Errors.Win32Errors)WEX.NativeErrorCode;

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static Win32Exception e_ToWin32Exception(this WinAPI.Errors.Win32Errors eError)
				=> new((int)eError);

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static Win32Exception e_ToWin32Exception(this int iError)
				=> new(iError);


			#region FIX ERROR Engine

			#region e_FIX_ERROR_FullErrorDump / e_FIX_ERROR_DumpExceptionTree
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			private static string e_FIX_ERROR_DumpExceptionTree(this Exception rEx)
			{
				var sbExceptionTree = new StringBuilder();
				using (var TW = new StringWriter(sbExceptionTree))
				{
					rEx.DumpExceptionTree(TW);
				}

				return sbExceptionTree.ToString();
			}

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			private static void DumpExceptionTree(this Exception rEx, StringWriter TW)
			{
				TW.WriteLine(rEx.GetType().ToString());
				TW.WriteLine(rEx.Message);
				TW.WriteLine(constants.vbTab + "StackTrace:");
				TW.WriteLine(rEx.StackTrace);
				while (rEx.InnerException != null)
				{
					rEx = rEx.InnerException;
					TW.WriteLine();
					TW.WriteLine("    ^^^^^^^ InnerException Exception: ^^^^^^^^^");
					rEx.DumpExceptionTree(TW);
				}
			}

			// '''<summary>Фиксация ошибки в журнале и в DEBUG MODE вывод сообщения</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static string e_FIX_ERROR_FullErrorDump(this Exception EX)
			{
				string sMessageText = EX.e_FIX_ERROR_DumpExceptionTree();
				sMessageText += constants.CS_CONSOLE_SEPARATOR;
				return sMessageText;
			}

			#endregion
			internal const string C_FAILED_TO_RUN_RUS = "Не удалось выполнить запрашиваемое действие!";
			internal const string C_FAILED_TO_RUN_ENG = "Failed to execute!";
			internal const string C_FAILED_TO_RUN = C_FAILED_TO_RUN_ENG;

			/*	   */
			/// <summary>Вызывает Callback внутри Try/Catch и при ошибке автоматом вызывает ex.e_FIX_ERROR(ShowModalMessageBox)</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static void e_runTryCatch(this Action a,
						bool onErrorShowModalMessageBox = true,
						string errorMessageBoxTitle = C_FAILED_TO_RUN,
						MessageBoxIcon icon = MessageBoxIcon.Error,
						MessageBoxButtons btn = MessageBoxButtons.OK,
						bool supressAnyModalPopEvenInDEBUG = false)
			{
				try { a.Invoke(); }
				catch (Exception ex) { ex.e_FIX_ERROR(onErrorShowModalMessageBox, errorMessageBoxTitle, icon, btn, supressAnyModalPopEvenInDEBUG); }
			}


			/// <summary>Вызывает Callback внутри Try/Catch и при ошибке автоматом вызывает ex.e_FIX_ERROR(ShowModalMessageBox)</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static void e_runTryCatch(this MethodInvoker a,
						bool onErrorShowModalMessageBox = true,
						string errorMessageBoxTitle = C_FAILED_TO_RUN,
						MessageBoxIcon icon = MessageBoxIcon.Error,
						MessageBoxButtons btn = MessageBoxButtons.OK,
						bool supressAnyModalPopEvenInDEBUG = false)
			{
				try { a.Invoke(); }
				catch (Exception ex) { ex.e_FIX_ERROR(onErrorShowModalMessageBox, errorMessageBoxTitle, icon, btn, supressAnyModalPopEvenInDEBUG); }
			}



			/// <summary>Фиксация ошибки в журнале, в DEBUG, вывод сообщения</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static void e_FIX_ERROR(this Exception EX,
				bool ShowModalMessageBox,
				string ModalMessageBoxTitle = C_FAILED_TO_RUN,
				MessageBoxIcon icon = MessageBoxIcon.Error,
				MessageBoxButtons btn = MessageBoxButtons.OK,
				bool SupressAnyModalPopEvenInDEBUG = false)
			{
				try
				{
					string sMessage = EX.Message;
					string sFullExceptionInfo = EX.e_FIX_ERROR_FullErrorDump();
					WinAPI.Errors.NTLogWrite(sFullExceptionInfo, EventLogEntryType.Error);

#if DEBUG
					//Показываем в DEBUG окне IDE
					constants.CS_CONSOLE_SEPARATOR.DEBUG_SHOW_LINE();
					sFullExceptionInfo.DEBUG_SHOW_LINE();
					constants.CS_CONSOLE_SEPARATOR.DEBUG_SHOW_LINE();

					//Показываем расширенные данные в DEBUG режиме
					sMessage += constants.vbCrLf + constants.CS_CONSOLE_SEPARATOR + constants.vbCrLf + "UOM DEBUG-MODE DETAILED ERROR INFO: " + constants.vbCrLf + sFullExceptionInfo;
#endif

					if (ShowModalMessageBox) // Надо показать на экране модальное Сообщение об ошибке
						MessageBox.Show(sMessage, ModalMessageBoxTitle, btn, icon);
					else
					{
#if DEBUG
						if (!SupressAnyModalPopEvenInDEBUG)
							MessageBox.Show(sMessage, ModalMessageBoxTitle, btn, icon); //В DEBUG режиме показываем модальное окно с ошибкой, если прямо не запрещено!
#endif
					}
				}
				catch (Exception ex2)
				{ if (ShowModalMessageBox) MessageBox.Show(ex2.Message, "Error when journaling previous error!", MessageBoxButtons.OK, MessageBoxIcon.Error); }
			}

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static void e_FIX_ERROR_CONSOLE(this Exception EX, bool ShowFullErrorInfo = false)
			{
				const string C_CONSOLE_ERROR_HEADER = "*** ERROR:" + constants.vbCrLf;
				string sErrorMsg = C_CONSOLE_ERROR_HEADER + EX.Message;

				/* TODO ERROR: Skipped IfDirectiveTrivia
	#if DEBUG
				*//* TODO ERROR: Skipped DisabledTextTrivia
						ShowFullErrorInfo = True
				*//* TODO ERROR: Skipped EndIfDirectiveTrivia
	#endif
				*/
				if (ShowFullErrorInfo)
				{
					sErrorMsg = C_CONSOLE_ERROR_HEADER + EX.e_FIX_ERROR_FullErrorDump();
				}

				Console.WriteLine(constants.CS_CONSOLE_SEPARATOR);
				Console.WriteLine(sErrorMsg);
				Console.WriteLine(constants.CS_CONSOLE_SEPARATOR);
			}


#if NETFRAMEWORK


			private partial class FORM_ATTACHMENT
			{
				private static readonly Size C_DEFAULT_ERROR_FORM_MINIMUMSIZE = new(300, 200);
				private static readonly Size C_DEFAULT_ERROR_FORM_SIZE = new(
					(int)Math.Round(C_DEFAULT_ERROR_FORM_MINIMUMSIZE.Width * 2d),
					(int)Math.Round(C_DEFAULT_ERROR_FORM_MINIMUMSIZE.Height * 2d));

				public readonly Form? parentForm = null;
				private volatile Form? __frmError = null;

				private Form? _frmError
				{
					[MethodImpl(MethodImplOptions.Synchronized)]
					get => __frmError;

					[MethodImpl(MethodImplOptions.Synchronized)]
					set
					{
						if (__frmError != null) __frmError.FormClosing -= OnErrorFormClosing!;//Unsubscribe from form events

						__frmError = value;
						if (__frmError != null) __frmError.FormClosing += OnErrorFormClosing!;
					}
				}

				private readonly MTSafeBooleanFlag _IsfrmErrorClosing = new();
				private readonly TextBox _ctlTextBox;
				private int _iTotalErrorsCount = 0;

				//private readonly EventArgs _ErrorsQueueSyncObject = new EventArgs();
				private readonly Queue<Exception> _qErrorsToShow = new(); // Очередь сообщений об ошибках для показа

				public FORM_ATTACHMENT(Form PF) : base()
				{
					parentForm = PF;
					_frmError = new Form();
					{
						var withBlock = _frmError;
						withBlock.Text = "Ошибки";
						withBlock.Icon = SystemIcons.Error;
						withBlock.Owner = PF;
						withBlock.FormBorderStyle = FormBorderStyle.SizableToolWindow;
						withBlock.StartPosition = FormStartPosition.CenterParent;
						withBlock.ShowInTaskbar = false;
						withBlock.ShowIcon = true;
						withBlock.SizeGripStyle = SizeGripStyle.Show;
						withBlock.ControlBox = true;
						withBlock.Padding = new Padding(8);
						withBlock.MinimumSize = C_DEFAULT_ERROR_FORM_MINIMUMSIZE;
						var szParent = parentForm.Size;
						int iErrorWindowsWidth = (int)(0.7F * (float)szParent.Width);
						var szError = new Size(iErrorWindowsWidth, C_DEFAULT_ERROR_FORM_SIZE.Height);
						withBlock.Size = szError;
						_ctlTextBox = new TextBox()
						{
							Multiline = true,
							ReadOnly = true,
							ScrollBars = ScrollBars.Both,
							Dock = DockStyle.Fill,
							Text = ""
						};

						withBlock.Controls.Add(_ctlTextBox);
					}

					UpdateFormTitle();
					_IsfrmErrorClosing.ClearFlag();
					StartWatchTimer();
				}

				private void UpdateFormTitle() => _frmError!.Text = "Ошибки: {0}".e_Format((object)_iTotalErrorsCount);

				//private FormClosingEventHandler _OnErrorFormClosing2233 = new(OnErrorFormClosing);

				/// <summary>При попытке зукрыть окно не закрываем его, а просто скрываем</summary>
				private void OnErrorFormClosing(object sender, System.Windows.Forms.FormClosingEventArgs e)
				{
					if (CloseReason.UserClosing == e.CloseReason)
					{
						e.Cancel = true;
						_frmError?.Hide();
						return;
					}

					_IsfrmErrorClosing.SetlFlag(); // Ставим флаг, что форма начала закрываться, и больше ничего показывать нельзя.
				}

				private const int C_WATCH_TIMER = 2000;
				private System.Windows.Forms.Timer? __tmrWatchErrors = null;

				//private System.Windows.Forms.Timer _tmrWatchErrors
				//{
				//    [MethodImpl(MethodImplOptions.Synchronized)]
				//    get => __tmrWatchErrors;

				//    [MethodImpl(MethodImplOptions.Synchronized)]
				//    set
				//    {
				//        if (__tmrWatchErrors != null) __tmrWatchErrors.Tick -= (_, __) => WatchNewErrorrs();

				//        __tmrWatchErrors = value;
				//        if (__tmrWatchErrors != null) __tmrWatchErrors.Tick += (_, __) => WatchNewErrorrs();
				//    }
				//}

				private void StartWatchTimer()
				{
					__tmrWatchErrors = new System.Windows.Forms.Timer()
					{
						Interval = C_WATCH_TIMER,
						Enabled = false
					};
					__tmrWatchErrors.Tick += (s, e) => WatchNewErrorrs();
					__tmrWatchErrors.Start();
				}


				// Работает в потоке формы _frmError, смотрит очередь на наличие новых ошибок
				private async void WatchNewErrorrs()
				{
					__tmrWatchErrors?.Stop(); // Останавливаем таймер, чтобы из-за длительного выполнения не накладывались обработчики таймера
					if (_IsfrmErrorClosing.IsSet) return; // форма начала закрываться, и больше ничего показывать нельзя. Таймер перезапускать не обязательно.

					try
					{
						if (null != _frmError && !_frmError.Handle.e_IsValid()) return; // Негде показать. Таймер перезапускать не обязательно.
					}
					catch { }

					try
					{
						// Формируем простыню с ошибками неблокируя UI
						int iErrorsFound = 0;
						var PrepareAllErrorsInfoCallBack = new Func<string?>(() =>
						 {
							 var aErrorsToShow = Array.Empty<Exception>();
							 lock (_qErrorsToShow) // Занимаем очередь, начинаем ждать освобождения занятой очереди
							 {
								 {
									 //var withBlock = _qErrorsToShow;
									 if (!_qErrorsToShow.Any()) return null;  // Очередь пуста - выходим

									 // В списке на показ есть ошибки, забираем их и показываем.
									 aErrorsToShow = _qErrorsToShow.ToArray(); _qErrorsToShow.Clear();
								 }
							 } // освобождаем очередь

							 iErrorsFound = aErrorsToShow.Count();
							 if (iErrorsFound < 1) return null;

							 var sbAllErrors = new StringBuilder();
							 foreach (var EX in aErrorsToShow)
							 {
								 try
								 {
#if DEBUG
									 var sMSG = EX.e_FIX_ERROR_FullErrorDump() + constants.vbCrLf;
#else
									 var sMSG = EX.Message + constants.vbCrLf;
#endif
									 sbAllErrors.Append(sMSG);
								 }
								 catch { }
							 }
							 return sbAllErrors.ToString();
						 });

						string? sAllErrors = await PrepareAllErrorsInfoCallBack.e_RunAsync();
						if (sAllErrors.e_IsNullOrWhiteSpace()) return;

						// Показываем все ошибки, полученные из очереди.
						_iTotalErrorsCount += iErrorsFound;
						{
							// Показываем ошибки в TextBox
							try { _ctlTextBox!.AppendText(sAllErrors); }
							catch
							{
								// Может быть косяк, если текста ООЧЕНЬ много
								try
								{
									// Пытаемся очистить и снова добавить
									_ctlTextBox!.Clear();
									_ctlTextBox!.AppendText(sAllErrors);
								}
								catch { }
							}

							UpdateFormTitle();

							// Если форма скрыта - показываем её
							if (!_frmError!.Visible)
							{
								var szChild = _frmError.Size;
								var szParent = parentForm!.Size;
								int X = (szParent.Width - szChild.Width) / 2;
								int Y = (szParent.Height - szChild.Height) / 2;
								var ptLocation = parentForm.Location;
								ptLocation.X += X;
								ptLocation.Y += Y;
								_frmError.Location = ptLocation;
								_frmError.Show(parentForm);
							}
						}
					}
					catch { }
					finally { __tmrWatchErrors?.Start(); }// Перезапускаем таймер
				}

				/// <summary>Выполняется в чужом потоке, помещает ошибку в очередь на показ</summary>
				public void AddErrorToQueue(Exception EX)
				{
					try { EX.e_FIX_ERROR(false, SupressAnyModalPopEvenInDEBUG: true); }// Пишем ошибку в журнал
					catch { }
					lock (_qErrorsToShow) _qErrorsToShow.Enqueue(EX);
				}




				// Public Sub ShowError(EX As Exception)
				// Try
				// Call EX.e_FIX_ERROR(False,,, True) 'Пишем ошибку в журнал

				// If (_frmError Is Nothing) OrElse (Not _frmError.Handle.IsValid) Then Return 'Негде показать
				// Catch : End Try

				// _iTotalErrorsCount += 1

				// With _frmError
				// If (Not .Visible) Then
				// .Location = New Point(0, 0)
				// Dim szChild = .Size
				// Dim szParent = ParentForm.Size

				// Dim X = CInt((szParent.Width - szChild.Width) / 2)
				// Dim Y = CInt((szParent.Height - szChild.Height) / 2)
				// Dim ptLocation = ParentForm.Location

				// ptLocation.X += X
				// ptLocation.Y += Y

				// .Location = ptLocation

				// Call .Show(ParentForm)
				// End If

				// Dim sMSG = EX.Message & vbCrLf
				// #if DEBUG
				// sMSG = EX.e_FIX_ERROR_FullErrorDump & vbCrLf
				// #endif
				// Call _ctlTextBox.AppendText(sMSG)

				// Call UpdateFormTitle()

				// Call .Update()
				// End With
				// End Sub



			}

			/// <summary>Внутренний список родительских форм и сопоставленных ERROR-окон</summary>
			private static readonly List<FORM_ATTACHMENT> _lListOfAttachments = new();

			// ''' <summary>Выполняется в потоке UI формы frmErrorWindowParent</summary>
			// Private Sub ShowError_CORE(EX As Exception, frmErrorWindowParent As Form)
			// Dim FA As FORM_ATTACHMENT = Nothing

			// 'Ищем среди ранее зарегистрированных для формы окон 
			// SyncLock _lListOfAttachments
			// Dim aFound = (From A In _lListOfAttachments Where A.ParentForm Is frmErrorWindowParent).ToArray
			// If (Not aFound.Any) Then
			// 'Для этой родительской формы ещё не создавалось окна сообщений об ошибках!
			// FA = New FORM_ATTACHMENT(frmErrorWindowParent) 'Создаём новое
			// Call _lListOfAttachments.Add(FA)
			// Else
			// FA = aFound.First
			// End If
			// End SyncLock

			// Call FA.ShowError(EX)
			// End Sub
			// <DebuggerNonUserCode, DebuggerStepThrough>  Friend Sub e_FIX_ERROR_NONMODAL(ByVal EX As System.Exception, frmErrorWindowParent As Form)
			// Try
			// Call frmErrorWindowParent.e_runInUIThread(Sub() ShowError_CORE(EX, frmErrorWindowParent))

			// Catch ex2 As Exception
			// 'Неудалось показать ошибку в окне!
			// End Try
			// End Sub


			/// <summary>Выполняется в вызывающем потоке</summary>
			[ MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static void e_FIX_ERROR_NONMODAL(this Exception EX, Form frmErrorWindowParent)
			{
				try
				{
					FORM_ATTACHMENT? FA = null;

					// Ищем среди ранее зарегистрированных для формы окон 
					lock (_lListOfAttachments)
					{
						var aFound = (from A in _lListOfAttachments
									  where object.ReferenceEquals(A.parentForm, frmErrorWindowParent)
									  select A).ToArray();
						if (!aFound.Any())
						{
							// Для этой родительской формы ещё не создавалось окна сообщений об ошибках!
							void CreateNewAttachment(Form FP)
							{
								FA = new FORM_ATTACHMENT(FP); // Создаём новое
								_lListOfAttachments.Add(FA);
							};

							// Временно переходим в поток этой формы
							frmErrorWindowParent.e_runInUIThread(() => CreateNewAttachment(frmErrorWindowParent));
						}
						else
						{
							FA = aFound.First();
						}
					}

					// Добавляем сообщение об ошибке в очередь на показ.
					FA?.AddErrorToQueue(EX);
				}
				catch { }// Неудалось показать ошибку в окне!
			}
#endif
			#endregion

		}


		[EditorBrowsable(EditorBrowsableState.Never)]
		internal static class Extensions_Handle_Win
		{

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static bool e_CloseWin32Handle(this IntPtr H) => !H.e_IsValid() || WinAPI.core.CloseHandle(H);


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static Microsoft.Win32.SafeHandles.SafeFileHandle e_ToSafeFileHandle(this IntPtr hFile, bool ownsHandle = true, bool CheckNullHandleAndThrowCreateFileError = true)
			{
				if (CheckNullHandleAndThrowCreateFileError && !hFile.e_IsValid()) "CreateFile".e_ThrowLastWin32Exception();
				return new SafeFileHandle(hFile, ownsHandle);
			}


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			[DllImport(WinAPI.core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
			internal static extern bool IsBadCodePtr(this IntPtr lpfn);


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			[DllImport(WinAPI.core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
			internal static extern bool IsBadReadPtr(this IntPtr Memory, int Size);


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			[DllImport(WinAPI.core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
			internal static extern bool IsBadStringPtr(this IntPtr LPCTSTR, int Size);


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			[DllImport(WinAPI.core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
			internal static extern bool IsBadWritePtr(this IntPtr Memory, int Size);



			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static HandleRef e_CreateHandleReff(this Control Ctl)
				=> new(
					Ctl ?? throw new ArgumentNullException(nameof(Ctl)),
					Ctl.Handle);


			/// <summary>Reads the string from the memory block.</summary>
			/// <param name="iLenght">The length of the string to read, in characters.</param>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static string? e_PtrToString(
				this IntPtr Ptr,
				int iLenght = -1,
				uom.constants.E_STRING_TYPES stringType = uom.constants.E_STRING_TYPES.Uni)
			{
				if (iLenght == 0 || !Ptr.e_IsValid()) return null;

				string? S = (iLenght < 0)
					? stringType switch
					{
						uom.constants.E_STRING_TYPES.Auto => Marshal.PtrToStringAuto(Ptr),
						uom.constants.E_STRING_TYPES.Uni => Marshal.PtrToStringUni(Ptr),
						uom.constants.E_STRING_TYPES.Ansi => Marshal.PtrToStringAnsi(Ptr),
						_ => throw new ArgumentOutOfRangeException(stringType.ToString())
					}
					: stringType switch
					{
						uom.constants.E_STRING_TYPES.Auto => Marshal.PtrToStringAuto(Ptr, iLenght),
						uom.constants.E_STRING_TYPES.Uni => Marshal.PtrToStringUni(Ptr, iLenght),
						uom.constants.E_STRING_TYPES.Ansi => Marshal.PtrToStringAnsi(Ptr, iLenght),
						_ => throw new ArgumentOutOfRangeException(stringType.ToString())
					};
				return S;
			}






		}


		[EditorBrowsable(EditorBrowsableState.Never)]
		internal static class Extensions_Resources_Win
		{

			//[ MethodImpl(MethodImplOptions.AggressiveInlining)]
			//public static string MAKEINTRESOURCE(this int uID)
			//{
			//    return UOM.Win32.Resources.mResourcesAPI.MAKEINTRESOURCE(uID);
			//}


			//[ MethodImpl(MethodImplOptions.AggressiveInlining)]
			//public static string MAKEINTRESOURCE(this ushort uID)
			//{
			//    return UOM.Win32.Resources.mResourcesAPI.MAKEINTRESOURCE(uID);
			//}


			//[ MethodImpl(MethodImplOptions.AggressiveInlining)]
			//public static string MAKEINTRESOURCE(this uint uID)
			//{
			//    return UOM.Win32.Resources.mResourcesAPI.MAKEINTRESOURCE((int)uID);
			//}




		}


		[EditorBrowsable(EditorBrowsableState.Never)]
		internal static class Extensions_COM
		{
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static T? e_CreateCOMInstance<T>(this string ProgID) => (T?)Activator.CreateInstance(Type.GetTypeFromProgID(ProgID)!);


		}


		[EditorBrowsable(EditorBrowsableState.Never)]
		internal static partial class Extensions_Structures_Ptr_Win
		{

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static string e_HexDump(this uom.WinAPI.Memory.LocalMemory Buffer)
				=> Buffer.DangerousGetHandle().HexDump(Buffer.Lenght);



			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static uom.WinAPI.Memory.LocalMemory e_StructureToMemoryBlock<T>(this T rStructure) where T : struct
			{
				int iStructSize = Marshal.SizeOf(rStructure);
				var rMem = new uom.WinAPI.Memory.LocalMemory(iStructSize);
				rStructure.e_StructureToPtr(rMem.DangerousGetHandle()); // Записываем в буфер всю структуру
				return rMem;
			}


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static byte[] e_StructureToBytes<T>(this T rStructure) where T : struct
			{ using var rMem = rStructure.e_StructureToMemoryBlock(); return rMem.ToBytes(); }



			/// <summary>Последовательно читаем массив байт в массив одинаковых структур</summary>
			/// <param name="abData">Исходный массив</param>
			/// <param name="iCount">Количество структур для чтения</param>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static T[] e_ToStructuresSequentially<T>(this byte[] abData, int iCount, int iOffset = 0) where T : struct
			{
				// Размер одного элемента структуры
				int iSize1 = Marshal.SizeOf(typeof(T));
				// Полный размер всех структур
				int lTotalSize = iSize1 * iCount;
				if (iOffset + lTotalSize > abData.Length) throw new IndexOutOfRangeException("(iOffset + lTotalSize) > abData.Length");

				// Копируем весь блок памяти в массив
				var lFound = new List<T>();
				for (int I = 1, loopTo = iCount; I <= loopTo; I++)
				{
					var rStruct = abData.e_ToStructure<T>(iOffset);
					iOffset += iSize1;
					lFound.Add(rStruct);
				}

				return lFound.ToArray();
			}


			/// <summary>Считать байты массива в структуру</summary>
			/// <param name="abData">Исходный массив</param>
			/// <param name="iOffset">Смещение в массиве, с которого начинаем читать</param>
			/// <returns></returns>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static T e_ToStructure<T>(this byte[] abData, int iOffset = 0) where T : struct
			{
				int iStructLen = Marshal.SizeOf(typeof(T));
				byte[] abArrayToCast;// = Array.Empty<byte>();
				if (iOffset == 0 && abData.Length == iStructLen)
				{
					// Копируем весь блок памяти в массив
					abArrayToCast = abData;
				}
				else
				{
					if (iOffset + iStructLen > abData.Length) throw new IndexOutOfRangeException("Структура выходит за пределы массива, с учётом сдвига!");

					// Копируем часть массива
					var abTmpBuffer = new byte[iStructLen];
					Array.Copy(abData, iOffset, abTmpBuffer, 0, iStructLen);
					abArrayToCast = abTmpBuffer;
				}

				using var LMB = new uom.WinAPI.Memory.LocalMemory(abArrayToCast);
				return LMB.DangerousGetHandle().e_ToStructure<T>();
			}

		}


		/// <summary>Сериализация, клонирование</summary>
		[EditorBrowsable(EditorBrowsableState.Never)]
		internal static partial class Extensions_Serialize_Clone
		{

			#region Serialize

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static void e_WriteCSV<T>(this TextWriter TW, string[] aColumnHeadersArray, IEnumerable<T> aRows, Func<T, string[]> cbGetRowValuesArray, string C_CSV_SEPARATOR = ";", bool MakeSafeChars = false)
			{

				// Const C_CSV_SEPARATOR = ";"
				int iColumnCount = aColumnHeadersArray.Count();

				static string cbPrepareValue(string sSourceValue)
				{
					sSourceValue = sSourceValue.e_CheckNullOrWhiteSpace();
					sSourceValue = sSourceValue.Replace("\"", "\"\"").Replace(",", @"\,").Replace(";", @"\;").Replace(Environment.NewLine, @"\" + Environment.NewLine).Replace(@"\", @"\\");
					return sSourceValue;
				};

				if (MakeSafeChars) aColumnHeadersArray = (from sColumnValue in aColumnHeadersArray
														  let S = cbPrepareValue(sColumnValue)
														  select S).ToArray();

				var sHeaderLine = aColumnHeadersArray.e_Join(C_CSV_SEPARATOR);
				TW.WriteLine(sHeaderLine);
				foreach (var CP in aRows)
				{
					var aValuesArray = cbGetRowValuesArray(CP);
					if (aValuesArray.Count() != iColumnCount)
						throw new Exception("Current Row aValuesArray.Count <> aColumnHeadersArray.Count!");

					if (MakeSafeChars)
					{
						aValuesArray = aValuesArray
							.Select(columnValue => cbPrepareValue(columnValue))
							.ToArray();
					}

					string sLine = aValuesArray.e_Join(C_CSV_SEPARATOR)!;
					TW.WriteLine(sLine);
				}
			}



			#region Binary Serialization


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static void e_SerializeBinary(this object SerializableObject, string FileName)
			{
				using FileStream SM = FileName.e_ToFileInfo()!.OpenWrite();
				SerializableObject.e_SerializeBinary(SM);
				SM.Flush();
			}

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static void e_SerializeBinary(this object SerializableObject, Stream SM)
			{
				byte[] abData = SerializableObject.e_SerializeBinary();
				SM.Write(abData, 0, abData.Length);
			}

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static byte[] e_SerializeBinary(this object SerializableObject)
			{
				using MemoryStream ms = new();
#pragma warning disable SYSLIB0011 // Type or member is obsolete
				(new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter()).Serialize(ms, SerializableObject);
#pragma warning restore SYSLIB0011 // Type or member is obsolete
				return ms.e_ReadAllBytes();
			}

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static T? e_DeSerializeBinary<T>(this Stream SM, T? DefaultValue = default, bool ThrowExceptionOnError = false)
			{
				try
				{
#pragma warning disable SYSLIB0011 // Type or member is obsolete
					return (T)(new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter()).Deserialize(SM);
#pragma warning restore SYSLIB0011 // Type or member is obsolete					
				}
				catch
				{
					if (ThrowExceptionOnError) throw;
					return DefaultValue;
				}
			}


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static T? e_DeSerializeBinary<T>(this byte[] SerializedData, T? DefaultValue = default, bool ThrowExceptionOnError = false)
			{
				using MemoryStream ms = new(SerializedData);
				return ms.e_DeSerializeBinary(DefaultValue, ThrowExceptionOnError);
			}


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static T? e_DeSerializeBinary<T>(this FileInfo File, T? DefaultValue = default, bool ThrowExceptionOnError = false)
			{
				using FileStream fs = File.OpenRead();
				return fs.e_DeSerializeBinary(DefaultValue, ThrowExceptionOnError);
			}

			#endregion


			#region XML Serialization


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static void e_SerializeXML(this object SerializableObject, string FileName)
				=> SerializableObject.e_SerializeXML(FileName, Encoding.Unicode);


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static void e_SerializeXML(this object SerializableObject, string file, Encoding? enc = null)
				=> SerializableObject.e_SerializeXML(file.e_ToFileInfo()!, enc ??= Encoding.Unicode);


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static void e_SerializeXML(this object SerializableObject, FileInfo f, Encoding? enc = null)
			{
				using FileStream fs = f.Create();
				SerializableObject.e_SerializeXML(fs, enc ??= Encoding.Unicode);
			}


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static void e_SerializeXML(this object SerializableObject, Stream s, Encoding? enc = null)
			{
				using StreamWriter sw = new(s, enc ??= Encoding.Unicode);
				System.Xml.Serialization.XmlSerializer XS = new(SerializableObject.GetType());
				XS.Serialize(sw, SerializableObject);
				sw.Flush();
			}


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static string e_SerializeAsXML(this object SerializableObject)
			{
				StringBuilder sb = new();
				using (StringWriter sw = new(sb))
				{
					System.Xml.Serialization.XmlSerializer xs = new(SerializableObject.GetType());
					xs.Serialize(sw, SerializableObject);
				}
				return sb.ToString();
			}


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static byte[] e_SerializeAsXML(this System.Data.DataSet dts)
			{
				using MemoryStream ms = new();
				dts.WriteXml(ms, System.Data.XmlWriteMode.IgnoreSchema);
				return ms.e_ReadAllBytes();
			}




			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static object? e_DeSerializeXMLAsObject(
				this string xmlString,
				Type deserializeTo,
				Object? defaultValue = null,
				bool throwOnError = false)
			{
				try
				{
					if (string.IsNullOrWhiteSpace(xmlString)) return defaultValue;
					using StringReader sr = new(xmlString);
					using System.Xml.XmlTextReader xtr = new(sr);
					System.Xml.Serialization.XmlSerializer xs = new(deserializeTo);
					var O = xs.Deserialize(xtr);
					return O;
				}
				catch
				{
					if (throwOnError) throw;
					return defaultValue;
				}
			}

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static object? e_DeSerializeXMLAsObject(
				this FileInfo xmlFile,
				Type deserializeTo,
				Object? defaultValue = null,
				bool throwOnError = false)
			{
				return xmlFile?
					.e_ReadAsText(System.Text.Encoding.Unicode)?
					.e_DeSerializeXMLAsObject(deserializeTo, defaultValue, throwOnError);
			}






			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static T? e_DeSerializeXML<T>(this string xmlString, T? DefaultValue = default, bool ThrowExceptionOnError = false)
			{
				try
				{
					if (string.IsNullOrWhiteSpace(xmlString)) return DefaultValue;
					using StringReader sr = new(xmlString);
					using System.Xml.XmlTextReader xtr = new(sr);
					System.Xml.Serialization.XmlSerializer xs = new(typeof(T));
					var O = xs.Deserialize(xtr);
					return (T?)O;
				}
				catch
				{
					if (ThrowExceptionOnError) throw;
					return DefaultValue;
				}
			}


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static T? e_DeSerializeXML<T>(
				this Stream SerializedStream,
				T? DefaultValue = default,
				bool ThrowExceptionOnError = false)
			{
				try
				{
					System.Xml.Serialization.XmlSerializer xs = new(typeof(T));
					return (T?)xs.Deserialize(SerializedStream);
				}
				catch
				{
					if (ThrowExceptionOnError) throw;
					return DefaultValue;
				}
			}


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static T? e_DeSerializeXMLFile<T>(
				this string sFile,
				T? DefaultValue = default,
				bool ThrowExceptionOnError = false)
			{
				try
				{
					return sFile.e_ToFileInfo()!.e_DeSerializeXML<T>(DefaultValue, ThrowExceptionOnError);
				}
				catch
				{
					if (ThrowExceptionOnError) throw;
					return DefaultValue;
				}
			}


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static T? e_DeSerializeXML<T>(
				this FileInfo File,
				T? DefaultValue = default,
				bool ThrowExceptionOnError = false)
			{
				try
				{
					using FileStream fs = File.OpenRead();
					return fs.e_DeSerializeXML<T>(ThrowExceptionOnError: ThrowExceptionOnError);
				}
				catch
				{
					if (ThrowExceptionOnError) throw;
					return DefaultValue;
				}
			}


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static T[] e_DeSerializeXMLArrays<T>(this FileInfo[] fiFiles, bool ThrowExceptionOnError = false)
			{
				if (!fiFiles.Any()) return Array.Empty<T>();
				var lTotalDeserializedObjects = new List<T>();
				foreach (var fiFileToDeserialize in fiFiles)
				{
					var ArrayOfDeserializedObjects = fiFileToDeserialize.e_DeSerializeXML<T[]>(ThrowExceptionOnError: ThrowExceptionOnError);
					if (ArrayOfDeserializedObjects != null && ArrayOfDeserializedObjects.Any())
					{
						lTotalDeserializedObjects.AddRange(ArrayOfDeserializedObjects);
					}
				}

				var aTotalRulesToImport = lTotalDeserializedObjects.ToArray();
				return aTotalRulesToImport;
			}


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static List<T> e_DeSerializeXMLLists<T>(this FileInfo[] fiFiles, bool ThrowExceptionOnError = false)
			{
				var lTotalDeserializedObjects = new List<T>();
				if (!fiFiles.Any()) return lTotalDeserializedObjects;
				foreach (var fiFileToDeserialize in fiFiles)
				{
					var ListOfDeserializedObjects = fiFileToDeserialize.e_DeSerializeXML<List<T>>(ThrowExceptionOnError: ThrowExceptionOnError);
					if (ListOfDeserializedObjects != null && ListOfDeserializedObjects.Any())
					{
						lTotalDeserializedObjects.AddRange(ListOfDeserializedObjects);
					}
				}
				return lTotalDeserializedObjects;
			}


			#endregion



			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static void e_SerializeXMLSettings(this object SerializableObject, string ParamName)
			{
				throw new NotImplementedException();

				//string sXML = SerializableObject.e_SerializeXML();
				//UOM.Settings.mAppSettings.SaveSetting(ParamName, sXML, ThrowExceptionIfError: true);
			}


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static T e_DeSerializeXMLSettings<T>(this string ParamName, T DefaultValue)
			{
				throw new NotImplementedException();

				//string sXML = UOM.Settings.mAppSettings.GetSetting_String(ParamName, null, ThrowExceptionIfError: false).Value;
				//if (sXML.e_IsNOTNullOrWhiteSpace())
				//{
				//    var Obj = sXML.e_DeSerializeXML(DefaultValue);
				//    return Obj;
				//}
				//else
				//{
				//    return DefaultValue;
				//}
			}



			#endregion

			/// <summary>Клонирует объект черех XML сериализацию в памяти</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static T? e_CloneViaXMLSerialization<T>(this T O)
			{
				_ = O ?? throw new ArgumentNullException(nameof(O));
				using MemoryStream ms = new();
				O.e_SerializeXML(ms);
				ms.Seek(0L, SeekOrigin.Begin);
				return ms.e_DeSerializeXML<T>(ThrowExceptionOnError: true);
			}


			/// <summary>Клонирует объект системным методом CLONE, возвращая объект такого-же типа, что и исходный</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static T e_CloneAsSomeType<T>(this T rSourceObject) where T : ICloneable
				=> (T)rSourceObject.Clone();


			/// <summary>Клонирует объект системным методом CLONE, возвращая объект такого-же типа, что и исходный</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static Icon e_CloneViaGDICopyIcon(this Icon rSource)
			{
				throw new NotImplementedException();

				//var hIconNew = UOM.Win32.GDI.GDIObjects.Icon.CopyIcon(rSource.Handle);
				//if (hIconNew.IsInValid)
				//{
				//    Win32.Errors.ThrowLastWin23ErrorAssert(Win32.Errors.Win32Errors.ERROR_SUCCESS);
				//    throw new Win32.Errors.Win32Exception("CopyIcon Failed with unknown error!");
				//}

				//var rNewicon = System.Drawing.Icon.FromHandle(hIconNew);
				//if (rNewicon null == )
				//throw new Exception("System.Drawing.Icon.FromHandle Failed!");
				//return rNewicon;
			}


			/// <summary>Клонирует Image через GDI+.DrawImage</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static Bitmap e_CloneViaDrawImage(this System.Drawing.Image imgSrc)
			{
				Bitmap bmNew = new(imgSrc.Width, imgSrc.Height);
				using Graphics g = Graphics.FromImage(bmNew);
				g.DrawImage(imgSrc, 0, 0, imgSrc.Width, imgSrc.Height);
				return bmNew;
			}


			/// <summary>Клонирует объект системным методом CLONE, возвращая объект такого-же типа, что и исходный</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static Icon e_CloneViaMemStream(this Icon rSource)
			{
				using MemoryStream ms = new();
				rSource.Save(ms);
				ms.Seek(0L, SeekOrigin.Begin);
				return new Icon(ms);
			}


			/// <summary>Клонирует объект системным методом CLONE, возвращая объект такого-же типа, что и исходный</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static Bitmap e_CloneViaMemStream(this Bitmap rSource)
			{
				using MemoryStream ms = new();
				rSource.Save(ms, System.Drawing.Imaging.ImageFormat.MemoryBmp);
				ms.Seek(0L, SeekOrigin.Begin);
				return new Bitmap(ms);
			}
		}


		[EditorBrowsable(EditorBrowsableState.Never)]
		internal static class Extensions_Security_Win
		{

			/// <summary>User name without domain</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static string e_GetShortName(this WindowsIdentity U) => U.User?.LookupAccount().User!;

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static string e_GetPrivilegeDescriptionValue(this WinAPI.Security.PRIVELEGE_NAMES P)
				=> P.e_GetDescriptionValue()!;


#pragma warning disable SYSLIB0003 // Type or member is obsolete
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static void DemandFileIOPermission(this string sFullPath, FileIOPermissionAccess eAccess = FileIOPermissionAccess.Read)
				=> (new FileIOPermission(eAccess, sFullPath))
				.Demand();  // Запрос на доступ к файлу
#pragma warning restore SYSLIB0003 // Type or member is obsolete

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static SecurityIdentifier e_ToSID(this string SIDString) => new(SIDString);


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static SecurityIdentifier e_ToSID(this NTAccount AC) => (SecurityIdentifier)AC.Translate(typeof(SecurityIdentifier));


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static SecurityIdentifier e_ToSID(this IdentityReference IR) => (SecurityIdentifier)IR.Translate(typeof(SecurityIdentifier));


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static NTAccount e_ToNTAccount(this IdentityReference IR) => (NTAccount)IR.Translate(typeof(NTAccount));



			/// <summary>The SecurityReference object's Translate method does work on non-local SIDs but only for domain accounts.
			/// For accounts local To another machine Or In a non-domain setup you would need To PInvoke the Function LookupAccountSid specifying the specific machine name On which the look up needs To be performed.
			/// </summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static NTAccount e_ToNTAccount(this SecurityIdentifier SID) => (NTAccount)SID.Translate(typeof(NTAccount));


			internal enum SID_NAME_USE : int
			{
				SidTypeUser = 1,
				SidTypeGroup,
				SidTypeDomain,
				SidTypeAlias,
				SidTypeWellKnownGroup,
				SidTypeDeletedAccount,
				SidTypeInvalid,
				SidTypeUnknown,
				SidTypeComputer
			}
			/// <summary>LookupAccountSid принимает в качестве входных данных идентификатор безопасности (SID). 
			/// Он извлекает имя учетной записи для этого SID и имя первого домена, в котором этот SID найден.
			/// </summary>
			[DllImport(WinAPI.core.WINDLL_ADVAPI32, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
			private static extern bool LookupAccountSid(
			  [In, Optional] string? systemName,
			  [In, MarshalAs(UnmanagedType.LPArray)] byte[] psid,
			  [In, Out, Optional] StringBuilder? accountName,
			  [In, Out] ref int cbAccount,
			  [In, Out, Optional] StringBuilder? domainName,
			  [In, Out] ref int cbDomainName,
			  [In, Out] ref SID_NAME_USE use);


			/// <summary>
			/// Функция LookupAccountSid принимает в качестве входных данных идентификатор безопасности (SID). 
			/// Он извлекает имя учетной записи для этого SID и имя первого домена, в котором этот SID найден.
			/// </summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static (string User, string Domain, NTAccount FQDN) LookupAccount(this SecurityIdentifier sid, string? systemName = null)
			{
				var eUse = SID_NAME_USE.SidTypeAlias;
				var abSID = new byte[sid.BinaryLength];
				sid.GetBinaryForm(abSID, 0);

				// First call, populate l_UserNameLength and l_DomainLength
				int iUserNameLength = 0;
				int iDomainLength = 0;
				var bResult = LookupAccountSid(systemName, abSID, null, ref iUserNameLength, null, ref iDomainLength, ref eUse);
				if (!bResult)
					WinAPI.Errors.ThrowLastWin23ErrorAssert(WinAPI.Errors.Win32Errors.ERROR_INSUFFICIENT_BUFFER);

				// Allocate space
				StringBuilder cbUser = new(iUserNameLength + 1);  // Need space for terminating chr(0)?
				StringBuilder cbDomain = new(iDomainLength + 1);
				LookupAccountSid(systemName, abSID, cbUser, ref iUserNameLength, cbDomain, ref iDomainLength, ref eUse).e_ThrowLastWin32Exception_AssertFalse("LookupAccountSid");
				var nta = new NTAccount(cbUser.ToString(), cbDomain.ToString());
				return (cbUser.ToString(), cbDomain.ToString(), nta);
			}

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static SecurityIdentifier e_UserNameToSID(this string UserName)
			{
				// The easy way, with .NET 2.0 and up, is this:
				var rNTAcc = new NTAccount(UserName);
				return rNTAcc.e_ToSID();


				// The hard way, which works when that won't, and works on .NET 1.1 also:

				// [DllImport("advapi32.dll", CharSet=CharSet.Auto, SetLastError=true)]
				// public static extern bool LookupAccountName([In,MarshalAs(UnmanagedType.LPTStr)] string systemName, [In,MarshalAs(UnmanagedType.LPTStr)] string accountName, IntPtr sid, ref int cbSid, StringBuilder referencedDomainName, ref int cbReferencedDomainName, [Out ] int use);
				// [DllImport("advapi32.dll", CharSet=CharSet.Auto, SetLastError=true)]
				// internal static extern bool ConvertSidToStringSid(IntPtr sid, [In,Out,MarshalAs(UnmanagedType.LPTStr)] ref string pStringSid);

				// /// <summary>The method converts object name (user, group) into SID string.</summary>
				// /// <param name="name">Object name in form domain\object_name.</param>
				// /// <returns>SID string.</returns>
				// public static string GetSid(string name) {
				// IntPtr _sid = IntPtr.Zero; //pointer to binary form of SID string.
				// int _sidLength = 0;   //size of SID buffer.
				// int _domainLength = 0;  //size of domain name buffer.
				// int _use;     //type of object.
				// StringBuilder _domain = new StringBuilder(); //stringBuilder for domain name.
				// int _error = 0;
				// string _sidString = "";

				// //first call of the function only returns the sizes of buffers (SDI, domain name)
				// LookupAccountName(null, name, _sid, ref _sidLength, _domain, ref _domainLength, [Out ] _use);
				// _error = Marshal.GetLastWin32Error();

				// if (_error != 122) //error 122 (The data area passed to a system call is too small) - normal behaviour.
				// {
				// throw (new Exception(new Win32Exception(_error).Message));
				// } else {
				// _domain = new StringBuilder(_domainLength); //allocates memory for domain name
				// _sid = Marshal.AllocHGlobal(_sidLength); //allocates memory for SID
				// bool _rc = LookupAccountName(null, name, _sid, ref _sidLength, _domain, ref _domainLength, [Out ] _use);

				// if (_rc == false) {
				// _error = Marshal.GetLastWin32Error();
				// Marshal.FreeHGlobal(_sid);
				// throw (new Exception(new Win32Exception(_error).Message));
				// } else {
				// // converts binary SID into string
				// _rc = ConvertSidToStringSid(_sid, ref _sidString);

				// if (_rc == false) {
				// _error = Marshal.GetLastWin32Error();
				// Marshal.FreeHGlobal(_sid);
				// throw (new Exception(new Win32Exception(_error).Message));
				// } else {
				// Marshal.FreeHGlobal(_sid);
				// return _sidString;
				// }
				// }
				// }
				// }
			}


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static void e_AdjustProcessPrivilegeAndCloseToken(this WinAPI.Security.PRIVELEGE_NAMES p)
				=> uom.WinAPI.Security.AdjustProcessPrivilegeAndCloseToken(p);

		}





		[EditorBrowsable(EditorBrowsableState.Never)]
		internal static partial class Extensions_Shell
		{







			#region StrFormatByteSize
			/// <summary> для PC используется Shell API StrFormatByteSize64, для PDA форимуется вручную</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static string e_FormatByteSize_Win32(this ulong FileLenght) => ((long)FileLenght).e_FormatByteSize_Win32();


			///// <summary> для PC используется Shell API StrFormatByteSize64, для PDA форимуется вручную</summary>
			//[ MethodImpl(MethodImplOptions.AggressiveInlining)]
			//public static string e_FormatByteSize_Win32(this long FileLenght) => uom.WinAPI.Shell.StrFormatByteSize(FileLenght);

			/// <summary>используется Shell API StrFormatByteSize64</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static string e_FormatByteSize_Win32(this long FileLenght)
			{
				var SB = new StringBuilder(100);
				var ptrResult = uom.WinAPI.Shell.StrFormatByteSize64(FileLenght, SB, SB.Capacity);
				if (!ptrResult.e_IsValid()) WinAPI.Errors.ThrowLastWin23Error("StrFormatByteSize64");
				return SB.ToString();
			}


			/// <summary> для PC используется Shell API StrFormatByteSize64, для PDA форимуется вручную</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static string e_FormatByteSize_Win32(this int iFileLenght) => ((long)iFileLenght).e_FormatByteSize_Win32();

			/// <summary>используется Shell API StrFormatByteSize64</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static string e_FormatByteSize_Win32(this FileInfo FI) => FI.Length.e_FormatByteSize_Win32();



			#endregion



			#region ShellTimeString


			/// <summary>Использует Shell API StrFromTimeInterval</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static string e_ToShellTimeString(this int iMilliseconds, int Digits = 3) => uom.WinAPI.Shell.StrFromTimeInterval(iMilliseconds, Digits);


			/// <summary>Использует Shell API StrFromTimeInterval</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static string e_ToShellTimeString(this TimeSpan TS, int Digits = 3)
			{
				int iMilliseconds = (int)Math.Round(TS.TotalSeconds * 1000d);
				return iMilliseconds.e_ToShellTimeString(Digits);
			}


			///// <summary>Использует Shell API StrFromTimeInterval</summary>
			//[Obsolete("TickTimer64 is obsolete! use System.Diagnostics.Stopwatch !")]
			//[ MethodImpl(MethodImplOptions.AggressiveInlining)]
			//public static string e_ToShellTimeString(this UOM.TickTimer64 TT, int Digits = 3)
			//{
			//    long lMS = TT.MeasuredMilliseconts;
			//    int iMilliseconds = (int)lMS;
			//    return uom.WinAPI.Shell.StrFromTimeInterval(iMilliseconds, Digits);
			//}
			#endregion




		}


		//[SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]
		internal static partial class Extensions_WinAPI_Windows
		{

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static WinAPI.Windows.WindowMessages e_ToWindowMessages(this int windowMwssageCode)
				=> (WinAPI.Windows.WindowMessages)windowMwssageCode;

		}

		//[SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]
		internal static partial class Extensions_WinAPI_GDI
		{

			public static WinAPI.GDI.DC GetDC(this IWin32Window wnd) => new(wnd.Handle);

			/// <summary>Расчёт точки вывода текста относительно заданной точки</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static (PointF TextPos, SizeF MeasuredTextSize) e_MeasureStringLocation(
				this Graphics g,
				string Text,
				Font Font,
				PointF TargetPoint,
				System.Drawing.ContentAlignment LabelAlignment)
			{
				SizeF retMeasuredTextSize = g.MeasureString(Text, Font);
				var szfMeasuredTextSize2 = new SizeF(retMeasuredTextSize.Width / 2, retMeasuredTextSize.Height / 2);
				var rcLabel = default(PointF);
				switch (LabelAlignment)
				{
					case System.Drawing.ContentAlignment.MiddleLeft: // Слева посередине
						rcLabel = new PointF(TargetPoint.X - retMeasuredTextSize.Width, TargetPoint.Y - szfMeasuredTextSize2.Height); break;

					case System.Drawing.ContentAlignment.BottomCenter: // Снизу по центру
						rcLabel = new PointF(TargetPoint.X - szfMeasuredTextSize2.Width, TargetPoint.Y); break;

					case System.Drawing.ContentAlignment.TopCenter: // Сверху по центру
						rcLabel = new PointF(TargetPoint.X - szfMeasuredTextSize2.Width, TargetPoint.Y - retMeasuredTextSize.Height); break;

					case System.Drawing.ContentAlignment.MiddleCenter:  // Центр
						rcLabel = new PointF(TargetPoint.X - szfMeasuredTextSize2.Width, TargetPoint.Y - szfMeasuredTextSize2.Height); break;

					default:
						Debug.Fail("This LabelAlignment not supported"); break;// Throw New NotSupportedException("This LabelAlignment not supported")
				}
				return (rcLabel, retMeasuredTextSize);
			}


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static Icon e_Create_For(this Icon rIcon, System.Drawing.Size TargetSize) => new(rIcon, TargetSize);


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static Icon e_Create_For(this Icon rIcon, int iTargetSize) => rIcon.e_Create_For(new System.Drawing.Size(iTargetSize, iTargetSize));


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static Icon e_Create_Small(this Icon rIcon) => rIcon.e_Create_For(System.Windows.Forms.SystemInformation.SmallIconSize);


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static Icon e_Create_Large(this Icon rIcon) => rIcon.e_Create_For(System.Windows.Forms.SystemInformation.IconSize);


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static void e_DrawRectangle(this Graphics g, Pen P, RectangleF RCF) => g.DrawRectangle(P, RCF.Left, RCF.Top, RCF.Width, RCF.Height);


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static void e_DrawRoundedRectangle(
				this Graphics g,
				Rectangle rc,
				int radius,
				Pen? pen = null,
				Brush? brush = null)
			{
				Rectangle corner = new(rc.X, rc.Y, radius, radius);

				using System.Drawing.Drawing2D.GraphicsPath path = new();
				path.AddArc(corner, 180, 90);
				corner.X = rc.X + rc.Width - radius;
				path.AddArc(corner, 270, 90);
				corner.Y = rc.Y + rc.Height - radius;
				path.AddArc(corner, 0, 90);
				corner.X = rc.X;
				path.AddArc(corner, 90, 90);
				path.CloseFigure();

				if (brush != null) g.FillPath(brush, path);
				if (pen != null) g.DrawPath(pen, path);
			}


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static int e_ToWin32GDIColor(this Color NetColor) => ColorTranslator.ToWin32(NetColor);


			#region System.Drawing.ContentAlignment->System.Drawing.StringFormat, System.Windows.Forms.HorizontalAlignment->System.Drawing.StringAlignment


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static System.Drawing.StringFormat e_ToDrawingStringFormat(
				this System.Drawing.ContentAlignment CA,
				StringFormatFlags FormatFlags = 0)
			{
				StringAlignment VA = StringAlignment.Center;
				StringAlignment HA = StringAlignment.Center;
				switch (CA)
				{
					case System.Drawing.ContentAlignment.TopLeft:
						{
							HA = StringAlignment.Near;
							VA = StringAlignment.Near;
							break;
						}

					case System.Drawing.ContentAlignment.TopCenter:
						{
							HA = StringAlignment.Center;
							VA = StringAlignment.Near;
							break;
						}

					case System.Drawing.ContentAlignment.TopRight:
						{
							HA = StringAlignment.Far;
							VA = StringAlignment.Near;
							break;
						}

					case System.Drawing.ContentAlignment.MiddleLeft:
						{
							HA = StringAlignment.Near;
							VA = StringAlignment.Center;
							break;
						}

					case System.Drawing.ContentAlignment.MiddleCenter:
						{
							HA = StringAlignment.Center;
							VA = StringAlignment.Center;
							break;
						}

					case System.Drawing.ContentAlignment.MiddleRight:
						{
							HA = StringAlignment.Far;
							VA = StringAlignment.Center;
							break;
						}

					case System.Drawing.ContentAlignment.BottomLeft:
						{
							HA = StringAlignment.Near;
							VA = StringAlignment.Far;
							break;
						}

					case System.Drawing.ContentAlignment.BottomCenter:
						{
							HA = StringAlignment.Center;
							VA = StringAlignment.Far;
							break;
						}

					case System.Drawing.ContentAlignment.BottomRight:
						{
							HA = StringAlignment.Far;
							VA = StringAlignment.Far;
							break;
						}
				}

				var SF = new StringFormat()
				{
					Alignment = HA,
					LineAlignment = VA,
					FormatFlags = FormatFlags
				};
				return SF;
			}


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static System.Drawing.StringFormat e_ToDrawingStringFormat(
				this HorizontalAlignment A,
				StringAlignment LineAlignment = StringAlignment.Center,
				StringFormatFlags FormatFlags = 0)
			{
				var SF = new StringFormat();
				switch (A)
				{
					case HorizontalAlignment.Center: SF.Alignment = StringAlignment.Center; break;
					case HorizontalAlignment.Right: SF.Alignment = StringAlignment.Far; break;
				}

				SF.LineAlignment = LineAlignment;
				SF.FormatFlags = FormatFlags;
				return SF;
			}


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static System.Windows.Forms.TextFormatFlags e_ToTextFormatFlags(this System.Drawing.StringFormat SF)
			{
				TextFormatFlags FF = 0;
				switch (SF.Alignment)
				{
					case StringAlignment.Near: FF |= TextFormatFlags.Left; break;
					case StringAlignment.Center: FF |= TextFormatFlags.HorizontalCenter; break;
					case StringAlignment.Far: FF |= TextFormatFlags.Right; break;
				}
				switch (SF.LineAlignment)
				{
					case StringAlignment.Near: FF |= TextFormatFlags.Top; break;
					case StringAlignment.Center: FF |= TextFormatFlags.VerticalCenter; break;
					case StringAlignment.Far: FF |= TextFormatFlags.Bottom; break;
				}
				return FF;
			}


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static System.Drawing.StringAlignment e_ToDrawingStringAlignment(this System.Windows.Forms.HorizontalAlignment Align)
				=> Align switch
				{
					HorizontalAlignment.Center => StringAlignment.Center,
					HorizontalAlignment.Left => StringAlignment.Near,
					HorizontalAlignment.Right => StringAlignment.Far,
					_ => StringAlignment.Near,
				};

			#endregion


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static void e_DrawShadow(this GraphicsPath gp, int intensity, int radius, Bitmap dest)
			{
				using Graphics g = Graphics.FromImage(dest);
				g.Clear(Color.Transparent);
				g.CompositingMode = CompositingMode.SourceCopy;
				double alpha = 0;
				double astep = 0;
				double astepstep = (double)intensity / radius / (radius / 2D);
				for (int thickness = radius; thickness > 0; thickness--)
				{
					using (Pen p = new Pen(Color.FromArgb((int)alpha, 0, 0, 0), thickness))
					{
						p.LineJoin = LineJoin.Round;
						g.DrawPath(p, gp);
					}
					alpha += astep;
					astep += astepstep;
				}
			}

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static void e_DrawPathShadow(this Graphics g, GraphicsPath gp, int radius, int intensity = 100)
			{
				intensity = intensity.e_CheckRange(1, 100);
				double alpha = 0;
				double astep = 0;
				double astepstep = (double)intensity / radius / (radius / 2D);
				for (int thickness = radius; thickness > 0; thickness--)
				{
					using (Pen p = new Pen(Color.FromArgb((int)alpha, 0, 0, 0), thickness))
					{
						p.LineJoin = LineJoin.Round;
						g.DrawPath(p, gp);
					}
					alpha += astep;
					astep += astepstep;
				}
			}


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static string e_GetExtensionForRawFormat(this Bitmap IMG)
				=> IMG.RawFormat.e_GetExtension();


			public enum Direction { Up, Down, Right, Left }
			public enum Orientation { North, South, East, West }
			public static Orientation ToOrientation(Direction direction) => direction switch
			{
				Direction.Up => Orientation.North,
				Direction.Right => Orientation.East,
				Direction.Down => Orientation.South,
				Direction.Left => Orientation.West,
				_ => throw new ArgumentOutOfRangeException(nameof(direction), $"Not expected direction value: {direction}"),
			};




			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static string e_GetExtension(this System.Drawing.Imaging.ImageFormat fmt)
			{
				string sExt;
				if (fmt.Equals(System.Drawing.Imaging.ImageFormat.Jpeg)) sExt = "jpg";
				else if (fmt.Equals(System.Drawing.Imaging.ImageFormat.Png)) sExt = "png";
				else if (fmt.Equals(System.Drawing.Imaging.ImageFormat.Bmp)) sExt = "Bmp";
				else if (fmt.Equals(System.Drawing.Imaging.ImageFormat.Emf)) sExt = "Emf";
				else if (fmt.Equals(System.Drawing.Imaging.ImageFormat.Exif)) sExt = "Exif";
				else if (fmt.Equals(System.Drawing.Imaging.ImageFormat.Gif)) sExt = "Gif";
				else if (fmt.Equals(System.Drawing.Imaging.ImageFormat.Icon)) sExt = "Ico";
				else if (fmt.Equals(System.Drawing.Imaging.ImageFormat.Tiff)) sExt = "Tif";
				else if (fmt.Equals(System.Drawing.Imaging.ImageFormat.Wmf)) sExt = "Wmf";
				else throw new Exception($"Unknown image format: {fmt}");

				return "." + sExt.ToLower();
			}

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static Icon e_CreateIcon(this Image IMG, System.Drawing.Size IconSize)
			{
				var bmSmall = (Bitmap)IMG.GetThumbnailImage(IconSize.Width, IconSize.Height, default, default);
				return Icon.FromHandle(bmSmall.GetHicon());
			}


			/// <summary>Создаёт прозрачный холст с заданными размерами, и рисует заданное изображение.
			/// Уменьшает большие картинки
			/// </summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static Bitmap e_GetThumbnailBitmap(this System.Drawing.Icon rIcon, Size szCanvas)
				=> rIcon.ToBitmap().e_GetThumbnailBitmap(szCanvas, System.Windows.Forms.SystemInformation.IconSize, true);

			/// <summary>Создаёт прозрачный холст с заданными размерами, и рисует заданное изображение.
			/// Уменьшает большие картинки
			/// </summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static Bitmap e_GetThumbnailBitmap(this Icon rIcon, ImageList rImageList)
			{
				if (null == rImageList) throw new ArgumentNullException(nameof(rImageList));
				return rIcon.e_GetThumbnailBitmap(rImageList.ImageSize);
			}



			/// <summary>Создаёт прозрачный холст с заданными размерами, и рисует заданное изображение. Уменьшает большие картинки</summary>
			/// <param name="CanvasSize">Выходной размер получаемого изображения</param>
			/// <param name="DrawImageSize">Размер рисуемого изображения на холсте. Если не указан, автоматически маленькие как есть, а большие уменьшались</param>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static Bitmap e_GetThumbnailBitmap(this Icon rIcon, Size CanvasSize, Size? DrawImageSize = default, bool UpScaleSmallImgaes = false)
				=> e_GetThumbnailBitmap_CORE(rIcon.Size,
					(G, RC) => G.DrawIcon(rIcon, RC),
					CanvasSize, DrawImageSize, UpScaleSmallImgaes);

			/// <summary>Создаёт прозрачный холст с заданными размерами, и рисует заданное изображение. Уменьшает большие картинки</summary>
			/// <param name="CanvasSize">Выходной размер получаемого изображения</param>
			/// <param name="DrawImageSize">Размер рисуемого изображения на холсте. Если не указан, автоматически маленькие как есть, а большие уменьшались</param>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static Bitmap e_GetThumbnailBitmap(this Image rBitmap, Size CanvasSize, Size? DrawImageSize = default, bool UpScaleSmallImgaes = false)
				=> e_GetThumbnailBitmap_CORE(rBitmap.Size,
					(G, RC) => G.DrawImage(rBitmap, RC),
					CanvasSize, DrawImageSize, UpScaleSmallImgaes);

			/// <summary>Создаёт прозрачный холст с заданными размерами, и рисует заданное изображение.
			/// Уменьшает большие картинки</summary>
			/// <param name="CanvasSize">Размер холста</param>
			/// <param name="DrawImageSize">Размер рисуемого изображения на холсте. Если не указан, автоматически маленькие как есть, а большие уменьшались</param>
			private static Bitmap e_GetThumbnailBitmap_CORE(
				Size ImageSize,
				Action<Graphics, Rectangle> DrawImageProc,
				Size CanvasSize,
				Size? DrawImageSize = null,
				bool UpScaleSmallImgaes = false)
			{
				var szfCanvas = CanvasSize.e_ToSizeF();
				Bitmap bmCanvas = new Bitmap(CanvasSize.Width, CanvasSize.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
				using Graphics g = Graphics.FromImage(bmCanvas);
				g.PageUnit = GraphicsUnit.Pixel;
				g.Clear(Color.Transparent);
				// Call G.DrawRectangle(Pens.Blue, rcFileBitmap)

				var szfDraw = (DrawImageSize ?? ImageSize).e_ToSizeF();
				if (szfDraw.Width > szfCanvas.Width || szfDraw.Height > szfCanvas.Height)
				{
					// Выводимое изображение превышает размеры холста, надо вписать
					szfDraw = szfDraw.e_ВписатьВ(szfCanvas).TargetSize;
				}
				else if (UpScaleSmallImgaes)
				{
					// Мелкое изображание надо увеличить ?
					var szfUpscaleTo = (DrawImageSize ?? CanvasSize).e_ToSizeF();
					if (ImageSize.Width < szfUpscaleTo.Width && ImageSize.Height > szfUpscaleTo.Height)
					{
						// Мелкое изображание надо увеличить!
						szfDraw = szfDraw.e_ВписатьВ(szfUpscaleTo).TargetSize;
					}
				}

				var ptfCenter = szfCanvas.e_ToRectangleF().e_GetCenter();
				var rcDraw = szfDraw.e_ToRectangleF().e_CenterTo(ptfCenter).e_ToRectangle();
				DrawImageProc.Invoke(g, rcDraw);
				return bmCanvas;




				#region OLD
				// Dim szfCanvas = szCanvas. e_ToSizeF
				// Dim bmCanvas = New Bitmap(szCanvas.Width, szCanvas.Height, Imaging.PixelFormat.Format32bppArgb)
				// Dim ptfCanvasCanter = szfCanvas. e_ToRectangle. e_GetCenter
				// Using G = Graphics.FromImage(bmCanvas)
				// G.PageUnit = GraphicsUnit.Pixel
				// Call G.Clear(Color.Transparent)
				// ' Call G.DrawRectangle(Pens.Blue, rcFileBitmap)

				// If (TargetImageSize IsNot Nothing) AndAlso (TargetImageSize.HasValue) AndAlso (TargetImageSize.Value <> Size.Empty) Then
				// 'Указан размер изображения на эскизе (сам размер эскиза задан другими размерами!) Всегда масштабируем
				// Dim szImageToDraw = TargetImageSize.Value

				// Dim rcfImageToDraw = szImageToDraw. e_ToRectangle. e_ToRectangleF. e_CenterTo(ptfCanvasCanter)
				// Call G.DrawImage(imgImageToDraw, rcfImageToDraw)

				// Else
				// 'Принудательный размер не указан Маленькие рисуем как есть, большие уменьшаем
				// Dim szfImageToDraw = imgImageToDraw.Size. e_ToSizeF

				// If (Not ScaleSmallImgaes) AndAlso ((szfImageToDraw.Width <= szCanvas.Width) AndAlso (szfImageToDraw.Height <= szCanvas.Height)) Then
				// 'Изображание не превышает размеров холста
				// Dim rcfDrawTo = szfImageToDraw. e_ToRectangle. e_CenterTo(ptfCanvasCanter)
				// Call G.DrawImage(imgImageToDraw, rcfDrawTo)

				// Else
				// 'Изображение больше холста - вписываем с сохранением пропорций
				// Dim fScaled = imgImageToDraw.Size. e_ToSizeF. e_ВписатьВ(szfCanvas)
				// Dim rcfScaled = fScaled.TargetSize. e_ToRectangle
				// rcfScaled = rcfScaled. e_CenterTo(ptfCanvasCanter)
				// Call G.DrawImage(imgImageToDraw, rcfScaled)
				// End If
				// End If
				// Return bmCanvas
				// End Using
				#endregion

			}
		}


		internal static class Extensions_Drawing
		{


			/// <summary>Перевод Дюймов в пиксели</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static SizeF e_Inches_ToPixels(this Graphics g, SizeF SizeInInches)
				=> new(
					SizeInInches.Width * g.DpiX,
					SizeInInches.Height * g.DpiY
					);


			/// <summary>Перевод мм в пиксели</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static SizeF e_MM_ToPixels(this Graphics g, SizeF SizeInMM)
				=> new(
					SizeInMM.Width.e_MMToInches() * g.DpiX,
					SizeInMM.Height.e_MMToInches() * g.DpiY
					);

			/// <summary>Перевод мм в пиксели</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static float e_MM_ToPixelsX(this Graphics g, float SizeInMMX)
				=> SizeInMMX.e_MMToInches() * g.DpiX;






			#region Биты, байты, Двоично - десятичные преобразования







			#region Дюймы / см / пиксели

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static SizeF e_InchesToCM(this SizeF valueInInches)
				=> new(
					valueInInches.Width.e_InchesToCM(),
					valueInInches.Height.e_InchesToCM());


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static RectangleF e_InchesToCM(this RectangleF valueInInches)
				=> new(
					valueInInches.Left.e_InchesToCM(),
					valueInInches.Top.e_InchesToCM(),
					valueInInches.Width.e_InchesToCM(),
					valueInInches.Height.e_InchesToCM()
					);



			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static RectangleF e_CMToInches(this RectangleF CM)
				=> new(
					CM.Left.e_CMToInches(),
					CM.Top.e_CMToInches(),
					CM.Width.e_CMToInches(),
					CM.Height.e_CMToInches()
					);


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static System.Drawing.SizeF e_Pixels_To_Inches(this Size pixels, System.Drawing.Point dpi)
				=> new(
					(float)pixels.Width / (float)dpi.X,
					(float)pixels.Height / (float)dpi.Y);


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static System.Drawing.Point e_Inches_To_Pixels(this PointF Inches, System.Drawing.Point DPI)
				=> new(
					(int)(Inches.X * DPI.X),
					(int)(Inches.Y * DPI.Y));


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static System.Drawing.Size e_Inches_To_Pixels(this SizeF Inches, System.Drawing.Point DPI)
				=> new(
					(int)(Inches.Width * DPI.X),
					(int)(Inches.Height * DPI.Y));

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static Rectangle e_Inches_To_Pixels(this System.Drawing.RectangleF rcfДюймы, System.Drawing.Point DPI)
				=> new(
					rcfДюймы.Location.e_Inches_To_Pixels(DPI),
					rcfДюймы.Size.e_Inches_To_Pixels(DPI));

			#endregion



			#region ВписатьРазмеры

			/// <summary>Вписывает одни размеры в другие, сохраняя пропорции</summary>
			/// <param name="source">Исходный размер, КОТОРЫЙ надо изменить</param>
			/// <param name="target">Целевой размер, В КОТОРЫЙ надо вписать</param>
			/// <returns>Zoom = коэффициент масштабирования</returns>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static (System.Drawing.Size TargetSize, float Zoom) e_ВписатьВ(this System.Drawing.Size source, System.Drawing.Size target
				)
			{
				//float sngZoom = 0f;
				var SourceF = new SizeF(source.Width, source.Height);
				var LimitF = new SizeF(target.Width, target.Height);
				var (TargetSize, Zoom) = SourceF.e_ВписатьВ(LimitF);
				return (TargetSize.ToSize(), Zoom);
			}

			/// <summary>Вписывает одни размеры в другие, сохраняя пропорции</summary>
			/// <param name="source">Исходный размер, КОТОРЫЙ надо изменить</param>
			/// <param name="target">Целевой размер, В КОТОРЫЙ надо вписать</param>
			/// <returns>Zoom = коэффициент масштабирования</returns>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static (System.Drawing.SizeF TargetSize, float Zoom) e_ВписатьВ(this SizeF source, SizeF target)
			{
				float zoom, w, h;

				if (source.Width > source.Height)
				{
					if (target.Width > target.Height)
					{
						zoom = source.Height / source.Width;
						w = target.Width;
						h = target.Width * zoom;
						if (h > target.Height)
						{
							h = target.Height;
							w = target.Height / zoom;
						}
					}
					else // Limit.Height > Limit.Width
					{
						zoom = source.Height / source.Width;
						w = target.Width;
						h = target.Width * zoom;
					}
				}
				else if (target.Height > target.Width) // Source.Height > Source.Width
				{
					zoom = source.Width / source.Height;
					h = target.Height;
					w = target.Height * zoom;
					if (w > target.Width)
					{
						w = target.Width;
						h = target.Width / zoom;
					}
				}
				else // Limit.Width > Limit.Height
				{
					zoom = source.Width / source.Height;
					h = target.Height;
					w = target.Height * zoom;
				}

				var szf = new SizeF(w, h);

				// Рассчитываем коэффициент Zoom'а, по большему из размеров, для большей точночти
				zoom = (w > h)
					? (w / source.Width)
					: (h / source.Height);

				return (szf, zoom);
			}

			#endregion


			/// <summary>Размер = текущему разрешению экрана? Наверное будет гнать в многомониторной системе</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static bool e_IsLikeScreen(this System.Drawing.Size szTarget)
			{
				throw new NotImplementedException();

				//var szScreen = My.Computer.Screen.Bounds.Size;
				//bool IsLikeScr = szTarget == szScreen;
				//return IsLikeScr;
			}

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static bool e_IsFullHD(this System.Drawing.Size szTarget)
			{
				var szFullHD = new Size(1920, 1080);
				return (szTarget == szFullHD);
			}



			#region Point / Size / Rectangle - Туда / сюда преобразования


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static SizeF e_Multiply(this SizeF Source, float Zoom) => new(Source.Width * Zoom, Source.Height * Zoom);


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static PointF e_Multiply(this PointF Source, float Zoom) => new(Source.X * Zoom, Source.Y * Zoom);


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static System.Drawing.Point e_ToPoint(this PointF Source) => new((int)Source.X, (int)Source.Y);


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static PointF e_ToPoint(this SizeF Source) => new(Source.Width, Source.Height);

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static Point e_ToPoint(this Size Source) => new(Source.Width, Source.Height);


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static PointF e_ToPointF(this Size Source) => new(Source.Width, Source.Height);


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static SizeF e_ToSize(this PointF Source) => new(Source.X, Source.Y);


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static SizeF e_ToSizeF(this Size Source) => new(Source.Width, Source.Height);


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static RectangleF e_ToRectangleF(this System.Drawing.SizeF Source, PointF? newLocation = null)
				=> new(
					newLocation.HasValue
						? newLocation.Value
						: new PointF(0, 0),
					 Source);


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static Rectangle e_ToRectangle(this System.Drawing.Size Source, Point? newLocation = null)
				=> new(
					  newLocation.HasValue
						? newLocation.Value
						: new Point(0, 0),
					 Source);


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static RectangleF e_ToRectangleF(this Rectangle RC) => new(RC.Left, RC.Top, RC.Width, RC.Height);


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static Rectangle e_ToRectangle(this RectangleF RCF)
			{
				RCF = RCF.e_Round(0);
				return new(
					(int)RCF.Left,
					(int)RCF.Top,
					(int)RCF.Width,
					(int)RCF.Height);
			}







			internal enum Orientations : int
			{
				Portrait,
				Landscape,
				Square
			}

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static Orientations e_GetOrientation(this System.Drawing.Size szScreen)
			{
				Orientations ret;
				if (szScreen.Width == szScreen.Height) ret = Orientations.Square;
				else if (szScreen.Width > szScreen.Height) ret = Orientations.Landscape;
				else ret = Orientations.Portrait;
				return ret;
			}

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static bool e_OrientationIsLandscape(this System.Drawing.Size szScreen)
			{
				return szScreen.e_GetOrientation() == Orientations.Landscape;
			}

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static bool e_OrientationIsPortrait(this System.Drawing.Size szScreen)
			{
				return szScreen.e_GetOrientation() == Orientations.Portrait;
			}

			/// <summary>Округляет, используя Round(Precission)</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static RectangleF e_Round(this RectangleF RCF, int Precission)
			{
				float X, Y, W, H;
				X = RCF.Left.e_Round(Precission);
				Y = RCF.Top.e_Round(Precission);
				W = RCF.Width.e_Round(Precission);
				H = RCF.Height.e_Round(Precission);
				var RC = new RectangleF(X, Y, W, H);
				return RC;
			}
			// '	Function RectCenter(ByVal X As Integer, ByVal Y As Integer, ByVal W As Integer, ByVal H As Integer) As Win.RECT
			// '		Dim R As Win.RECT
			// '		Dim W2, H2 As Integer
			// '		W2 = W \ 2
			// '		H2 = H \ 2
			// '		With R
			// '			.Left = X - W2
			// '			.Right = X + W2 + IIf(Чётное(W), 0, 1)
			// '			.Top = Y - H2
			// '			.bottom = Y + H2 + IIf(Чётное(H), 0, 1)
			// '		End With
			// '		RectCenter = LSet(R, Len(RectCenter))
			// '	End Function


			// '	Function RectCenterRect(ByRef RcParent As Win.RECT, ByRef RcClient As Win.RECT) As Win.RECT
			// '		Dim WP, Xp, Yp, Hp As Integer
			// '		Dim Wc, Xc, Yc, Hc As Integer
			// '		Dim RR As Win.RECT

			// '		Xp = RcParent.Left
			// '		Yp = RcParent.Top
			// '		WP = RcParent.Right - RcParent.Left
			// '		Hp = RcParent.bottom - RcParent.Top
			// '		Xc = RcClient.Left
			// '		Yc = RcClient.Top
			// '		Wc = RcClient.Right - RcClient.Left
			// '		Hc = RcClient.bottom - RcClient.Top

			// '		RR.Left = (Xp + (WP \ 2)) - (Wc \ 2)
			// '		RR.Top = (Yp + (Hp \ 2)) - (Hc \ 2)

			// '		RR.Right = RR.Left + Wc
			// '		RR.bottom = RR.Top + Hc
			// '		'UPGRADE_WARNING: Couldn't resolve default property of object RectCenterRect. Click for more: 'ms-help://MS.VSCC/commoner/redir/redirect.htm?keyword="vbup1037"'
			// '		RectCenterRect = RR
			// '	End Function
			// #End Region


			#endregion

			#region Тригонометрия, 3D

			/// <summary>Расчёт координат новой точки, повернутой вокруг заданной на угол</summary>
			/// <param name="ptfCenter">Точка, относительно оторой вращаемся</param>
			/// <param name="AngleRad">Угол в радианах</param>
			/// <param name="sngRadius">Радиус</param>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static PointF e_RotateAround(this PointF ptfCenter, float AngleRad, float sngRadius)
			{
				var ptfOffset = AngleRad.e_RotateAround(sngRadius);
				return new PointF(ptfCenter.X + ptfOffset.X, ptfCenter.Y + ptfOffset.Y);
			}

			/// <summary>Расчёт координат новой точки, повернутой вокруг заданной на угол (с разными X/Y радиусами - для овалов))</summary>
			/// <param name="ptfCenter">Точка, относительно оторой вращаемся</param>
			/// <param name="AngleRad">Угол в радианах</param>
			/// <param name="Radius">Радиус X,Y</param>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static System.Drawing.PointF e_RotateAround(this PointF ptfCenter, float AngleRad, System.Drawing.SizeF Radius)
			{
				var ptfOffset = AngleRad.e_RotateAround(Radius);
				return new PointF(ptfCenter.X + ptfOffset.X, ptfCenter.Y + ptfOffset.Y);
			}

			/// <summary>Расчёт координат новой точки, повернутой вокруг заданной на угол (с разными X/Y радиусами - для овалов))</summary>
			/// <param name="AngleRad">Угол в радианах</param>
			/// <param name="Radius">Радиус X,Y</param>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static System.Drawing.PointF e_RotateAround(this float AngleRad, System.Drawing.SizeF Radius)
			{
				return new PointF((float)(Math.Cos(AngleRad) * Radius.Width), (float)(Math.Sin(AngleRad) * Radius.Height));
			}

			/// <summary>Расчёт координат новой точки, повернутой вокруг заданной на угол</summary>
			/// <param name="AngleRad">Угол в радианах</param>
			/// <param name="sngRadius">Радиус</param>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static PointF e_RotateAround(this float AngleRad, float sngRadius)
			{
				return AngleRad.e_RotateAround(new SizeF(sngRadius, sngRadius));
			}



			#endregion


			/// <summary>Делит каждое значение на заданное</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static RectangleF e_DivideTo(this Rectangle RC, float Делитель) => new(RC.Left / Делитель, RC.Top / Делитель, RC.Width / Делитель, RC.Height / Делитель);


			/// <summary>Делит каждое значение на заданное</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static RectangleF e_MultipleTo(this RectangleF RC, float Множитель) => new(RC.Left * Множитель, RC.Top * Множитель, RC.Width * Множитель, RC.Height * Множитель);


			/// <summary>Находит центр прямоугольника</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static PointF e_GetCenter(this RectangleF RC) => new(RC.Left + (RC.Width / 2), RC.Top + (RC.Height / 2));

			internal static PointF e_Round(this PointF pt, int digits = 0) => new(
				(float)Math.Round(pt.X, digits),
				(float)Math.Round(pt.Y, digits));

			internal static Point e_RoundToInt(this PointF pt)
			{
				pt = pt.e_Round(0);
				return new((int)pt.X, (int)pt.Y);
			}

			internal static Size e_GetVectorTo(this Point source, Point target)
			{
				int dx = source.X - target.X;
				int dy = source.Y - target.Y;
				return new(dx, dy);
			}

			internal static double e_GetHypotenuse(this Size vector)
			{
				var dx = Math.Pow((double)vector.Width, 2d);
				var dy = Math.Pow((double)vector.Height, 2d);
				return Math.Sqrt(dx + dy);
			}


			/// <summary>Находит центр прямоугольника</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static PointF e_GetCenter(this Rectangle RC) => RC.e_ToRectangleF().e_GetCenter();


			/// <summary>Центрирует Короткую линию по более длинной</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static float e_CenterTo(this float ShortLineWidth, float LongLineWidth) => (LongLineWidth - ShortLineWidth) / 2f;


			/// <summary>Центрирует Короткую линию по более длинной</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static int e_CenterTo(this int ShortLineWidth, int LongLineWidth) => (int)Math.Round((LongLineWidth - ShortLineWidth) / 2f);


			/// <summary>Центрирует прямоугольник относительно заданной точки</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static RectangleF e_CenterTo(this RectangleF RC, PointF ptCenter)
				=> new(
					ptCenter.X - RC.Width / 2,
					ptCenter.Y - RC.Height / 2,
					RC.Width,
					RC.Height);



			/// <summary>Центрирует прямоугольник относительно заданной точки</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static Rectangle e_CenterTo(this Rectangle RC, Point ptCenter)
				=> new(
					ptCenter.X - RC.Width / 2,
					ptCenter.Y - RC.Height / 2,
					RC.Width,
					RC.Height);




			/// <summary>Центрирует прямоугольник относительно заданной точки</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static Rectangle e_AlignTo(this Rectangle src, Rectangle trg, ContentAlignment alignment, Point? offset = null)
			{
				Point ptLocation = src.Location;

				{
					//Calculate Y
					switch (alignment)
					{
						case ContentAlignment.TopLeft:
						case ContentAlignment.TopCenter:
						case ContentAlignment.TopRight:
							{
								ptLocation.Y = trg.Y;
								if (offset.HasValue) ptLocation.Y += offset.Value.Y;
								break;
							}
					}

					switch (alignment)
					{
						case ContentAlignment.MiddleLeft:
						case ContentAlignment.MiddleCenter:
						case ContentAlignment.MiddleRight:
							{
								Rectangle rcCentered = src.e_CenterTo(trg.e_GetCenter().e_ToPoint());
								ptLocation.Y = rcCentered.Y;
								break;
							}
					}

					switch (alignment)
					{
						case ContentAlignment.BottomLeft:
						case ContentAlignment.BottomCenter:
						case ContentAlignment.BottomRight:
							{
								ptLocation.Y = trg.Bottom - src.Height;
								if (offset.HasValue) ptLocation.Y -= offset.Value.Y;
								break;
							}
					}
				}

				{
					//Calculate X

					switch (alignment)
					{
						case ContentAlignment.TopLeft:
						case ContentAlignment.MiddleLeft:
						case ContentAlignment.BottomLeft:
							{
								ptLocation.X = trg.X;
								if (offset.HasValue) ptLocation.X += offset.Value.X;
								break;
							}
					}

					switch (alignment)
					{
						case ContentAlignment.TopCenter:
						case ContentAlignment.MiddleCenter:
						case ContentAlignment.BottomCenter:
							{
								Rectangle rcCentered = src.e_CenterTo(trg.e_GetCenter().e_ToPoint());
								ptLocation.X = rcCentered.X;
								break;
							}
					}

					switch (alignment)
					{
						case ContentAlignment.TopRight:
						case ContentAlignment.MiddleRight:
						case ContentAlignment.BottomRight:
							{
								ptLocation.X = trg.Right - src.Width;
								if (offset.HasValue) ptLocation.X -= offset.Value.X;
								break;
							}
					}
				}
				return new(ptLocation, src.Size);
			}












			/// <summary>Точка внутри?</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static bool e_IsInRect(this System.Drawing.Rectangle RC, System.Drawing.Point PT)
			{
				if (PT.X < RC.Left) return false;
				if (PT.X > RC.Right) return false;
				if (PT.Y < RC.Top) return false;
				if (PT.Y > RC.Bottom) return false;
				return true;
			}

			/// <summary>Сделать, чтобы точка не выходила за пределы</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static System.Drawing.RectangleF e_EnsureInRect(this System.Drawing.RectangleF src, System.Drawing.RectangleF trg)
			{
				if (src.Left > trg.Right) src.X = trg.Right;
				if (src.Top > trg.Bottom) src.Y = trg.Bottom;
				if (src.Left < trg.Left) src.X = trg.Left;
				if (src.Top < trg.Top) src.Y = trg.Top;
				if (src.Right > trg.Right) src.Width = trg.Right - src.Left;
				if (src.Bottom > trg.Bottom) src.Height = trg.Bottom - src.Top;
				return src;
			}

			/// <inheritdoc cref="e_EnsureInRect"/>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static System.Drawing.Rectangle e_EnsureInRect(this System.Drawing.Rectangle src, System.Drawing.Rectangle trg)
			{
				if (src.Left > trg.Right) src.X = trg.Right;
				if (src.Top > trg.Bottom) src.Y = trg.Bottom;
				if (src.Left < trg.Left) src.X = trg.Left;
				if (src.Top < trg.Top) src.Y = trg.Top;
				if (src.Right > trg.Right) src.Width = trg.Right - src.Left;
				if (src.Bottom > trg.Bottom) src.Height = trg.Bottom - src.Top;
				return src;
			}

			/// <summary>Normalizing rectangle</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static System.Drawing.Rectangle e_Normalize(this System.Drawing.Rectangle src)
			{
				int l = new int[] { src.Left, src.Right }.Min();
				int r = new int[] { src.Left, src.Right }.Max();
				int t = new int[] { src.Top, src.Bottom }.Min();
				int b = new int[] { src.Top, src.Bottom }.Max();
				return Rectangle.FromLTRB(l, t, r, b);
			}

			/// <summary>Normalizing rectangle</summary>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static System.Drawing.RectangleF e_Normalize(this System.Drawing.RectangleF src)
			{
				float l = new float[] { src.Left, src.Right }.Min();
				float r = new float[] { src.Left, src.Right }.Max();
				float t = new float[] { src.Top, src.Bottom }.Min();
				float b = new float[] { src.Top, src.Bottom }.Max();
				return RectangleF.FromLTRB(l, t, r, b);
			}


			#endregion


			//}

		}

		internal static class Extensions_Imaging
		{

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static Image e_ToGrayscale(this Bitmap src) => ToolStripRenderer.CreateDisabledImage(src);


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static Bitmap e_MakeGrayscale_Matrix(this Bitmap original)
			{
				// create a blank bitmap the same size as original
				Bitmap newBitmap = new(original.Width, original.Height, PixelFormat.Format16bppGrayScale);

				// get a graphics object from the new image
				using (Graphics g = Graphics.FromImage(newBitmap))
				{
					// create some image attributes
					using (ImageAttributes attributes = new())
					{
						// create the grayscale ColorMatrix
						ColorMatrix colorMatrix = new(
							   new float[][] {
								   new float[] { 0.3f, 0.3f, 0.3f, 0f, 0f },
								   new float[] { 0.59f, 0.59f, 0.59f, 0f, 0f },
								   new float[] { 0.11f, 0.11f, 0.11f, 0f, 0f },
								   new float[] { 0f, 0f, 0f, 1f, 0f },
								   new float[] { 0f, 0f, 0f, 0f, 1f } });

						// set the color matrix attribute
						attributes.SetColorMatrix(colorMatrix);

						// draw the original image on the new image using the grayscale color matrix
						g.DrawImage(
							 original,
							 new Rectangle(0, 0, original.Width, original.Height),
							 0, 0, original.Width, original.Height,
							  GraphicsUnit.Pixel,
								 attributes);
						// dispose the Graphics object
					}
				}
				return newBitmap;
			}


		}



	}

#pragma warning restore IDE1006 // Naming Styles


	namespace WinAPI
	{

		//[SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]
		internal static partial class Errors
		{

			#region Фиксация ошибки в журнале и в DEBUG MODE вывод сообщения

			/// <summary>Фиксация ошибки в журнале и в DEBUG MODE вывод сообщения</summary>
			internal static void NTLogWrite(string Message, EventLogEntryType ET, string NT_LOG_NAME = "UOM")
			{
				string erorHeader = $"{DateTime.Now.e_ToFileName()} | {Application.ProductName} (ver.:{Application.ProductVersion}) \n{Application.ExecutablePath}\n";
#if DEBUG
				erorHeader += "mode: DEBUG";
#else
				erorHeader += "mode: RELEASE";
#endif
				Message = $"{erorHeader}\n{Message}";
				try
				{
					var FI = new FileInfo(Application.ExecutablePath);
					if (!EventLog.SourceExists(FI.Name)) EventLog.CreateEventSource(FI.Name, NT_LOG_NAME);
					try { EventLog.WriteEntry(FI.Name, Message, ET); }
					catch { }
				}
				catch { }

				try
				{
					var fiErrorLog = "_ERRORS.LOG".e_GetFileIn_AppData_Local().e_ToFileInfo();
					if (fiErrorLog != null)
						using (var SW = fiErrorLog.AppendText())
						{
							SW.WriteLine('*'.e_Repeat());
							SW.WriteLine(Message);
							SW.Flush();
							SW.Close();
						}
				}
				catch
				{
				}
			}
			#endregion

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void ThrowWin23Error(Win32Errors ErrorCode, string? DescriptionOfErrorAction = null)
				=> new Win32Exception((int)ErrorCode, DescriptionOfErrorAction).e_Throw();


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void ThrowLastWin23Error(string? DescriptionOfErrorAction = null)
				=> new Win32Exception(DescriptionOfErrorAction).e_Throw();


			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static Win32ExceptionEx LastWin23Error() => new();

			/// <summary>Вызывает ошибку, только если код не равен указанному</summary>
			/// <param name="IgnoreErrorCode">Код игнорируемой ошибки</param>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public static void ThrowLastWin23ErrorAssert(Win32Errors IgnoreErrorCode = Win32Errors.ERROR_SUCCESS)
			{
				var WEX = LastWin23Error();
				if (WEX.NativeErrorCode != IgnoreErrorCode) WEX.e_Throw();
				$"ThrowLastWin23ErrorAssert skip: {WEX.Message}\n\t{WEX.StackTrace}".DEBUG_SHOW_LINE();
			}

			public static void trycatchWin32(Func<int> operation)
			{
				int result = operation.Invoke();
				if (result == (int)Win32Errors.ERROR_SUCCESS) return;
				throw new Win32Exception(result);
			}

			public static void trycatchWin32(Func<int> operation, string messageTemplate, params object[] messageArgs)
			{
				int result = operation.Invoke();
				if (result == (int)Win32Errors.ERROR_SUCCESS) return;
				throw new Win32Exception(result, messageTemplate.e_Format(messageArgs));
			}

			public static void trycatchWin32(Func<bool> operation) { if (!operation.Invoke()) ThrowLastWin23Error(); }

			public static void trycatchWin32(Func<bool> operation, string messageTemplate, params object[] messageArgs) { if (!operation.Invoke()) ThrowLastWin23Error(messageTemplate.e_Format(messageArgs)); }

			internal enum Win32Errors : int
			{
				/// <summary>The operation completed successfully.</summary>
				ERROR_SUCCESS = 0,
				/// <summary> Incorrect function.</summary>
				ERROR_INVALID_FUNCTION = 1,
				/// <summary>The system cannot find the file specified.</summary>
				ERROR_FILE_NOT_FOUND = 2,
				/// <summary>The system cannot find the path specified.</summary>
				ERROR_PATH_NOT_FOUND = 3,
				/// <summary>The system cannot open the file.</summary>
				ERROR_TOO_MANY_OPEN_FILES = 4,
				/// <summary>Access is denied.</summary>
				ERROR_ACCESS_DENIED = 5,
				/// <summary>The handle is invalid.</summary>
				ERROR_INVALID_HANDLE = 6,
				/// <summary>The storage control blocks were destroyed.</summary>
				ERROR_ARENA_TRASHED = 7,
				/// <summary>Not enough storage is available to process this command.</summary>
				ERROR_NOT_ENOUGH_MEMORY = 8,
				/// <summary>The storage control block address is invalid.</summary>
				ERROR_INVALID_BLOCK = 9,
				/// <summary>The environment is incorrect.</summary>
				ERROR_BAD_ENVIRONMENT = 10,
				/// <summary>An attempt was made to load a program with an incorrect format.</summary>
				ERROR_BAD_FORMAT = 11,
				/// <summary>The access code is invalid.</summary>
				ERROR_INVALID_ACCESS = 12,
				/// <summary>The data is invalid.</summary>
				ERROR_INVALID_DATA = 13,
				/// <summary>Not enough storage is available to complete this operation.</summary>
				ERROR_OUTOFMEMORY = 14,
				/// <summary>The system cannot find the drive specified.</summary>
				ERROR_INVALID_DRIVE = 15,
				/// <summary>The directory cannot be removed.</summary>
				ERROR_CURRENT_DIRECTORY = 16,
				/// <summary>The system cannot move the file to a different disk drive.</summary>
				ERROR_NOT_SAME_DEVICE = 17,
				/// <summary>There are no more files.</summary>
				ERROR_NO_MORE_FILES = 18,
				/// <summary>The media is write protected.</summary>
				ERROR_WRITE_PROTECT = 19,
				/// <summary>The system cannot find the device specified.</summary>
				ERROR_BAD_UNIT = 20,
				/// <summary>The device is not ready.</summary>
				ERROR_NOT_READY = 21,
				/// <summary>The device does not recognize the command.</summary>
				ERROR_BAD_COMMAND = 22,
				/// <summary>Data error (cyclic redundancy check).</summary>
				ERROR_CRC = 23,
				/// <summary>The program issued a command but the command length is incorrect.</summary>
				ERROR_BAD_LENGTH = 24,
				/// <summary>The drive cannot locate a specific area or track on the disk.</summary>
				ERROR_SEEK = 25,
				/// <summary>The specified disk or diskette cannot be accessed.</summary>
				ERROR_NOT_DOS_DISK = 26,
				/// <summary>The drive cannot find the sector requested.</summary>
				ERROR_SECTOR_NOT_FOUND = 27,
				/// <summary>The printer is [Out ] of paper.</summary>
				ERROR_OUT_OF_PAPER = 28,
				/// <summary>The system cannot write to the specified device.</summary>
				ERROR_WRITE_FAULT = 29,
				/// <summary>The system cannot read from the specified device.</summary>
				ERROR_READ_FAULT = 30,
				/// <summary>A device attached to the system is not functioning.</summary>
				ERROR_GEN_FAILURE = 31,
				/// <summary>The process cannot access the file because it is being used by another process.</summary>
				ERROR_SHARING_VIOLATION = 32,
				/// <summary>The process cannot access the file because another process has locked a portion of the file.</summary>
				ERROR_LOCK_VIOLATION = 33,
				/// <summary>The wrong diskette is in the drive. Insert %2 (Volume Serial Number: %3) into drive %1.</summary>
				ERROR_WRONG_DISK = 34,
				/// <summary>Too many files opened for sharing.</summary>
				ERROR_SHARING_BUFFER_EXCEEDED = 36,
				/// <summary>Reached the end of the file.</summary>
				ERROR_HANDLE_EOF = 38,
				/// <summary>The disk is full.</summary>
				ERROR_HANDLE_DISK_FULL = 39,
				/// <summary>The request is not supported.</summary>
				ERROR_NOT_SUPPORTED = 50,
				/// <summary>Windows cannot find the network path. Verify that the network path is correct and the destination computer is not busy or turned off. If Windows still cannot find the network path, contact your network administrator.</summary>
				ERROR_REM_NOT_LIST = 51,
				/// <summary>You were not connected because a duplicate name exists on the network. Go to System in Control Panel to change the computer name and try again.</summary>
				ERROR_DUP_NAME = 52,
				/// <summary>The network path was not found.</summary>
				ERROR_BAD_NETPATH = 53,
				/// <summary>The network is busy.</summary>
				ERROR_NETWORK_BUSY = 54,
				/// <summary>The specified network resource or device is no longer available.</summary>
				ERROR_DEV_NOT_EXIST = 55, // dderror
				/// <summary>The network BIOS command limit has been reached.</summary>
				ERROR_TOO_MANY_CMDS = 56,
				/// <summary>A network adapter hardware error occurred.</summary>
				ERROR_ADAP_HDW_ERR = 57,
				/// <summary>The specified server cannot perform the requested operation.</summary>
				ERROR_BAD_NET_RESP = 58,
				/// <summary>An unexpected network error occurred.</summary>
				ERROR_UNEXP_NET_ERR = 59,
				/// <summary>The remote adapter is not compatible.</summary>
				ERROR_BAD_REM_ADAP = 60,
				/// <summary>The printer queue is full.</summary>
				ERROR_PRINTQ_FULL = 61,
				/// <summary>Space to store the file waiting to be printed is not available on the server.</summary>
				ERROR_NO_SPOOL_SPACE = 62,
				/// <summary>Your file waiting to be printed was deleted.</summary>
				ERROR_PRINT_CANCELLED = 63,
				/// <summary>The specified network name is no longer available.</summary>
				ERROR_NETNAME_DELETED = 64,
				/// <summary>Network access is denied.</summary>
				ERROR_NETWORK_ACCESS_DENIED = 65,
				/// <summary>The network resource type is not correct.</summary>
				ERROR_BAD_DEV_TYPE = 66,
				/// <summary>The network name cannot be found.</summary>
				ERROR_BAD_NET_NAME = 67,
				/// <summary>The name limit for the local computer network adapter card was exceeded.</summary>
				ERROR_TOO_MANY_NAMES = 68,
				/// <summary>The network BIOS session limit was exceeded.</summary>
				ERROR_TOO_MANY_SESS = 69,
				/// <summary>The remote server has been paused or is in the process of being started.</summary>
				ERROR_SHARING_PAUSED = 70,
				/// <summary>No more connections can be made to this remote computer at this time because there are already as many connections as the computer can accept.</summary>
				ERROR_REQ_NOT_ACCEP = 71,
				/// <summary>The specified printer or disk device has been paused.</summary>
				ERROR_REDIR_PAUSED = 72,
				/// <summary>The file exists.</summary>
				ERROR_FILE_EXISTS = 80,
				/// <summary>The directory or file cannot be created.</summary>
				ERROR_CANNOT_MAKE = 82,
				/// <summary>Fail on INT 24.</summary>
				ERROR_FAIL_I24 = 83,
				/// <summary>Storage to process this request is not available.</summary>
				ERROR_OUT_OF_STRUCTURES = 84,
				/// <summary>The local device name is already in use.</summary>
				ERROR_ALREADY_ASSIGNED = 85,
				/// <summary>The specified network password is not correct.</summary>
				ERROR_INVALID_PASSWORD = 86,
				/// <summary>The parameter is incorrect.</summary>
				ERROR_INVALID_PARAMETER = 87,
				/// <summary>A write fault occurred on the network.</summary>
				ERROR_NET_WRITE_FAULT = 88,
				/// <summary>The system cannot start another process at this time.</summary>
				ERROR_NO_PROC_SLOTS = 89,
				/// <summary>Cannot create another system semaphore.</summary>
				ERROR_TOO_MANY_SEMAPHORES = 100,
				/// <summary>The exclusive semaphore is owned by another process.</summary>
				ERROR_EXCL_SEM_ALREADY_OWNED = 101,
				/// <summary>The semaphore is set and cannot be closed.</summary>
				ERROR_SEM_IS_SET = 102,
				/// <summary>The semaphore cannot be set again.</summary>
				ERROR_TOO_MANY_SEM_REQUESTS = 103,
				/// <summary>Cannot request exclusive semaphores at interrupt time.</summary>
				ERROR_INVALID_AT_INTERRUPT_TIME = 104,
				/// <summary>The previous ownership of this semaphore has ended.</summary>
				ERROR_SEM_OWNER_DIED = 105,
				/// <summary>Insert the diskette for drive %1.</summary>
				ERROR_SEM_USER_LIMIT = 106,
				/// <summary>The program stopped because an alternate diskette was not inserted.</summary>
				ERROR_DISK_CHANGE = 107,
				/// <summary>The disk is in use or locked by another process.</summary>
				ERROR_DRIVE_LOCKED = 108,
				/// <summary>The pipe has been ended.</summary>
				ERROR_BROKEN_PIPE = 109,
				/// <summary>The system cannot open the device or file specified.</summary>
				ERROR_OPEN_FAILED = 110,
				/// <summary>The file name is too long.</summary>
				ERROR_BUFFER_OVERFLOW = 111,
				/// <summary>There is not enough space on the disk.</summary>
				ERROR_DISK_FULL = 112,
				/// <summary>No more internal file identifiers available.</summary>
				ERROR_NO_MORE_SEARCH_HANDLES = 113,
				/// <summary>The target internal file identifier is incorrect.</summary>
				ERROR_INVALID_TARGET_HANDLE = 114,
				/// <summary>The IOCTL call made by the application program is not correct.</summary>
				ERROR_INVALID_CATEGORY = 117,
				/// <summary>The verify-on-write switch parameter value is not correct.</summary>
				ERROR_INVALID_VERIFY_SWITCH = 118,
				/// <summary>The system does not support the command requested.</summary>
				ERROR_BAD_DRIVER_LEVEL = 119,
				/// <summary>This function is not supported on this system.</summary>
				ERROR_CALL_NOT_IMPLEMENTED = 120,
				/// <summary>The semaphore timeout period has expired.</summary>
				ERROR_SEM_TIMEOUT = 121,
				/// <summary>The data area passed to a system call is too small.</summary>
				ERROR_INSUFFICIENT_BUFFER = 122,
				/// <summary>The filename, directory name, or volume label syntax is incorrect.</summary>
				ERROR_INVALID_NAME = 123, // dderror
				/// <summary>The system call level is not correct.</summary>
				ERROR_INVALID_LEVEL = 124,
				/// <summary>The disk has no volume label.</summary>
				ERROR_NO_VOLUME_LABEL = 125,
				/// <summary>The specified module could not be found.</summary>
				ERROR_MOD_NOT_FOUND = 126,
				/// <summary>The specified procedure could not be found.</summary>
				ERROR_PROC_NOT_FOUND = 127,
				/// <summary>There are no child processes to wait for.</summary>
				ERROR_WAIT_NO_CHILDREN = 128,
				/// <summary>The %1 application cannot be run in Win32 mode.</summary>
				ERROR_CHILD_NOT_COMPLETE = 129,
				/// <summary>Attempt to use a file handle to an open disk partition for an operation other than raw disk I/O.</summary>
				ERROR_DIRECT_ACCESS_HANDLE = 130,
				/// <summary>An attempt was made to move the file pointer before the beginning of the file.</summary>
				ERROR_NEGATIVE_SEEK = 131,
				/// <summary>The file pointer cannot be set on the specified device or file.</summary>
				ERROR_SEEK_ON_DEVICE = 132,
				/// <summary>A JOIN or SUBST command cannot be used for a drive that contains previously joined drives.</summary>
				ERROR_IS_JOIN_TARGET = 133,
				/// <summary>An attempt was made to use a JOIN or SUBST command on a drive that has already been joined.</summary>
				ERROR_IS_JOINED = 134,
				/// <summary>An attempt was made to use a JOIN or SUBST command on a drive that has already been substituted.</summary>
				ERROR_IS_SUBSTED = 135,
				/// <summary>The system tried to delete the JOIN of a drive that is not joined.</summary>
				ERROR_NOT_JOINED = 136,
				/// <summary>The system tried to delete the substitution of a drive that is not substituted.</summary>
				ERROR_NOT_SUBSTED = 137,
				/// <summary>The system tried to join a drive to a directory on a joined drive.</summary>
				ERROR_JOIN_TO_JOIN = 138,
				/// <summary>The system tried to substitute a drive to a directory on a substituted drive.</summary>
				ERROR_SUBST_TO_SUBST = 139,
				/// <summary>The system tried to join a drive to a directory on a substituted drive.</summary>
				ERROR_JOIN_TO_SUBST = 140,
				/// <summary>The system tried to SUBST a drive to a directory on a joined drive.</summary>
				ERROR_SUBST_TO_JOIN = 141,
				/// <summary>The system cannot perform a JOIN or SUBST at this time.</summary>
				ERROR_BUSY_DRIVE = 142,
				/// <summary>The system cannot join or substitute a drive to or for a directory on the same drive.</summary>
				ERROR_SAME_DRIVE = 143,
				/// <summary>The directory is not a subdirectory of the root directory.</summary>
				ERROR_DIR_NOT_ROOT = 144,
				/// <summary>The directory is not empty.</summary>
				ERROR_DIR_NOT_EMPTY = 145,
				/// <summary>The path specified is being used in a substitute.</summary>
				ERROR_IS_SUBST_PATH = 146,
				/// <summary>Not enough resources are available to process this command.</summary>
				ERROR_IS_JOIN_PATH = 147,
				/// <summary>The path specified cannot be used at this time.</summary>
				ERROR_PATH_BUSY = 148,
				/// <summary>An attempt was made to join or substitute a drive for which a directory on the drive is the target of a previous substitute.</summary>
				ERROR_IS_SUBST_TARGET = 149,
				/// <summary>System trace information was not specified in your CONFIG. SYS file, or tracing is disallowed.</summary>
				ERROR_SYSTEM_TRACE = 150,
				/// <summary>The number of specified semaphore events for DosMuxSemWait is not correct.</summary>
				ERROR_INVALID_EVENT_COUNT = 151,
				/// <summary>DosMuxSemWait did not e_runute; too many semaphores are already set.</summary>
				ERROR_TOO_MANY_MUXWAITERS = 152,
				/// <summary>The DosMuxSemWait list is not correct.</summary>
				ERROR_INVALID_LIST_FORMAT = 153,
				/// <summary>The volume label you entered exceeds the label character limit of the target file system.</summary>
				ERROR_LABEL_TOO_LONG = 154,
				/// <summary>Cannot create another thread.</summary>
				ERROR_TOO_MANY_TCBS = 155,
				/// <summary>The recipient process has refused the signal.</summary>
				ERROR_SIGNAL_REFUSED = 156,
				/// <summary>The segment is already discarded and cannot be locked.</summary>
				ERROR_DISCARDED = 157,
				/// <summary>The segment is already unlocked.</summary>
				ERROR_NOT_LOCKED = 158,
				/// <summary>The address for the thread ID is not correct.</summary>
				ERROR_BAD_THREADID_ADDR = 159,
				/// <summary>One or more arguments are not correct.</summary>
				ERROR_BAD_ARGUMENTS = 160,
				/// <summary>The specified path is invalid.</summary>
				ERROR_BAD_PATHNAME = 161,
				/// <summary>A signal is already pending.</summary>
				ERROR_SIGNAL_PENDING = 162,
				/// <summary>No more threads can be created in the system.</summary>
				ERROR_MAX_THRDS_REACHED = 164,
				/// <summary>Unable to lock a region of a file.</summary>
				ERROR_LOCK_FAILED = 167,
				/// <summary>The requested resource is in use.</summary>
				ERROR_BUSY = 170, // dderror
				/// <summary>A lock request was not outstanding for the supplied cancel region.</summary>
				ERROR_CANCEL_VIOLATION = 173,
				/// <summary>The file system does not support atomic changes to the lock type.</summary>
				ERROR_ATOMIC_LOCKS_NOT_SUPPORTED = 174,
				/// <summary>The system detected a segment number that was not correct.</summary>
				ERROR_INVALID_SEGMENT_NUMBER = 180,
				/// <summary>The operating system cannot run %1.</summary>
				ERROR_INVALID_ORDINAL = 182,
				/// <summary>Cannot create a file when that file already exists.</summary>
				ERROR_ALREADY_EXISTS = 183,
				/// <summary>The flag passed is not correct.</summary>
				ERROR_INVALID_FLAG_NUMBER = 186,
				/// <summary>The specified system semaphore name was not found.</summary>
				ERROR_SEM_NOT_FOUND = 187,
				/// <summary>The operating system cannot run %1.</summary>
				ERROR_INVALID_STARTING_CODESEG = 188,
				/// <summary>The operating system cannot run %1.</summary>
				ERROR_INVALID_STACKSEG = 189,
				/// <summary>The operating system cannot run %1.</summary>
				ERROR_INVALID_MODULETYPE = 190,
				/// <summary>Cannot run %1 in Win32 mode.</summary>
				ERROR_INVALID_EXE_SIGNATURE = 191,
				/// <summary>The operating system cannot run %1.</summary>
				ERROR_EXE_MARKED_INVALID = 192,
				/// <summary>%1 is not a valid Win32 System.Windows.Forms.Application.</summary>
				ERROR_BAD_EXE_FORMAT = 193,
				/// <summary>The operating system cannot run %1.</summary>
				ERROR_ITERATED_DATA_EXCEEDS_64k = 194,
				/// <summary>The operating system cannot run %1.</summary>
				ERROR_INVALID_MINALLOCSIZE = 195,
				/// <summary>The operating system cannot run this application program.</summary>
				ERROR_DYNLINK_FROM_INVALID_RING = 196,
				/// <summary>The operating system is not presently configured to run this System.Windows.Forms.Application.</summary>
				ERROR_IOPL_NOT_ENABLED = 197,
				/// <summary>The operating system cannot run %1.</summary>
				ERROR_INVALID_SEGDPL = 198,
				/// <summary>The operating system cannot run this application program.</summary>
				ERROR_AUTODATASEG_EXCEEDS_64k = 199,
				/// <summary>The code segment cannot be greater than or equal to 64K.</summary>
				ERROR_RING2SEG_MUST_BE_MOVABLE = 200,
				/// <summary>The operating system cannot run %1.</summary>
				ERROR_RELOC_CHAIN_XEEDS_SEGLIM = 201,
				/// <summary>The operating system cannot run %1.</summary>
				ERROR_INFLOOP_IN_RELOC_CHAIN = 202,
				/// <summary>The system could not find the environment option that was entered.</summary>
				ERROR_ENVVAR_NOT_FOUND = 203,
				/// <summary>No process in the command subtree has a signal handler.</summary>
				ERROR_NO_SIGNAL_SENT = 205,
				/// <summary>The filename or extension is too long.</summary>
				ERROR_FILENAME_EXCED_RANGE = 206,
				/// <summary>The ring 2 stack is in use.</summary>
				ERROR_RING2_STACK_IN_USE = 207,
				/// <summary>The global filename characters, * or ?, are entered incorrectly or too many global filename characters are specified.</summary>
				ERROR_META_EXPANSION_TOO_LONG = 208,
				/// <summary>The signal being posted is not correct.</summary>
				ERROR_INVALID_SIGNAL_NUMBER = 209,
				/// <summary>The signal handler cannot be set.</summary>
				ERROR_THREAD_1_INACTIVE = 210,
				/// <summary>The segment is locked and cannot be reallocated.</summary>
				ERROR_LOCKED = 212,
				/// <summary>Too many dynamic-link modules are attached to this program or dynamic-link module.</summary>
				ERROR_TOO_MANY_MODULES = 214,
				/// <summary>Cannot nest calls to LoadModule.</summary>
				ERROR_NESTING_NOT_ALLOWED = 215,
				/// <summary>The image file %1 is valid, but is for a machine type other than the current machine.</summary>
				ERROR_EXE_MACHINE_TYPE_MISMATCH = 216,
				/// <summary>The image file %1 is signed, unable to modify.</summary>
				ERROR_EXE_CANNOT_MODIFY_SIGNED_BINARY = 217,
				/// <summary>The image file %1 is strong signed, unable to modify.</summary>
				ERROR_EXE_CANNOT_MODIFY_STRONG_SIGNED_BINARY = 218,
				/// <summary>The pipe state is invalid.</summary>
				ERROR_BAD_PIPE = 230,
				/// <summary>All pipe instances are busy.</summary>
				ERROR_PIPE_BUSY = 231,
				/// <summary>The pipe is being closed.</summary>
				ERROR_NO_DATA = 232,
				/// <summary>No process is on the other end of the pipe.</summary>
				ERROR_PIPE_NOT_CONNECTED = 233,
				/// <summary>More data is available.</summary>
				ERROR_MORE_DATA = 234, // dderror
				/// <summary>The session was canceled.</summary>
				ERROR_VC_DISCONNECTED = 240,
				/// <summary>The specified extended attribute name was invalid.</summary>
				ERROR_INVALID_EA_NAME = 254,
				/// <summary>The extended attributes are inconsistent.</summary>
				ERROR_EA_LIST_INCONSISTENT = 255,
				/// <summary>The wait operation timed out.</summary>
				WAIT_TIMEOUT = 258, // dderror
				/// <summary>No more data is available.</summary>
				ERROR_NO_MORE_ITEMS = 259,
				/// <summary>The copy functions cannot be used.</summary>
				ERROR_CANNOT_COPY = 266,
				/// <summary>The directory name is invalid.</summary>
				ERROR_DIRECTORY = 267,
				/// <summary>The extended attributes did not fit in the buffer.</summary>
				ERROR_EAS_DIDNT_FIT = 275,
				/// <summary>The extended attribute file on the mounted file system is corrupt.</summary>
				ERROR_EA_FILE_CORRUPT = 276,
				/// <summary>The extended attribute table file is full.</summary>
				ERROR_EA_TABLE_FULL = 277,
				/// <summary>The specified extended attribute handle is invalid.</summary>
				ERROR_INVALID_EA_HANDLE = 278,
				/// <summary>The mounted file system does not support extended attributes.</summary>
				ERROR_EAS_NOT_SUPPORTED = 282,
				/// <summary>Attempt to release mutex not owned by caller.</summary>
				ERROR_NOT_OWNER = 288,
				/// <summary>Too many posts were made to a semaphore.</summary>
				ERROR_TOO_MANY_POSTS = 298,
				/// <summary>Only part of a ReadProcessMemory or WriteProcessMemory request was completed.</summary>
				ERROR_PARTIAL_COPY = 299,
				/// <summary>The oplock request is denied.</summary>
				ERROR_OPLOCK_NOT_GRANTED = 300,
				/// <summary>An invalid oplock acknowledgment was received by the system.</summary>
				ERROR_INVALID_OPLOCK_PROTOCOL = 301,
				/// <summary>The volume is too fragmented to complete this operation.</summary>
				ERROR_DISK_TOO_FRAGMENTED = 302,
				/// <summary>The file cannot be opened because it is in the process of being deleted.</summary>
				ERROR_DELETE_PENDING = 303,
				/// <summary>The system cannot find message text for message number = %1 in the message file for %2.</summary>
				ERROR_MR_MID_NOT_FOUND = 317,
				/// <summary>The scope specified was not found.</summary>
				ERROR_SCOPE_NOT_FOUND = 318,
				/// <summary>Attempt to access invalid address.</summary>
				ERROR_INVALID_ADDRESS = 487,
				/// <summary>Arithmetic result exceeded 32 bits.</summary>
				ERROR_ARITHMETIC_OVERFLOW = 534,
				/// <summary>There is a process on other end of the pipe.</summary>
				ERROR_PIPE_CONNECTED = 535,
				/// <summary>Waiting for a process to open the other end of the pipe.</summary>
				ERROR_PIPE_LISTENING = 536,
				ERROR_ELEVATION_REQUIRED = 740, // (0x2E4)

				/// <summary>Access to the extended attribute was denied.</summary>
				ERROR_EA_ACCESS_DENIED = 994,
				/// <summary>The I/O operation has been aborted because of either a thread exit or an application request.</summary>
				ERROR_OPERATION_ABORTED = 995,
				/// <summary>Overlapped I/O event is not in a signaled state.</summary>
				ERROR_IO_INCOMPLETE = 996,
				/// <summary>Overlapped I/O operation is in progress.</summary>
				ERROR_IO_PENDING = 997, // dderror
				/// <summary>Invalid access to memory location.</summary>
				ERROR_NOACCESS = 998,
				/// <summary>Error performing inpage operation.</summary>
				ERROR_SWAPERROR = 999,
				/// <summary>Recursion too deep; the stack overflowed.</summary>
				ERROR_STACK_OVERFLOW = 1001,
				/// <summary>The window cannot act on the sent message.</summary>
				ERROR_INVALID_MESSAGE = 1002,
				/// <summary>Cannot complete this function.</summary>
				ERROR_CAN_NOT_COMPLETE = 1003,
				/// <summary>Invalid flags.</summary>
				ERROR_INVALID_FLAGS = 1004,
				/// <summary>The volume does not contain a recognized file system. Please make sure that all required file system drivers are loaded and that the volume is not corrupted.</summary>
				ERROR_UNRECOGNIZED_VOLUME = 1005,
				/// <summary>The volume for a file has been externally altered so that the opened file is no longer valid.</summary>
				ERROR_FILE_INVALID = 1006,
				/// <summary>The requested operation cannot be performed in full-screen mode.</summary>
				ERROR_FULLSCREEN_MODE = 1007,
				/// <summary>An attempt was made to reference a token that does not exist.</summary>
				ERROR_NO_TOKEN = 1008,
				/// <summary>The configuration registry database is corrupt.</summary>
				ERROR_BADDB = 1009,
				/// <summary>The configuration registry key is invalid.</summary>
				ERROR_BADKEY = 1010,
				/// <summary>The configuration registry key could not be opened.</summary>
				ERROR_CANTOPEN = 1011,
				/// <summary>The configuration registry key could not be read.</summary>
				ERROR_CANTREAD = 1012,
				/// <summary>The configuration registry key could not be written.</summary>
				ERROR_CANTWRITE = 1013,
				/// <summary>One of the files in the registry database had to be recovered by use of a log or alternate copy. The recovery was successful.</summary>
				ERROR_REGISTRY_RECOVERED = 1014,
				/// <summary>The registry is corrupted. The structure of one of the files containing registry data is corrupted, or the system's memory image of the file is corrupted, or the file could not be recovered because the alternate copy or log was absent or corrupted.</summary>
				ERROR_REGISTRY_CORRUPT = 1015,
				/// <summary>An I/O operation initiated by the registry failed unrecoverably. The registry could not read in, or write out, or flush, one of the files that contain the system's image of the registry.</summary>
				ERROR_REGISTRY_IO_FAILED = 1016,
				/// <summary>The system has attempted to load or restore a file into the registry, but the specified file is not in a registry file format.</summary>
				ERROR_NOT_REGISTRY_FILE = 1017,
				/// <summary>Illegal operation attempted on a registry key that has been marked for deletion.</summary>
				ERROR_KEY_DELETED = 1018,
				/// <summary>System could not allocate the required space in a registry log.</summary>
				ERROR_NO_LOG_SPACE = 1019,
				/// <summary>Cannot create a symbolic link in a registry key that already has subkeys or values.</summary>
				ERROR_KEY_HAS_CHILDREN = 1020,
				/// <summary>Cannot create a stable subkey under a volatile parent key.</summary>
				ERROR_CHILD_MUST_BE_VOLATILE = 1021,
				/// <summary>A notify change request is being completed and the information is not being returned in the caller's buffer. The caller now needs to enumerate the files to find the changes.</summary>
				ERROR_NOTIFY_ENUM_DIR = 1022,
				/// <summary>A stop control has been sent to a service that other running services are dependent on.</summary>
				ERROR_DEPENDENT_SERVICES_RUNNING = 1051,
				/// <summary>The requested control is not valid for this service.</summary>
				ERROR_INVALID_SERVICE_CONTROL = 1052,
				/// <summary>The service did not respond to the start or control request in a timely fashion.</summary>
				ERROR_SERVICE_REQUEST_TIMEOUT = 1053,
				/// <summary>A thread could not be created for the service.</summary>
				ERROR_SERVICE_NO_THREAD = 1054,
				/// <summary>The service database is locked.</summary>
				ERROR_SERVICE_DATABASE_LOCKED = 1055,
				/// <summary>An instance of the service is already running.</summary>
				ERROR_SERVICE_ALREADY_RUNNING = 1056,
				/// <summary>The account name is invalid or does not exist, or the password is invalid for the account name specified.</summary>
				ERROR_INVALID_SERVICE_ACCOUNT = 1057,
				/// <summary>The service cannot be started, either because it is disabled or because it has no enabled devices associated with it.</summary>
				ERROR_SERVICE_DISABLED = 1058,
				/// <summary>Circular service dependency was specified.</summary>
				ERROR_CIRCULAR_DEPENDENCY = 1059,
				/// <summary>The specified service does not exist as an installed service.</summary>
				ERROR_SERVICE_DOES_NOT_EXIST = 1060,
				/// <summary>The service cannot accept control messages at this time.</summary>
				ERROR_SERVICE_CANNOT_ACCEPT_CTRL = 1061,
				/// <summary>The service has not been started.</summary>
				ERROR_SERVICE_NOT_ACTIVE = 1062,
				/// <summary>The service process could not connect to the service controller.</summary>
				ERROR_FAILED_SERVICE_CONTROLLER_CONNECT = 1063,
				/// <summary>An exception occurred in the service when handling the control request.</summary>
				ERROR_EXCEPTION_IN_SERVICE = 1064,
				/// <summary>The database specified does not exist.</summary>
				ERROR_DATABASE_DOES_NOT_EXIST = 1065,
				/// <summary>The service has returned a service-specific error code.</summary>
				ERROR_SERVICE_SPECIFIC_ERROR = 1066,
				/// <summary>The process terminated unexpectedly.</summary>
				ERROR_PROCESS_ABORTED = 1067,
				/// <summary>The dependency service or group failed to start.</summary>
				ERROR_SERVICE_DEPENDENCY_FAIL = 1068,
				/// <summary>The service did not start due to a logon failure.</summary>
				ERROR_SERVICE_LOGON_FAILED = 1069,
				/// <summary>After starting, the service hung in a start-pending state.</summary>
				ERROR_SERVICE_START_HANG = 1070,
				/// <summary>The specified service database lock is invalid.</summary>
				ERROR_INVALID_SERVICE_LOCK = 1071,
				/// <summary>The specified service has been marked for deletion.</summary>
				ERROR_SERVICE_MARKED_FOR_DELETE = 1072,
				/// <summary>The specified service already exists.</summary>
				ERROR_SERVICE_EXISTS = 1073,
				/// <summary>The system is currently running with the last-known-good configuration.</summary>
				ERROR_ALREADY_RUNNING_LKG = 1074,
				/// <summary>The dependency service does not exist or has been marked for deletion.</summary>
				ERROR_SERVICE_DEPENDENCY_DELETED = 1075,
				/// <summary>The current boot has already been accepted for use as the last-known-good control set.</summary>
				ERROR_BOOT_ALREADY_ACCEPTED = 1076,
				/// <summary>No attempts to start the service have been made since the last boot.</summary>
				ERROR_SERVICE_NEVER_STARTED = 1077,
				/// <summary>The name is already in use as either a service name or a service display name.</summary>
				ERROR_DUPLICATE_SERVICE_NAME = 1078,
				/// <summary>The account specified for this service is different from the account specified for other services running in the same process.</summary>
				ERROR_DIFFERENT_SERVICE_ACCOUNT = 1079,
				/// <summary>Failure actions can only be set for Win32 services, not for drivers.</summary>
				ERROR_CANNOT_DETECT_DRIVER_FAILURE = 1080,
				/// <summary>This service runs in the same process as the service control manager. Therefore, the service control manager cannot take action if this service's process terminates unexpectedly.</summary>
				ERROR_CANNOT_DETECT_PROCESS_ABORT = 1081,
				/// <summary>No recovery program has been configured for this service.</summary>
				ERROR_NO_RECOVERY_PROGRAM = 1082,
				/// <summary>The e_runutable program that this service is configured to run in does not implement the service.</summary>
				ERROR_SERVICE_NOT_IN_EXE = 1083,
				/// <summary>This service cannot be started in Safe Mode.</summary>
				ERROR_NOT_SAFEBOOT_SERVICE = 1084,
				/// <summary>The physical end of the tape has been reached.</summary>
				ERROR_END_OF_MEDIA = 1100,
				/// <summary>A tape access reached a filemark.</summary>
				ERROR_FILEMARK_DETECTED = 1101,
				/// <summary>The beginning of the tape or a partition was encountered.</summary>
				ERROR_BEGINNING_OF_MEDIA = 1102,
				/// <summary>A tape access reached the end of a set of files.</summary>
				ERROR_SETMARK_DETECTED = 1103,
				/// <summary>No more data is on the tape.</summary>
				ERROR_NO_DATA_DETECTED = 1104,
				/// <summary>Tape could not be partitioned.</summary>
				ERROR_PARTITION_FAILURE = 1105,
				/// <summary>When accessing a new tape of a multivolume partition, the current block size is incorrect.</summary>
				ERROR_INVALID_BLOCK_LENGTH = 1106,
				/// <summary>Tape partition information could not be found when loading a tape.</summary>
				ERROR_DEVICE_NOT_PARTITIONED = 1107,
				/// <summary>Unable to lock the media eject mechanism.</summary>
				ERROR_UNABLE_TO_LOCK_MEDIA = 1108,
				/// <summary>Unable to unload the media.</summary>
				ERROR_UNABLE_TO_UNLOAD_MEDIA = 1109,
				/// <summary>The media in the drive may have changed.</summary>
				ERROR_MEDIA_CHANGED = 1110,
				/// <summary>The I/O bus was reset.</summary>
				ERROR_BUS_RESET = 1111,
				/// <summary>No media in drive.</summary>
				ERROR_NO_MEDIA_IN_DRIVE = 1112,
				/// <summary>No mapping for the Unicode character exists in the target multi-byte code page.</summary>
				ERROR_NO_UNICODE_TRANSLATION = 1113,
				/// <summary>A dynamic link library (DLL) initialization routine failed.</summary>
				ERROR_DLL_INIT_FAILED = 1114,
				/// <summary>A system shutdown is in progress.</summary>
				ERROR_SHUTDOWN_IN_PROGRESS = 1115,
				/// <summary>Unable to abort the system shutdown because no shutdown was in progress.</summary>
				ERROR_NO_SHUTDOWN_IN_PROGRESS = 1116,
				/// <summary>The request could not be performed because of an I/O device error.</summary>
				ERROR_IO_DEVICE = 1117,
				/// <summary>No serial device was successfully initialized. The serial driver will unload.</summary>
				ERROR_SERIAL_NO_DEVICE = 1118,
				/// <summary>Unable to open a device that was sharing an interrupt request (IRQ) with other devices. At least one other device that uses that IRQ was already opened.</summary>
				ERROR_IRQ_BUSY = 1119,
				/// <summary>A serial I/O operation was completed by another write to the serial port. (The IOCTL_SERIAL_XOFF_COUNTER reached zero.</summary>)
				ERROR_MORE_WRITES = 1120,
				/// <summary>A serial I/O operation completed because the timeout period expired. (The IOCTL_SERIAL_XOFF_COUNTER did not reach zero.</summary>)
				ERROR_COUNTER_TIMEOUT = 1121,
				/// <summary>No ID address mark was found on the floppy disk.</summary>
				ERROR_FLOPPY_ID_MARK_NOT_FOUND = 1122,
				/// <summary>Mismatch between the floppy disk sector ID field and the floppy disk controller track address.</summary>
				ERROR_FLOPPY_WRONG_CYLINDER = 1123,
				/// <summary>The floppy disk controller reported an error that is not recognized by the floppy disk driver.</summary>
				ERROR_FLOPPY_UNKNOWN_ERROR = 1124,
				/// <summary>The floppy disk controller returned inconsistent results in its registers.</summary>
				ERROR_FLOPPY_BAD_REGISTERS = 1125,
				/// <summary>While accessing the hard disk, a recalibrate operation failed, even after retries.</summary>
				ERROR_DISK_RECALIBRATE_FAILED = 1126,
				/// <summary>While accessing the hard disk, a disk operation failed even after retries.</summary>
				ERROR_DISK_OPERATION_FAILED = 1127,
				/// <summary>While accessing the hard disk, a disk controller reset was needed, but even that failed.</summary>
				ERROR_DISK_RESET_FAILED = 1128,
				/// <summary>Physical end of tape encountered.</summary>
				ERROR_EOM_OVERFLOW = 1129,
				/// <summary>Not enough server storage is available to process this command.</summary>
				ERROR_NOT_ENOUGH_SERVER_MEMORY = 1130,
				/// <summary>A potential deadlock condition has been detected.</summary>
				ERROR_POSSIBLE_DEADLOCK = 1131,
				/// <summary>The base address or the file offset specified does not have the proper alignment.</summary>
				ERROR_MAPPED_ALIGNMENT = 1132,
				/// <summary>An attempt to change the system power state was vetoed by another application or driver.</summary>
				ERROR_SET_POWER_STATE_VETOED = 1140,
				/// <summary>The system BIOS failed an attempt to change the system power state.</summary>
				ERROR_SET_POWER_STATE_FAILED = 1141,
				/// <summary>An attempt was made to create more links on a file than the file system supports.</summary>
				ERROR_TOO_MANY_LINKS = 1142,
				/// <summary>The specified program requires a newer version of Windows.</summary>
				ERROR_OLD_WIN_VERSION = 1150,
				/// <summary>The specified program is not a Windows or MS-DOS program.</summary>
				ERROR_APP_WRONG_OS = 1151,
				/// <summary>Cannot start more than one instance of the specified program.</summary>
				ERROR_SINGLE_INSTANCE_APP = 1152,
				/// <summary>The specified program was written for an earlier version of Windows.</summary>
				ERROR_RMODE_APP = 1153,
				/// <summary>One of the library files needed to run this application is damaged.</summary>
				ERROR_INVALID_DLL = 1154,
				/// <summary>No application is associated with the specified file for this operation.</summary>
				ERROR_NO_ASSOCIATION = 1155,
				/// <summary>An error occurred in sending the command to the System.Windows.Forms.Application.</summary>
				ERROR_DDE_FAIL = 1156,
				/// <summary>One of the library files needed to run this application cannot be found.</summary>
				ERROR_DLL_NOT_FOUND = 1157,
				/// <summary>The current process has used all of its system allowance of handles for Window Manager objects.</summary>
				ERROR_NO_MORE_USER_HANDLES = 1158,
				/// <summary>The message can be used only with synchronous operations.</summary>
				ERROR_MESSAGE_SYNC_ONLY = 1159,
				/// <summary>The indicated source element has no media.</summary>
				ERROR_SOURCE_ELEMENT_EMPTY = 1160,
				/// <summary>The indicated destination element already contains media.</summary>
				ERROR_DESTINATION_ELEMENT_FULL = 1161,
				/// <summary>The indicated element does not exist.</summary>
				ERROR_ILLEGAL_ELEMENT_ADDRESS = 1162,
				/// <summary>The indicated element is part of a magazine that is not present.</summary>
				ERROR_MAGAZINE_NOT_PRESENT = 1163,
				/// <summary>The indicated device requires reinitialization due to hardware errors.</summary>
				ERROR_DEVICE_REINITIALIZATION_NEEDED = 1164, // dderror
				/// <summary>The device has indicated that cleaning is required before further operations are attempted.</summary>
				ERROR_DEVICE_REQUIRES_CLEANING = 1165,
				/// <summary>The device has indicated that its door is open.</summary>
				ERROR_DEVICE_DOOR_OPEN = 1166,
				/// <summary>The device is not connected.</summary>
				ERROR_DEVICE_NOT_CONNECTED = 1167,
				/// <summary>Element not found.</summary>
				ERROR_NOT_FOUND = 1168,
				/// <summary>There was no match for the specified key in the index.</summary>
				ERROR_NO_MATCH = 1169,
				/// <summary>The property set specified does not exist on the object.</summary>
				ERROR_SET_NOT_FOUND = 1170,
				/// <summary>The point passed to GetMouseMovePoints is not in the buffer.</summary>
				ERROR_POINT_NOT_FOUND = 1171,
				/// <summary>The tracking (workstation) service is not running.</summary>
				ERROR_NO_TRACKING_SERVICE = 1172,
				/// <summary>The Volume ID could not be found.</summary>
				ERROR_NO_VOLUME_ID = 1173,
				/// <summary>Unable to remove the file to be replaced.</summary>
				ERROR_UNABLE_TO_REMOVE_REPLACED = 1175,
				/// <summary>Unable to move the replacement file to the file to be replaced. The file to be replaced has retained its original name.</summary>
				ERROR_UNABLE_TO_MOVE_REPLACEMENT = 1176,
				/// <summary>Unable to move the replacement file to the file to be replaced. The file to be replaced has been renamed using the backup name.</summary>
				ERROR_UNABLE_TO_MOVE_REPLACEMENT_2 = 1177,
				/// <summary>The volume change journal is being deleted.</summary>
				ERROR_JOURNAL_DELETE_IN_PROGRESS = 1178,
				/// <summary>The volume change journal is not active.</summary>
				ERROR_JOURNAL_NOT_ACTIVE = 1179,
				/// <summary>A file was found, but it may not be the correct file.</summary>
				ERROR_POTENTIAL_FILE_FOUND = 1180,
				/// <summary>The journal entry has been deleted from the journal.</summary>
				ERROR_JOURNAL_ENTRY_DELETED = 1181,
				/// <summary>The specified device name is invalid.</summary>
				ERROR_BAD_DEVICE = 1200,
				/// <summary>The device is not currently connected but it is a remembered connection.</summary>
				ERROR_CONNECTION_UNAVAIL = 1201,
				/// <summary>The local device name has a remembered connection to another network resource.</summary>
				ERROR_DEVICE_ALREADY_REMEMBERED = 1202,
				/// <summary>No network provider accepted the given network path.</summary>
				ERROR_NO_NET_OR_BAD_PATH = 1203,
				/// <summary>The specified network provider name is invalid.</summary>
				ERROR_BAD_PROVIDER = 1204,
				/// <summary>Unable to open the network connection profile.</summary>
				ERROR_CANNOT_OPEN_PROFILE = 1205,
				/// <summary>The network connection profile is corrupted.</summary>
				ERROR_BAD_PROFILE = 1206,
				/// <summary>Cannot enumerate a noncontainer.</summary>
				ERROR_NOT_CONTAINER = 1207,
				/// <summary>An extended error has occurred.</summary>
				ERROR_EXTENDED_ERROR = 1208,
				/// <summary>The format of the specified group name is invalid.</summary>
				ERROR_INVALID_GROUPNAME = 1209,
				/// <summary>The format of the specified computer name is invalid.</summary>
				ERROR_INVALID_COMPUTERNAME = 1210,
				/// <summary>The format of the specified event name is invalid.</summary>
				ERROR_INVALID_EVENTNAME = 1211,
				/// <summary>The format of the specified domain name is invalid.</summary>
				ERROR_INVALID_DOMAINNAME = 1212,
				/// <summary>The format of the specified service name is invalid.</summary>
				ERROR_INVALID_SERVICENAME = 1213,
				/// <summary>The format of the specified network name is invalid.</summary>
				ERROR_INVALID_NETNAME = 1214,
				/// <summary>The format of the specified share name is invalid.</summary>
				ERROR_INVALID_SHARENAME = 1215,
				/// <summary>The format of the specified password is invalid.</summary>
				ERROR_INVALID_PASSWORDNAME = 1216,
				/// <summary>The format of the specified message name is invalid.</summary>
				ERROR_INVALID_MESSAGENAME = 1217,
				/// <summary>The format of the specified message destination is invalid.</summary>
				ERROR_INVALID_MESSAGEDEST = 1218,
				/// <summary>Multiple connections to a server or shared resource by the same user, using more than one user name, are not allowed. Disconnect all previous connections to the server or shared resource and try again.</summary>
				ERROR_SESSION_CREDENTIAL_CONFLICT = 1219,
				/// <summary>An attempt was made to establish a session to a network server, but there are already too many sessions established to that server.</summary>
				ERROR_REMOTE_SESSION_LIMIT_EXCEEDED = 1220,
				/// <summary>The workgroup or domain name is already in use by another computer on the network.</summary>
				ERROR_DUP_DOMAINNAME = 1221,
				/// <summary>The network is not present or not started.</summary>
				ERROR_NO_NETWORK = 1222,
				/// <summary>The operation was canceled by the user.</summary>
				ERROR_CANCELLED = 1223,
				/// <summary>The requested operation cannot be performed on a file with a user-mapped section open.</summary>
				ERROR_USER_MAPPED_FILE = 1224,
				/// <summary>The remote system refused the network connection.</summary>
				ERROR_CONNECTION_REFUSED = 1225,
				/// <summary>The network connection was gracefully closed.</summary>
				ERROR_GRACEFUL_DISCONNECT = 1226,
				/// <summary>The network transport endpoint already has an address associated with it.</summary>
				ERROR_ADDRESS_ALREADY_ASSOCIATED = 1227,
				/// <summary>An address has not yet been associated with the network endpoint.</summary>
				ERROR_ADDRESS_NOT_ASSOCIATED = 1228,
				/// <summary>An operation was attempted on a nonexistent network connection.</summary>
				ERROR_CONNECTION_INVALID = 1229,
				/// <summary>An invalid operation was attempted on an active network connection.</summary>
				ERROR_CONNECTION_ACTIVE = 1230,
				/// <summary>The network location cannot be reached. For information about network troubleshooting, see Windows Help.</summary>
				ERROR_NETWORK_UNREACHABLE = 1231,
				/// <summary>The network location cannot be reached. For information about network troubleshooting, see Windows Help.</summary>
				ERROR_HOST_UNREACHABLE = 1232,
				/// <summary>The network location cannot be reached. For information about network troubleshooting, see Windows Help.</summary>
				ERROR_PROTOCOL_UNREACHABLE = 1233,
				/// <summary>No service is operating at the destination network endpoint on the remote system.</summary>
				ERROR_PORT_UNREACHABLE = 1234,
				/// <summary>The request was aborted.</summary>
				ERROR_REQUEST_ABORTED = 1235,
				/// <summary>The network connection was aborted by the local system.</summary>
				ERROR_CONNECTION_ABORTED = 1236,
				/// <summary>The operation could not be completed. A retry should be performed.</summary>
				ERROR_RETRY = 1237,
				/// <summary>A connection to the server could not be made because the limit on the number of concurrent connections for this account has been reached.</summary>
				ERROR_CONNECTION_COUNT_LIMIT = 1238,
				/// <summary>Attempting to log in during an unauthorized time of day for this account.</summary>
				ERROR_LOGIN_TIME_RESTRICTION = 1239,
				/// <summary>The account is not authorized to log in from this station.</summary>
				ERROR_LOGIN_WKSTA_RESTRICTION = 1240,
				/// <summary>The network address could not be used for the operation requested.</summary>
				ERROR_INCORRECT_ADDRESS = 1241,
				/// <summary>The service is already registered.</summary>
				ERROR_ALREADY_REGISTERED = 1242,
				/// <summary>The specified service does not exist.</summary>
				ERROR_SERVICE_NOT_FOUND = 1243,
				/// <summary>The operation being requested was not performed because the user has not been authenticated.</summary>
				ERROR_NOT_AUTHENTICATED = 1244,
				/// <summary>The operation being requested was not performed because the user has not logged on to the network. The specified service does not exist.</summary>
				ERROR_NOT_LOGGED_ON = 1245,
				/// <summary>Continue with work in progress.</summary>
				ERROR_CONTINUE = 1246, // dderror
				/// <summary>An attempt was made to perform an initialization operation when initialization has already been completed.</summary>
				ERROR_ALREADY_INITIALIZED = 1247,
				/// <summary>No more local devices.</summary>
				ERROR_NO_MORE_DEVICES = 1248, // dderror
				/// <summary>The specified site does not exist.</summary>
				ERROR_NO_SUCH_SITE = 1249,
				/// <summary>A domain controller with the specified name already exists.</summary>
				ERROR_DOMAIN_CONTROLLER_EXISTS = 1250,
				/// <summary>This operation is supported only when you are connected to the server.</summary>
				ERROR_ONLY_IF_CONNECTED = 1251,
				/// <summary>The group policy framework should call the extension even if there are no changes.</summary>
				ERROR_OVERRIDE_NOCHANGES = 1252,
				/// <summary>The specified user does not have a valid profile.</summary>
				ERROR_BAD_USER_PROFILE = 1253,
				/// <summary>This operation is not supported on a Microsoft Small Business Server.</summary>
				ERROR_NOT_SUPPORTED_ON_SBS = 1254,
				/// <summary>The server machine is shutting down.</summary>
				ERROR_SERVER_SHUTDOWN_IN_PROGRESS = 1255,
				/// <summary>The remote system is not available. For information about network troubleshooting, see Windows Help.</summary>
				ERROR_HOST_DOWN = 1256,
				/// <summary>The security identifier provided is not from an account domain.</summary>
				ERROR_NON_ACCOUNT_SID = 1257,
				/// <summary>The security identifier provided does not have a domain component.</summary>
				ERROR_NON_DOMAIN_SID = 1258,
				/// <summary>AppHelp dialog canceled thus preventing the application from starting.</summary>
				ERROR_APPHELP_BLOCK = 1259,
				/// <summary>Windows cannot open this program because it has been prevented by a software restriction policy. For more information, open Event Viewer or contact your system administrator.</summary>
				ERROR_ACCESS_DISABLED_BY_POLICY = 1260,
				/// <summary>A program attempt to use an invalid register value. = Normally caused by an uninitialized register. This error is Itanium specific.</summary>
				ERROR_REG_NAT_CONSUMPTION = 1261,
				/// <summary>The share is currently offline or does not exist.</summary>
				ERROR_CSCSHARE_OFFLINE = 1262,
				/// <summary>The kerberos protocol encountered an error while validating the KDC certificate during smartcard logon.</summary>
				ERROR_PKINIT_FAILURE = 1263,
				/// <summary>The kerberos protocol encountered an error while attempting to utilize the smartcard subsystem.</summary>
				ERROR_SMARTCARD_SUBSYSTEM_FAILURE = 1264,
				/// <summary>The system detected a possible attempt to compromise security. Please ensure that you can contact the server that authenticated you.</summary>
				ERROR_DOWNGRADE_DETECTED = 1265,

				// Do not use ID's 1266 - 1270 as the symbolicNames have been moved to SEC_E_*

				/// <summary>The machine is locked and can not be shut down without the force option.</summary>
				ERROR_MACHINE_LOCKED = 1271,
				/// <summary>An application-defined callback gave invalid data when called.</summary>
				ERROR_CALLBACK_SUPPLIED_INVALID_DATA = 1273,
				/// <summary>The group policy framework should call the extension in the synchronous foreground policy refresh.</summary>
				ERROR_SYNC_FOREGROUND_REFRESH_REQUIRED = 1274,
				/// <summary>This driver has been blocked from loading.</summary>
				ERROR_DRIVER_BLOCKED = 1275,
				/// <summary>A dynamic link library (DLL) referenced a module that was neither a DLL nor the process's e_runutable image.</summary>
				ERROR_INVALID_IMPORT_OF_NON_DLL = 1276,
				/// <summary>Windows cannot open this program since it has been disabled.</summary>
				ERROR_ACCESS_DISABLED_WEBBLADE = 1277,
				/// <summary>Windows cannot open this program because the license enforcement system has been tampered with or become corrupted.</summary>
				ERROR_ACCESS_DISABLED_WEBBLADE_TAMPER = 1278,
				/// <summary>A transaction recover failed.</summary>
				ERROR_RECOVERY_FAILURE = 1279,
				/// <summary>The current thread has already been converted to a fiber.</summary>
				ERROR_ALREADY_FIBER = 1280,
				/// <summary>The current thread has already been converted from a fiber.</summary>
				ERROR_ALREADY_THREAD = 1281,
				/// <summary>The system detected an overrun of a stack-based buffer in this System.Windows.Forms.Application. This overrun could potentially allow a malicious user to gain control of this System.Windows.Forms.Application.</summary>
				ERROR_STACK_BUFFER_OVERRUN = 1282,
				/// <summary>Data present in one of the parameters is more than the function can operate on.</summary>
				ERROR_PARAMETER_QUOTA_EXCEEDED = 1283,
				/// <summary>An attempt to do an operation on a debug object failed because the object is in the process of being deleted.</summary>
				ERROR_DEBUGGER_INACTIVE = 1284,
				/// <summary>An attempt to delay-load a .dll or get a function address in a delay-loaded .dll failed.</summary>
				ERROR_DELAY_LOAD_FAILED = 1285,
				/// <summary>%1 is a 16-bit System.Windows.Forms.Application. You do not have permissions to e_runute 16-bit applications. Check your permissions with your system administrator.</summary>
				ERROR_VDM_DISALLOWED = 1286,

				// Add new status codes before this point unless there is a component specific section below.

				#region Security Status Codes
				/// <summary>Not all privileges referenced are assigned to the caller.</summary>
				ERROR_NOT_ALL_ASSIGNED = 1300,
				/// <summary>Some mapping between account names and security IDs was not done.</summary>
				ERROR_SOME_NOT_MAPPED = 1301,
				/// <summary>No system quota limits are specifically set for this account.</summary>
				ERROR_NO_QUOTAS_FOR_ACCOUNT = 1302,
				/// <summary>No encryption key is available. A well-known encryption key was returned.</summary>
				ERROR_LOCAL_USER_SESSION_KEY = 1303,
				/// <summary>The password is too complex to be converted to a LAN Manager password. The LAN Manager password returned is a NULL string.</summary>
				ERROR_NULL_LM_PASSWORD = 1304,
				/// <summary>The revision level is unknown.</summary>
				ERROR_UNKNOWN_REVISION = 1305,
				/// <summary>Indicates two revision levels are incompatible.</summary>
				ERROR_REVISION_MISMATCH = 1306,
				/// <summary>This security ID may not be assigned as the owner of this object.</summary>
				ERROR_INVALID_OWNER = 1307,
				/// <summary>This security ID may not be assigned as the primary group of an object.</summary>
				ERROR_INVALID_PRIMARY_GROUP = 1308,
				/// <summary>An attempt has been made to operate on an impersonation token by a thread that is not currently impersonating a client.</summary>
				ERROR_NO_IMPERSONATION_TOKEN = 1309,
				/// <summary>The group may not be disabled.</summary>
				ERROR_CANT_DISABLE_MANDATORY = 1310,
				/// <summary>There are currently no logon servers available to service the logon request.</summary>
				ERROR_NO_LOGON_SERVERS = 1311,
				/// <summary>A specified logon session does not exist. It may already have been terminated.</summary>
				ERROR_NO_SUCH_LOGON_SESSION = 1312,
				/// <summary>A specified privilege does not exist.</summary>
				ERROR_NO_SUCH_PRIVILEGE = 1313,
				/// <summary>A required privilege is not held by the client.</summary>
				ERROR_PRIVILEGE_NOT_HELD = 1314,
				/// <summary>The name provided is not a properly formed account name.</summary>
				ERROR_INVALID_ACCOUNT_NAME = 1315,
				/// <summary>The specified user already exists.</summary>
				ERROR_USER_EXISTS = 1316,
				/// <summary>The specified user does not exist.</summary>
				ERROR_NO_SUCH_USER = 1317,
				/// <summary>The specified group already exists.</summary>
				ERROR_GROUP_EXISTS = 1318,
				/// <summary>The specified group does not exist.</summary>
				ERROR_NO_SUCH_GROUP = 1319,
				/// <summary>Either the specified user account is already a member of the specified group, or the specified group cannot be deleted because it contains a member.</summary>
				ERROR_MEMBER_IN_GROUP = 1320,
				/// <summary>The specified user account is not a member of the specified group account.</summary>
				ERROR_MEMBER_NOT_IN_GROUP = 1321,
				/// <summary>The last remaining administration account cannot be disabled or deleted.</summary>
				ERROR_LAST_ADMIN = 1322,
				/// <summary>Unable to update the password. The value provided as the current password is incorrect.</summary>
				ERROR_WRONG_PASSWORD = 1323,
				/// <summary>Unable to update the password. The value provided for the new password contains values that are not allowed in passwords.</summary>
				ERROR_ILL_FORMED_PASSWORD = 1324,
				/// <summary>Unable to update the password. The value provided for the new password does not meet the length, complexity, or history requirement of the domain.</summary>
				ERROR_PASSWORD_RESTRICTION = 1325,
				/// <summary>Logon failure: unknown user name or bad password.</summary>
				ERROR_LOGON_FAILURE = 1326,
				/// <summary>Logon failure: user account restriction. = Possible reasons are blank passwords not allowed, logon hour restrictions, or a policy restriction has been enforced.</summary>
				ERROR_ACCOUNT_RESTRICTION = 1327,
				/// <summary>Logon failure: account logon time restriction violation.</summary>
				ERROR_INVALID_LOGON_HOURS = 1328,
				/// <summary>Logon failure: user not allowed to log on to this computer.</summary>
				ERROR_INVALID_WORKSTATION = 1329,
				/// <summary>Logon failure: the specified account password has expired.</summary>
				ERROR_PASSWORD_EXPIRED = 1330,
				/// <summary>Logon failure: account currently disabled.</summary>
				ERROR_ACCOUNT_DISABLED = 1331,
				/// <summary>No mapping between account names and security IDs was done.</summary>
				ERROR_NONE_MAPPED = 1332,
				/// <summary>Too many local user identifiers (LUIDs) were requested at one time.</summary>
				ERROR_TOO_MANY_LUIDS_REQUESTED = 1333,
				/// <summary>No more local user identifiers (LUIDs) are available.</summary>
				ERROR_LUIDS_EXHAUSTED = 1334,
				/// <summary>The subauthority part of a security ID is invalid for this particular use.</summary>
				ERROR_INVALID_SUB_AUTHORITY = 1335,
				/// <summary>The access control list (ACL) structure is invalid.</summary>
				ERROR_INVALID_ACL = 1336,
				/// <summary>The security ID structure is invalid.</summary>
				ERROR_INVALID_SID = 1337,
				/// <summary>The security descriptor structure is invalid.</summary>
				ERROR_INVALID_SECURITY_DESCR = 1338,
				/// <summary>The inherited access control list (ACL) or access control entry (ACE) could not be built.</summary>
				ERROR_BAD_INHERITANCE_ACL = 1340,
				/// <summary>The server is currently disabled.</summary>
				ERROR_SERVER_DISABLED = 1341,
				/// <summary>The server is currently enabled.</summary>
				ERROR_SERVER_NOT_DISABLED = 1342,
				/// <summary>The value provided was an invalid value for an identifier authority.</summary>
				ERROR_INVALID_ID_AUTHORITY = 1343,
				/// <summary>No more memory is available for security information updates.</summary>
				ERROR_ALLOTTED_SPACE_EXCEEDED = 1344,
				/// <summary>The specified attributes are invalid, or incompatible with the attributes for the group as a whole.</summary>
				ERROR_INVALID_GROUP_ATTRIBUTES = 1345,
				/// <summary>Either a required impersonation level was not provided, or the provided impersonation level is invalid.</summary>
				ERROR_BAD_IMPERSONATION_LEVEL = 1346,
				/// <summary>Cannot open an anonymous level security token.</summary>
				ERROR_CANT_OPEN_ANONYMOUS = 1347,
				/// <summary>The validation information class requested was invalid.</summary>
				ERROR_BAD_VALIDATION_CLASS = 1348,
				/// <summary>The type of the token is inappropriate for its attempted use.</summary>
				ERROR_BAD_TOKEN_TYPE = 1349,
				/// <summary>Unable to perform a security operation on an object that has no associated security.</summary>
				ERROR_NO_SECURITY_ON_OBJECT = 1350,
				/// <summary>Configuration information could not be read from the domain controller, either because the machine is unavailable, or access has been denied.</summary>
				ERROR_CANT_ACCESS_DOMAIN_INFO = 1351,
				/// <summary>The security account manager (SAM) or local security authority (LSA) server was in the wrong state to perform the security operation.</summary>
				ERROR_INVALID_SERVER_STATE = 1352,
				/// <summary>The domain was in the wrong state to perform the security operation.</summary>
				ERROR_INVALID_DOMAIN_STATE = 1353,
				/// <summary>This operation is only allowed for the Primary Domain Controller of the domain.</summary>
				ERROR_INVALID_DOMAIN_ROLE = 1354,
				/// <summary>The specified domain either does not exist or could not be contacted.</summary>
				ERROR_NO_SUCH_DOMAIN = 1355,
				/// <summary>The specified domain already exists.</summary>
				ERROR_DOMAIN_EXISTS = 1356,
				/// <summary>An attempt was made to exceed the limit on the number of domains per server.</summary>
				ERROR_DOMAIN_LIMIT_EXCEEDED = 1357,
				/// <summary>Unable to complete the requested operation because of either a catastrophic media failure or a data structure corruption on the disk.</summary>
				ERROR_INTERNAL_DB_CORRUPTION = 1358,
				/// <summary>An internal error occurred.</summary>
				ERROR_INTERNAL_ERROR = 1359,
				/// <summary>Generic access types were contained in an access mask which should already be mapped to nongeneric types.</summary>
				ERROR_GENERIC_NOT_MAPPED = 1360,
				/// <summary>A security descriptor is not in the right format (absolute or self-relative).</summary>
				ERROR_BAD_DESCRIPTOR_FORMAT = 1361,
				/// <summary>The requested action is restricted for use by logon processes only. The calling process has not registered as a logon process.</summary>
				ERROR_NOT_LOGON_PROCESS = 1362,
				/// <summary>Cannot start a new logon session with an ID that is already in use.</summary>
				ERROR_LOGON_SESSION_EXISTS = 1363,
				/// <summary>A specified authentication package is unknown.</summary>
				ERROR_NO_SUCH_PACKAGE = 1364,
				/// <summary>The logon session is not in a state that is consistent with the requested operation.</summary>
				ERROR_BAD_LOGON_SESSION_STATE = 1365,
				/// <summary>The logon session ID is already in use.</summary>
				ERROR_LOGON_SESSION_COLLISION = 1366,
				/// <summary>A logon request contained an invalid logon type value.</summary>
				ERROR_INVALID_LOGON_TYPE = 1367,
				/// <summary>Unable to impersonate using a named pipe until data has been read from that pipe.</summary>
				ERROR_CANNOT_IMPERSONATE = 1368,
				/// <summary>The transaction state of a registry subtree is incompatible with the requested operation.</summary>
				ERROR_RXACT_INVALID_STATE = 1369,
				/// <summary>An internal security database corruption has been encountered.</summary>
				ERROR_RXACT_COMMIT_FAILURE = 1370,
				/// <summary>Cannot perform this operation on built-in accounts.</summary>
				ERROR_SPECIAL_ACCOUNT = 1371,
				/// <summary>Cannot perform this operation on this built-in special group.</summary>
				ERROR_SPECIAL_GROUP = 1372,
				/// <summary>Cannot perform this operation on this built-in special user.</summary>
				ERROR_SPECIAL_USER = 1373,
				/// <summary>The user cannot be removed from a group because the group is currently the user's primary group.</summary>
				ERROR_MEMBERS_PRIMARY_GROUP = 1374,
				/// <summary>The token is already in use as a primary token.</summary>
				ERROR_TOKEN_ALREADY_IN_USE = 1375,
				/// <summary>The specified local group does not exist.</summary>
				ERROR_NO_SUCH_ALIAS = 1376,
				/// <summary>The specified account name is not a member of the local group.</summary>
				ERROR_MEMBER_NOT_IN_ALIAS = 1377,
				/// <summary>The specified account name is already a member of the local group.</summary>
				ERROR_MEMBER_IN_ALIAS = 1378,
				/// <summary>The specified local group already exists.</summary>
				ERROR_ALIAS_EXISTS = 1379,
				/// <summary>Logon failure: the user has not been granted the requested logon type at this computer.</summary>
				ERROR_LOGON_NOT_GRANTED = 1380,
				/// <summary>The maximum number of secrets that may be stored in a single system has been exceeded.</summary>
				ERROR_TOO_MANY_SECRETS = 1381,
				/// <summary>The length of a secret exceeds the maximum length allowed.</summary>
				ERROR_SECRET_TOO_LONG = 1382,
				/// <summary>The local security authority database contains an internal inconsistency.</summary>
				ERROR_INTERNAL_DB_ERROR = 1383,
				/// <summary>During a logon attempt, the user's security context accumulated too many security IDs.</summary>
				ERROR_TOO_MANY_CONTEXT_IDS = 1384,
				/// <summary>Logon failure: the user has not been granted the requested logon type at this computer.</summary>
				ERROR_LOGON_TYPE_NOT_GRANTED = 1385,
				/// <summary>A cross-encrypted password is necessary to change a user password.</summary>
				ERROR_NT_CROSS_ENCRYPTION_REQUIRED = 1386,
				/// <summary>A member could not be added to or removed from the local group because the member does not exist.</summary>
				ERROR_NO_SUCH_MEMBER = 1387,
				/// <summary>A new member could not be added to a local group because the member has the wrong account type.</summary>
				ERROR_INVALID_MEMBER = 1388,
				/// <summary>Too many security IDs have been specified.</summary>
				ERROR_TOO_MANY_SIDS = 1389,
				/// <summary>A cross-encrypted password is necessary to change this user password.</summary>
				ERROR_LM_CROSS_ENCRYPTION_REQUIRED = 1390,
				/// <summary>Indicates an ACL contains no inheritable components.</summary>
				ERROR_NO_INHERITANCE = 1391,
				/// <summary>The file or directory is corrupted and unreadable.</summary>
				ERROR_FILE_CORRUPT = 1392,
				/// <summary>The disk structure is corrupted and unreadable.</summary>
				ERROR_DISK_CORRUPT = 1393,
				/// <summary>There is no user session key for the specified logon session.</summary>
				ERROR_NO_USER_SESSION_KEY = 1394,
				/// <summary>The service being accessed is licensed for a particular number of connections. No more connections can be made to the service at this time because there are already as many connections as the service can accept.</summary>
				ERROR_LICENSE_QUOTA_EXCEEDED = 1395,
				/// <summary>Logon Failure: The target account name is incorrect.</summary>
				ERROR_WRONG_TARGET_NAME = 1396,
				/// <summary>Mutual Authentication failed. The server's password is [Out ] of date at the domain controller.</summary>
				ERROR_MUTUAL_AUTH_FAILED = 1397,
				/// <summary>There is a time and/or date difference between the client and server.</summary>
				ERROR_TIME_SKEW = 1398,
				/// <summary>This operation can not be performed on the current domain.</summary>
				ERROR_CURRENT_DOMAIN_NOT_ALLOWED = 1399,
				#endregion

				#region WinUser Error Codes
				/// <summary>Invalid window handle.</summary>
				ERROR_INVALID_WINDOW_HANDLE = 1400,
				/// <summary>Invalid menu handle.</summary>
				ERROR_INVALID_MENU_HANDLE = 1401,
				/// <summary>Invalid cursor handle.</summary>
				ERROR_INVALID_CURSOR_HANDLE = 1402,
				/// <summary>Invalid accelerator table handle.</summary>
				ERROR_INVALID_ACCEL_HANDLE = 1403,
				/// <summary>Invalid hook handle.</summary>
				ERROR_INVALID_HOOK_HANDLE = 1404,
				/// <summary>Invalid handle to a multiple-window position structure.</summary>
				ERROR_INVALID_DWP_HANDLE = 1405,
				/// <summary>Cannot create a top-level child window.</summary>
				ERROR_TLW_WITH_WSCHILD = 1406,
				/// <summary>Cannot find window class.</summary>
				ERROR_CANNOT_FIND_WND_CLASS = 1407,
				/// <summary>Invalid window; it belongs to other thread.</summary>
				ERROR_WINDOW_OF_OTHER_THREAD = 1408,
				/// <summary>Hot key is already registered.</summary>
				ERROR_HOTKEY_ALREADY_REGISTERED = 1409,
				/// <summary>Class already exists.</summary>
				ERROR_CLASS_ALREADY_EXISTS = 1410,
				/// <summary>Class does not exist.</summary>
				ERROR_CLASS_DOES_NOT_EXIST = 1411,
				/// <summary>Class still has open windows.</summary>
				ERROR_CLASS_HAS_WINDOWS = 1412,
				/// <summary>Invalid index.</summary>
				ERROR_INVALID_INDEX = 1413,
				/// <summary>Invalid icon handle.</summary>
				ERROR_INVALID_ICON_HANDLE = 1414,
				/// <summary>Using private DIALOG window words.</summary>
				ERROR_PRIVATE_DIALOG_INDEX = 1415,
				/// <summary>The list box identifier was not found.</summary>
				ERROR_LISTBOX_ID_NOT_FOUND = 1416,
				/// <summary>No wildcards were found.</summary>
				ERROR_NO_WILDCARD_CHARACTERS = 1417,
				/// <summary>Thread does not have a clipboard open.</summary>
				ERROR_CLIPBOARD_NOT_OPEN = 1418,
				/// <summary>Hot key is not registered.</summary>
				ERROR_HOTKEY_NOT_REGISTERED = 1419,
				/// <summary>The window is not a valid dialog window.</summary>
				ERROR_WINDOW_NOT_DIALOG = 1420,
				/// <summary>Control ID not found.</summary>
				ERROR_CONTROL_ID_NOT_FOUND = 1421,
				/// <summary>Invalid message for a combo box because it does not have an edit control.</summary>
				ERROR_INVALID_COMBOBOX_MESSAGE = 1422,
				/// <summary>The window is not a combo box.</summary>
				ERROR_WINDOW_NOT_COMBOBOX = 1423,
				/// <summary>Height must be less than 256.</summary>
				ERROR_INVALID_EDIT_HEIGHT = 1424,
				/// <summary>Invalid device context (DC) handle.</summary>
				ERROR_DC_NOT_FOUND = 1425,
				/// <summary>Invalid hook procedure type.</summary>
				ERROR_INVALID_HOOK_FILTER = 1426,
				/// <summary>Invalid hook procedure.</summary>
				ERROR_INVALID_FILTER_PROC = 1427,
				/// <summary>Cannot set nonlocal hook without a module handle.</summary>
				ERROR_HOOK_NEEDS_HMOD = 1428,
				/// <summary>This hook procedure can only be set globally.</summary>
				ERROR_GLOBAL_ONLY_HOOK = 1429,
				/// <summary>The journal hook procedure is already installed.</summary>
				ERROR_JOURNAL_HOOK_SET = 1430,
				/// <summary>The hook procedure is not installed.</summary>
				ERROR_HOOK_NOT_INSTALLED = 1431,
				/// <summary>Invalid message for single-selection list box.</summary>
				ERROR_INVALID_LB_MESSAGE = 1432,
				/// <summary>LB_SETCOUNT sent to non-lazy list box.</summary>
				ERROR_SETCOUNT_ON_BAD_LB = 1433,
				/// <summary>This list box does not support tab stops.</summary>
				ERROR_LB_WITHOUT_TABSTOPS = 1434,
				/// <summary>Cannot destroy object created by another thread.</summary>
				ERROR_DESTROY_OBJECT_OF_OTHER_THREAD = 1435,
				/// <summary>Child windows cannot have menus.</summary>
				ERROR_CHILD_WINDOW_MENU = 1436,
				/// <summary>The window does not have a system menu.</summary>
				ERROR_NO_SYSTEM_MENU = 1437,
				/// <summary>Invalid message box style.</summary>
				ERROR_INVALID_MSGBOX_STYLE = 1438,
				/// <summary>Invalid system-wide (SPI_*) parameter.</summary>
				ERROR_INVALID_SPI_VALUE = 1439,
				/// <summary>Screen already locked.</summary>
				ERROR_SCREEN_ALREADY_LOCKED = 1440,
				/// <summary>All handles to windows in a multiple-window position structure must have the same parent.</summary>
				ERROR_HWNDS_HAVE_DIFF_PARENT = 1441,
				/// <summary>The window is not a child window.</summary>
				ERROR_NOT_CHILD_WINDOW = 1442,
				/// <summary>Invalid GW_* command.</summary>
				ERROR_INVALID_GW_COMMAND = 1443,
				/// <summary>Invalid thread identifier.</summary>
				ERROR_INVALID_THREAD_ID = 1444,
				/// <summary>Cannot process a message from a window that is not a multiple document interface (MDI) window.</summary>
				ERROR_NON_MDICHILD_WINDOW = 1445,
				/// <summary>Popup menu already active.</summary>
				ERROR_POPUP_ALREADY_ACTIVE = 1446,
				/// <summary>The window does not have scroll bars.</summary>
				ERROR_NO_SCROLLBARS = 1447,
				/// <summary>Scroll bar range cannot be greater than MAXLONG.</summary>
				ERROR_INVALID_SCROLLBAR_RANGE = 1448,
				/// <summary>Cannot show or remove the window in the way specified.</summary>
				ERROR_INVALID_SHOWWIN_COMMAND = 1449,
				/// <summary>Insufficient system resources exist to complete the requested service.</summary>
				ERROR_NO_SYSTEM_RESOURCES = 1450,
				/// <summary>Insufficient system resources exist to complete the requested service.</summary>
				ERROR_NONPAGED_SYSTEM_RESOURCES = 1451,
				/// <summary>Insufficient system resources exist to complete the requested service.</summary>
				ERROR_PAGED_SYSTEM_RESOURCES = 1452,
				/// <summary>Insufficient quota to complete the requested service.</summary>
				ERROR_WORKING_SET_QUOTA = 1453,
				/// <summary>Insufficient quota to complete the requested service.</summary>
				ERROR_PAGEFILE_QUOTA = 1454,
				/// <summary>The paging file is too small for this operation to complete.</summary>
				ERROR_COMMITMENT_LIMIT = 1455,
				/// <summary>A menu item was not found.</summary>
				ERROR_MENU_ITEM_NOT_FOUND = 1456,
				/// <summary>Invalid keyboard layout handle.</summary>
				ERROR_INVALID_KEYBOARD_HANDLE = 1457,
				/// <summary>Hook type not allowed.</summary>
				ERROR_HOOK_TYPE_NOT_ALLOWED = 1458,
				/// <summary>This operation requires an interactive window station.</summary>
				ERROR_REQUIRES_INTERACTIVE_WINDOWSTATION = 1459,
				/// <summary>This operation returned because the timeout period expired.</summary>
				ERROR_TIMEOUT = 1460,
				/// <summary>Invalid monitor handle.</summary>
				ERROR_INVALID_MONITOR_HANDLE = 1461,
				#endregion

				#region Eventlog Status Codes 
				/// <summary>The event log file is corrupted.</summary>
				ERROR_EVENTLOG_FILE_CORRUPT = 1500,
				/// <summary>No event log file could be opened, so the event logging service did not start.</summary>
				ERROR_EVENTLOG_CANT_START = 1501,
				/// <summary>The event log file is full.</summary>
				ERROR_LOG_FILE_FULL = 1502,
				/// <summary>The event log file has changed between read operations.</summary>
				ERROR_EVENTLOG_FILE_CHANGED = 1503,
				#endregion

				#region MSI Error Codes
				/// <summary>The Windows Installer Service could not be accessed. This can occur if you are running Windows in safe mode, or if the Windows Installer is not correctly installed. Contact your support personnel for assistance.</summary>
				ERROR_INSTALL_SERVICE_FAILURE = 1601,
				/// <summary>User cancelled installation.</summary>
				ERROR_INSTALL_USEREXIT = 1602,
				/// <summary>Fatal error during installation.</summary>
				ERROR_INSTALL_FAILURE = 1603,
				/// <summary>Installation suspended, incomplete.</summary>
				ERROR_INSTALL_SUSPEND = 1604,
				/// <summary>This action is only valid for products that are currently installed.</summary>
				ERROR_UNKNOWN_PRODUCT = 1605,
				/// <summary>Feature ID not registered.</summary>
				ERROR_UNKNOWN_FEATURE = 1606,
				/// <summary>Component ID not registered.</summary>
				ERROR_UNKNOWN_COMPONENT = 1607,
				/// <summary>Unknown property.</summary>
				ERROR_UNKNOWN_PROPERTY = 1608,
				/// <summary>Handle is in an invalid state.</summary>
				ERROR_INVALID_HANDLE_STATE = 1609,
				/// <summary>The configuration data for this product is corrupt. = Contact your support personnel.</summary>
				ERROR_BAD_CONFIGURATION = 1610,
				/// <summary>Component qualifier not present.</summary>
				ERROR_INDEX_ABSENT = 1611,
				/// <summary>The installation source for this product is not available. = Verify that the source exists and that you can access it.</summary>
				ERROR_INSTALL_SOURCE_ABSENT = 1612,
				/// <summary>This installation package cannot be installed by the Windows Installer service. = You must install a Windows service pack that contains a newer version of the Windows Installer service.</summary>
				ERROR_INSTALL_PACKAGE_VERSION = 1613,
				/// <summary>Product is uninstalled.</summary>
				ERROR_PRODUCT_UNINSTALLED = 1614,
				/// <summary>SQL query syntax invalid or unsupported.</summary>
				ERROR_BAD_QUERY_SYNTAX = 1615,
				/// <summary>Record field does not exist.</summary>
				ERROR_INVALID_FIELD = 1616,
				/// <summary>The device has been removed.</summary>
				ERROR_DEVICE_REMOVED = 1617,
				/// <summary>Another installation is already in progress. = Complete that installation before proceeding with this install.</summary>
				ERROR_INSTALL_ALREADY_RUNNING = 1618,
				/// <summary>This installation package could not be opened. = Verify that the package exists and that you can access it, or contact the application vendor to verify that this is a valid Windows Installer package.</summary>
				ERROR_INSTALL_PACKAGE_OPEN_FAILED = 1619,
				/// <summary>This installation package could not be opened. = Contact the application vendor to verify that this is a valid Windows Installer package.</summary>
				ERROR_INSTALL_PACKAGE_INVALID = 1620,
				/// <summary>There was an error starting the Windows Installer service user interface. = Contact your support personnel.</summary>
				ERROR_INSTALL_UI_FAILURE = 1621,
				/// <summary>Error opening installation log file. Verify that the specified log file location exists and that you can write to it.</summary>
				ERROR_INSTALL_LOG_FAILURE = 1622,
				/// <summary>The language of this installation package is not supported by your system.</summary>
				ERROR_INSTALL_LANGUAGE_UNSUPPORTED = 1623,
				/// <summary>Error applying transforms. = Verify that the specified transform paths are valid.</summary>
				ERROR_INSTALL_TRANSFORM_FAILURE = 1624,
				/// <summary>This installation is forbidden by system policy. = Contact your system administrator.</summary>
				ERROR_INSTALL_PACKAGE_REJECTED = 1625,
				/// <summary>Function could not be e_runuted.</summary>
				ERROR_FUNCTION_NOT_CALLED = 1626,
				/// <summary>Function failed during e_runution.</summary>
				ERROR_FUNCTION_FAILED = 1627,
				/// <summary>Invalid or unknown table specified.</summary>
				ERROR_INVALID_TABLE = 1628,
				/// <summary>Data supplied is of wrong type.</summary>
				ERROR_DATATYPE_MISMATCH = 1629,
				/// <summary>Data of this type is not supported.</summary>
				ERROR_UNSUPPORTED_TYPE = 1630,
				/// <summary>The Windows Installer service failed to start. = Contact your support personnel.</summary>
				ERROR_CREATE_FAILED = 1631,
				/// <summary>The Temp folder is on a drive that is full or is inaccessible. Free up space on the drive or verify that you have write permission on the Temp folder.</summary>
				ERROR_INSTALL_TEMP_UNWRITABLE = 1632,
				/// <summary>This installation package is not supported by this processor type. Contact your product vendor.</summary>
				ERROR_INSTALL_PLATFORM_UNSUPPORTED = 1633,
				/// <summary>Component not used on this computer.</summary>
				ERROR_INSTALL_NOTUSED = 1634,
				/// <summary>This patch package could not be opened. = Verify that the patch package exists and that you can access it, or contact the application vendor to verify that this is a valid Windows Installer patch package.</summary>
				ERROR_PATCH_PACKAGE_OPEN_FAILED = 1635,
				/// <summary>This patch package could not be opened. = Contact the application vendor to verify that this is a valid Windows Installer patch package.</summary>
				ERROR_PATCH_PACKAGE_INVALID = 1636,
				/// <summary>This patch package cannot be processed by the Windows Installer service. = You must install a Windows service pack that contains a newer version of the Windows Installer service.</summary>
				ERROR_PATCH_PACKAGE_UNSUPPORTED = 1637,
				/// <summary>Another version of this product is already installed. = Installation of this version cannot continue. = To configure or remove the existing version of this product, use Add/Remove Programs on the Control Panel.</summary>
				ERROR_PRODUCT_VERSION = 1638,
				/// <summary>Invalid command line argument. = Consult the Windows Installer SDK for detailed command line help.</summary>
				ERROR_INVALID_COMMAND_LINE = 1639,
				/// <summary>Only administrators have permission to add, remove, or configure server software during a Terminal services remote session. If you want to install or configure software on the server, contact your network administrator.</summary>
				ERROR_INSTALL_REMOTE_DISALLOWED = 1640,
				/// <summary>The requested operation completed successfully. = The system will be restarted so the changes can take effect.</summary>
				ERROR_SUCCESS_REBOOT_INITIATED = 1641,
				/// <summary>The upgrade patch cannot be installed by the Windows Installer service because the program to be upgraded may be missing, or the upgrade patch may update a different version of the program. Verify that the program to be upgraded exists on your computer and that you have the correct upgrade patch.</summary>
				ERROR_PATCH_TARGET_NOT_FOUND = 1642,
				/// <summary>The patch package is not permitted by software restriction policy.</summary>
				ERROR_PATCH_PACKAGE_REJECTED = 1643,
				/// <summary>One or more customizations are not permitted by software restriction policy.</summary>
				ERROR_INSTALL_TRANSFORM_REJECTED = 1644,
				/// <summary>The Windows Installer does not permit installation from a Remote Desktop Connection.</summary>
				ERROR_INSTALL_REMOTE_PROHIBITED = 1645
				#endregion

				#region API Error Codes

				// '                    ' ''
				// '                    '' Values are 32 bit values layed [Out ] as follows:
				// '                    ' ''
				// '                    ''  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
				// '                    ''  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
				// '                    '' +---+-+-+-----------------------+-------------------------------+
				// '                    '' |Sev|C|R|     Facility          |               Code            |
				// '                    '' +---+-+-+-----------------------+-------------------------------+
				// '                    ' ''
				// '                    '' where
				// '                    ' ''
				// '                    ''     Sev - is the severity code
				// '                    ' ''
				// '                    ''         00 - Success
				// '                    ''         01 - Informational
				// '                    ''         10 - Warning
				// '                    ''         11 - Error
				// '                    ' ''
				// '                    ''     C - is the Customer code flag
				// '                    ' ''
				// '                    ''     R - is a reserved bit
				// '                    ' ''
				// '                    ''     Facility - is the facility code
				// '                    ' ''
				// '                    ''     Code - is the facility's status code
				// '                    ' ''
				// '                    ' ''
				// '                    ''Define the facility codes
				// '                    ' ''
				// '                    ''const FACILITY_WINDOWS_CE              24
				// '                    ''const FACILITY_WINDOWS                 8
				// '                    ''const FACILITY_URT                     19
				// '                    ''const FACILITY_UMI                     22
				// '                    ''const FACILITY_SXS                     23
				// '                    ''const FACILITY_STORAGE                 3
				// '                    ''const FACILITY_STATE_MANAGEMENT        34
				// '                    ''const FACILITY_SSPI                    9
				// '                    ''const FACILITY_SCARD                   16
				// '                    ''const FACILITY_SETUPAPI                15
				// '                    ''const FACILITY_SECURITY                9
				// '                    ''const FACILITY_RPC                     1
				// '                    ''const FACILITY_WIN32                   7
				// '                    ''const FACILITY_CONTROL                 10
				// '                    ''const FACILITY_NULL                    0
				// '                    ''const FACILITY_METADIRECTORY           35
				// '                    ''const FACILITY_MSMQ                    14
				// '                    ''const FACILITY_MEDIASERVER             13
				// '                    ''const FACILITY_INTERNET                12
				// '                    ''const FACILITY_ITF                     4
				// '                    ''const FACILITY_HTTP                    25
				// '                    ''const FACILITY_DPLAY                   21
				// '                    ''const FACILITY_DISPATCH                2
				// '                    ''const FACILITY_CONFIGURATION           33
				// '                    ''const FACILITY_COMPLUS                 17
				// '                    ''const FACILITY_CERT                    11
				// '                    ''const FACILITY_BACKGROUNDCOPY          32
				// '                    ''const FACILITY_ACS                     20
				// '                    ''const FACILITY_AAF                     18







				// '                    '''''''''''''''/
				// '                    ''                      '
				// '                    ''  RPC Status Codes    '
				// '                    ''                      '
				// '                    '''''''''''''''/


				// '                    ' ''
				// '                    ''MessageId: RPC_S_INVALID_STRING_BINDING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The string binding is invalid.
				// '                    ' ''
				// '                    ''const RPC_S_INVALID_STRING_BINDING     1700L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_WRONG_KIND_OF_BINDING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The binding handle is not the correct type.
				// '                    ' ''
				// '                    ''const RPC_S_WRONG_KIND_OF_BINDING      1701L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_INVALID_BINDING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The binding handle is invalid.
				// '                    ' ''
				// '                    ''const RPC_S_INVALID_BINDING            1702L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_PROTSEQ_NOT_SUPPORTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The RPC protocol sequence is not supported.
				// '                    ' ''
				// '                    ''const RPC_S_PROTSEQ_NOT_SUPPORTED      1703L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_INVALID_RPC_PROTSEQ
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The RPC protocol sequence is invalid.
				// '                    ' ''
				// '                    ''const RPC_S_INVALID_RPC_PROTSEQ        1704L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_INVALID_STRING_UUID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The string universal unique identifier (UUID) is invalid.
				// '                    ' ''
				// '                    ''const RPC_S_INVALID_STRING_UUID        1705L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_INVALID_ENDPOINT_FORMAT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The endpoint format is invalid.
				// '                    ' ''
				// '                    ''const RPC_S_INVALID_ENDPOINT_FORMAT    1706L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_INVALID_NET_ADDR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The network address is invalid.
				// '                    ' ''
				// '                    ''const RPC_S_INVALID_NET_ADDR           1707L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_NO_ENDPOINT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' No endpoint was found.
				// '                    ' ''
				// '                    ''const RPC_S_NO_ENDPOINT_FOUND          1708L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_INVALID_TIMEOUT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The timeout value is invalid.
				// '                    ' ''
				// '                    ''const RPC_S_INVALID_TIMEOUT            1709L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_OBJECT_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The object universal unique identifier (UUID) was not found.
				// '                    ' ''
				// '                    ''const RPC_S_OBJECT_NOT_FOUND           1710L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_ALREADY_REGISTERED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The object universal unique identifier (UUID) has already been registered.
				// '                    ' ''
				// '                    ''const RPC_S_ALREADY_REGISTERED         1711L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_TYPE_ALREADY_REGISTERED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The type universal unique identifier (UUID) has already been registered.
				// '                    ' ''
				// '                    ''const RPC_S_TYPE_ALREADY_REGISTERED    1712L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_ALREADY_LISTENING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The RPC server is already listening.
				// '                    ' ''
				// '                    ''const RPC_S_ALREADY_LISTENING          1713L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_NO_PROTSEQS_REGISTERED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' No protocol sequences have been registered.
				// '                    ' ''
				// '                    ''const RPC_S_NO_PROTSEQS_REGISTERED     1714L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_NOT_LISTENING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The RPC server is not listening.
				// '                    ' ''
				// '                    ''const RPC_S_NOT_LISTENING              1715L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_UNKNOWN_MGR_TYPE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The manager type is unknown.
				// '                    ' ''
				// '                    ''const RPC_S_UNKNOWN_MGR_TYPE           1716L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_UNKNOWN_IF
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The interface is unknown.
				// '                    ' ''
				// '                    ''const RPC_S_UNKNOWN_IF                 1717L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_NO_BINDINGS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' There are no bindings.
				// '                    ' ''
				// '                    ''const RPC_S_NO_BINDINGS                1718L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_NO_PROTSEQS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' There are no protocol sequences.
				// '                    ' ''
				// '                    ''const RPC_S_NO_PROTSEQS                1719L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_CANT_CREATE_ENDPOINT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The endpoint cannot be created.
				// '                    ' ''
				// '                    ''const RPC_S_CANT_CREATE_ENDPOINT       1720L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_OUT_OF_RESOURCES
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Not enough resources are available to complete this operation.
				// '                    ' ''
				// '                    ''const RPC_S_OUT_OF_RESOURCES           1721L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_SERVER_UNAVAILABLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The RPC server is unavailable.
				// '                    ' ''
				// '                    ''const RPC_S_SERVER_UNAVAILABLE         1722L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_SERVER_TOO_BUSY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The RPC server is too busy to complete this operation.
				// '                    ' ''
				// '                    ''const RPC_S_SERVER_TOO_BUSY            1723L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_INVALID_NETWORK_OPTIONS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The network options are invalid.
				// '                    ' ''
				// '                    ''const RPC_S_INVALID_NETWORK_OPTIONS    1724L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_NO_CALL_ACTIVE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' There are no remote procedure calls active on this thread.
				// '                    ' ''
				// '                    ''const RPC_S_NO_CALL_ACTIVE             1725L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_CALL_FAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The remote procedure call failed.
				// '                    ' ''
				// '                    ''const RPC_S_CALL_FAILED                1726L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_CALL_FAILED_DNE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The remote procedure call failed and did not e_runute.
				// '                    ' ''
				// '                    ''const RPC_S_CALL_FAILED_DNE            1727L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_PROTOCOL_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A remote procedure call (RPC) protocol error occurred.
				// '                    ' ''
				// '                    ''const RPC_S_PROTOCOL_ERROR             1728L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_UNSUPPORTED_TRANS_SYN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The transfer syntax is not supported by the RPC server.
				// '                    ' ''
				// '                    ''const RPC_S_UNSUPPORTED_TRANS_SYN      1730L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_UNSUPPORTED_TYPE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The universal unique identifier (UUID) type is not supported.
				// '                    ' ''
				// '                    ''const RPC_S_UNSUPPORTED_TYPE           1732L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_INVALID_TAG
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The tag is invalid.
				// '                    ' ''
				// '                    ''const RPC_S_INVALID_TAG                1733L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_INVALID_BOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The array bounds are invalid.
				// '                    ' ''
				// '                    ''const RPC_S_INVALID_BOUND              1734L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_NO_ENTRY_NAME
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The binding does not contain an entry name.
				// '                    ' ''
				// '                    ''const RPC_S_NO_ENTRY_NAME              1735L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_INVALID_NAME_SYNTAX
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The name syntax is invalid.
				// '                    ' ''
				// '                    ''const RPC_S_INVALID_NAME_SYNTAX        1736L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_UNSUPPORTED_NAME_SYNTAX
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The name syntax is not supported.
				// '                    ' ''
				// '                    ''const RPC_S_UNSUPPORTED_NAME_SYNTAX    1737L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_UUID_NO_ADDRESS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' No network address is available to use to construct a universal unique identifier (UUID).
				// '                    ' ''
				// '                    ''const RPC_S_UUID_NO_ADDRESS            1739L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_DUPLICATE_ENDPOINT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The endpoint is a duplicate.
				// '                    ' ''
				// '                    ''const RPC_S_DUPLICATE_ENDPOINT         1740L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_UNKNOWN_AUTHN_TYPE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The authentication type is unknown.
				// '                    ' ''
				// '                    ''const RPC_S_UNKNOWN_AUTHN_TYPE         1741L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_MAX_CALLS_TOO_SMALL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The maximum number of calls is too small.
				// '                    ' ''
				// '                    ''const RPC_S_MAX_CALLS_TOO_SMALL        1742L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_STRING_TOO_LONG
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The string is too long.
				// '                    ' ''
				// '                    ''const RPC_S_STRING_TOO_LONG            1743L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_PROTSEQ_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The RPC protocol sequence was not found.
				// '                    ' ''
				// '                    ''const RPC_S_PROTSEQ_NOT_FOUND          1744L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_PROCNUM_OUT_OF_RANGE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The procedure number is [Out ] of range.
				// '                    ' ''
				// '                    ''const RPC_S_PROCNUM_OUT_OF_RANGE       1745L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_BINDING_HAS_NO_AUTH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The binding does not contain any authentication information.
				// '                    ' ''
				// '                    ''const RPC_S_BINDING_HAS_NO_AUTH        1746L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_UNKNOWN_AUTHN_SERVICE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The authentication service is unknown.
				// '                    ' ''
				// '                    ''const RPC_S_UNKNOWN_AUTHN_SERVICE      1747L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_UNKNOWN_AUTHN_LEVEL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The authentication level is unknown.
				// '                    ' ''
				// '                    ''const RPC_S_UNKNOWN_AUTHN_LEVEL        1748L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_INVALID_AUTH_IDENTITY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The security context is invalid.
				// '                    ' ''
				// '                    ''const RPC_S_INVALID_AUTH_IDENTITY      1749L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_UNKNOWN_AUTHZ_SERVICE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The authorization service is unknown.
				// '                    ' ''
				// '                    ''const RPC_S_UNKNOWN_AUTHZ_SERVICE      1750L

				// '                    ' ''
				// '                    ''MessageId: EPT_S_INVALID_ENTRY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The entry is invalid.
				// '                    ' ''
				// '                    ''const EPT_S_INVALID_ENTRY              1751L

				// '                    ' ''
				// '                    ''MessageId: EPT_S_CANT_PERFORM_OP
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The server endpoint cannot perform the operation.
				// '                    ' ''
				// '                    ''const EPT_S_CANT_PERFORM_OP            1752L

				// '                    ' ''
				// '                    ''MessageId: EPT_S_NOT_REGISTERED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' There are no more endpoints available from the endpoint mapper.
				// '                    ' ''
				// '                    ''const EPT_S_NOT_REGISTERED             1753L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_NOTHING_TO_EXPORT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' No interfaces have been exported.
				// '                    ' ''
				// '                    ''const RPC_S_NOTHING_TO_EXPORT          1754L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_INCOMPLETE_NAME
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The entry name is incomplete.
				// '                    ' ''
				// '                    ''const RPC_S_INCOMPLETE_NAME            1755L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_INVALID_VERS_OPTION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The version option is invalid.
				// '                    ' ''
				// '                    ''const RPC_S_INVALID_VERS_OPTION        1756L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_NO_MORE_MEMBERS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' There are no more members.
				// '                    ' ''
				// '                    ''const RPC_S_NO_MORE_MEMBERS            1757L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_NOT_ALL_OBJS_UNEXPORTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' There is nothing to unexport.
				// '                    ' ''
				// '                    ''const RPC_S_NOT_ALL_OBJS_UNEXPORTED    1758L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_INTERFACE_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The interface was not found.
				// '                    ' ''
				// '                    ''const RPC_S_INTERFACE_NOT_FOUND        1759L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_ENTRY_ALREADY_EXISTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The entry already exists.
				// '                    ' ''
				// '                    ''const RPC_S_ENTRY_ALREADY_EXISTS       1760L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_ENTRY_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The entry is not found.
				// '                    ' ''
				// '                    ''const RPC_S_ENTRY_NOT_FOUND            1761L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_NAME_SERVICE_UNAVAILABLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The name service is unavailable.
				// '                    ' ''
				// '                    ''const RPC_S_NAME_SERVICE_UNAVAILABLE   1762L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_INVALID_NAF_ID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The network address family is invalid.
				// '                    ' ''
				// '                    ''const RPC_S_INVALID_NAF_ID             1763L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_CANNOT_SUPPORT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested operation is not supported.
				// '                    ' ''
				// '                    ''const RPC_S_CANNOT_SUPPORT             1764L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_NO_CONTEXT_AVAILABLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' No security context is available to allow impersonation.
				// '                    ' ''
				// '                    ''const RPC_S_NO_CONTEXT_AVAILABLE       1765L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_INTERNAL_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An internal error occurred in a remote procedure call (RPC).
				// '                    ' ''
				// '                    ''const RPC_S_INTERNAL_ERROR             1766L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_ZERO_DIVIDE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The RPC server attempted an integer division by zero.
				// '                    ' ''
				// '                    ''const RPC_S_ZERO_DIVIDE                1767L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_ADDRESS_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An addressing error occurred in the RPC server.
				// '                    ' ''
				// '                    ''const RPC_S_ADDRESS_ERROR              1768L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_FP_DIV_ZERO
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A floating-point operation at the RPC server caused a division by zero.
				// '                    ' ''
				// '                    ''const RPC_S_FP_DIV_ZERO                1769L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_FP_UNDERFLOW
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A floating-point underflow occurred at the RPC server.
				// '                    ' ''
				// '                    ''const RPC_S_FP_UNDERFLOW               1770L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_FP_OVERFLOW
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A floating-point overflow occurred at the RPC server.
				// '                    ' ''
				// '                    ''const RPC_S_FP_OVERFLOW                1771L

				// '                    ' ''
				// '                    ''MessageId: RPC_X_NO_MORE_ENTRIES
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The list of RPC servers available for the binding of auto handles has been exhausted.
				// '                    ' ''
				// '                    ''const RPC_X_NO_MORE_ENTRIES            1772L

				// '                    ' ''
				// '                    ''MessageId: RPC_X_SS_CHAR_TRANS_OPEN_FAIL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unable to open the character translation table file.
				// '                    ' ''
				// '                    ''const RPC_X_SS_CHAR_TRANS_OPEN_FAIL    1773L

				// '                    ' ''
				// '                    ''MessageId: RPC_X_SS_CHAR_TRANS_SHORT_FILE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The file containing the character translation table has fewer than 512 bytes.
				// '                    ' ''
				// '                    ''const RPC_X_SS_CHAR_TRANS_SHORT_FILE   1774L

				// '                    ' ''
				// '                    ''MessageId: RPC_X_SS_IN_NULL_CONTEXT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A null context handle was passed from the client to the host during a remote procedure call.
				// '                    ' ''
				// '                    ''const RPC_X_SS_IN_NULL_CONTEXT         1775L

				// '                    ' ''
				// '                    ''MessageId: RPC_X_SS_CONTEXT_DAMAGED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The context handle changed during a remote procedure call.
				// '                    ' ''
				// '                    ''const RPC_X_SS_CONTEXT_DAMAGED         1777L

				// '                    ' ''
				// '                    ''MessageId: RPC_X_SS_HANDLES_MISMATCH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The binding handles passed to a remote procedure call do not match.
				// '                    ' ''
				// '                    ''const RPC_X_SS_HANDLES_MISMATCH        1778L

				// '                    ' ''
				// '                    ''MessageId: RPC_X_SS_CANNOT_GET_CALL_HANDLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The stub is unable to get the remote procedure call handle.
				// '                    ' ''
				// '                    ''const RPC_X_SS_CANNOT_GET_CALL_HANDLE  1779L

				// '                    ' ''
				// '                    ''MessageId: RPC_X_NULL_REF_POINTER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A null reference pointer was passed to the stub.
				// '                    ' ''
				// '                    ''const RPC_X_NULL_REF_POINTER           1780L

				// '                    ' ''
				// '                    ''MessageId: RPC_X_ENUM_VALUE_OUT_OF_RANGE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The enumeration value is [Out ] of range.
				// '                    ' ''
				// '                    ''const RPC_X_ENUM_VALUE_OUT_OF_RANGE    1781L

				// '                    ' ''
				// '                    ''MessageId: RPC_X_BYTE_COUNT_TOO_SMALL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The byte count is too small.
				// '                    ' ''
				// '                    ''const RPC_X_BYTE_COUNT_TOO_SMALL       1782L

				// '                    ' ''
				// '                    ''MessageId: RPC_X_BAD_STUB_DATA
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The stub received bad data.
				// '                    ' ''
				// '                    ''const RPC_X_BAD_STUB_DATA              1783L

				// '                    ' ''
				// '                    ''MessageId: ERROR_INVALID_USER_BUFFER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The supplied user buffer is not valid for the requested operation.
				// '                    ' ''
				// '                    ''const ERROR_INVALID_USER_BUFFER        1784L

				// '                    ' ''
				// '                    ''MessageId: ERROR_UNRECOGNIZED_MEDIA
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The disk media is not recognized. It may not be formatted.
				// '                    ' ''
				// '                    ''const ERROR_UNRECOGNIZED_MEDIA         1785L

				// '                    ' ''
				// '                    ''MessageId: ERROR_NO_TRUST_LSA_SECRET
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The workstation does not have a trust secret.
				// '                    ' ''
				// '                    ''const ERROR_NO_TRUST_LSA_SECRET        1786L

				// '                    ' ''
				// '                    ''MessageId: ERROR_NO_TRUST_SAM_ACCOUNT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The security database on the server does not have a computer account for this workstation trust relationship.
				// '                    ' ''
				// '                    ''const ERROR_NO_TRUST_SAM_ACCOUNT       1787L

				// '                    ' ''
				// '                    ''MessageId: ERROR_TRUSTED_DOMAIN_FAILURE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The trust relationship between the primary domain and the trusted domain failed.
				// '                    ' ''
				// '                    ''const ERROR_TRUSTED_DOMAIN_FAILURE     1788L

				// '                    ' ''
				// '                    ''MessageId: ERROR_TRUSTED_RELATIONSHIP_FAILURE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The trust relationship between this workstation and the primary domain failed.
				// '                    ' ''
				// '                    ''const ERROR_TRUSTED_RELATIONSHIP_FAILURE 1789L

				// '                    ' ''
				// '                    ''MessageId: ERROR_TRUST_FAILURE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The network logon failed.
				// '                    ' ''
				// '                    ''const ERROR_TRUST_FAILURE              1790L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_CALL_IN_PROGRESS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A remote procedure call is already in progress for this thread.
				// '                    ' ''
				// '                    ''const RPC_S_CALL_IN_PROGRESS           1791L

				// '                    ' ''
				// '                    ''MessageId: ERROR_NETLOGON_NOT_STARTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An attempt was made to logon, but the network logon service was not started.
				// '                    ' ''
				// '                    ''const ERROR_NETLOGON_NOT_STARTED       1792L

				// '                    ' ''
				// '                    ''MessageId: ERROR_ACCOUNT_EXPIRED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The user's account has expired.
				// '                    ' ''
				// '                    ''const ERROR_ACCOUNT_EXPIRED            1793L

				// '                    ' ''
				// '                    ''MessageId: ERROR_REDIRECTOR_HAS_OPEN_HANDLES
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The redirector is in use and cannot be unloaded.
				// '                    ' ''
				// '                    ''const ERROR_REDIRECTOR_HAS_OPEN_HANDLES 1794L

				// '                    ' ''
				// '                    ''MessageId: ERROR_PRINTER_DRIVER_ALREADY_INSTALLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified printer driver is already installed.
				// '                    ' ''
				// '                    ''const ERROR_PRINTER_DRIVER_ALREADY_INSTALLED 1795L

				// '                    ' ''
				// '                    ''MessageId: ERROR_UNKNOWN_PORT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified port is unknown.
				// '                    ' ''
				// '                    ''const ERROR_UNKNOWN_PORT               1796L

				// '                    ' ''
				// '                    ''MessageId: ERROR_UNKNOWN_PRINTER_DRIVER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The printer driver is unknown.
				// '                    ' ''
				// '                    ''const ERROR_UNKNOWN_PRINTER_DRIVER     1797L

				// '                    ' ''
				// '                    ''MessageId: ERROR_UNKNOWN_PRINTPROCESSOR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The print processor is unknown.
				// '                    ' ''
				// '                    ''const ERROR_UNKNOWN_PRINTPROCESSOR     1798L

				// '                    ' ''
				// '                    ''MessageId: ERROR_INVALID_SEPARATOR_FILE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified separator file is invalid.
				// '                    ' ''
				// '                    ''const ERROR_INVALID_SEPARATOR_FILE     1799L

				// '                    ' ''
				// '                    ''MessageId: ERROR_INVALID_PRIORITY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified priority is invalid.
				// '                    ' ''
				// '                    ''const ERROR_INVALID_PRIORITY           1800L

				// '                    ' ''
				// '                    ''MessageId: ERROR_INVALID_PRINTER_NAME
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The printer name is invalid.
				// '                    ' ''
				// '                    ''const ERROR_INVALID_PRINTER_NAME       1801L

				// '                    ' ''
				// '                    ''MessageId: ERROR_PRINTER_ALREADY_EXISTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The printer already exists.
				// '                    ' ''
				// '                    ''const ERROR_PRINTER_ALREADY_EXISTS     1802L

				// '                    ' ''
				// '                    ''MessageId: ERROR_INVALID_PRINTER_COMMAND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The printer command is invalid.
				// '                    ' ''
				// '                    ''const ERROR_INVALID_PRINTER_COMMAND    1803L

				// '                    ' ''
				// '                    ''MessageId: ERROR_INVALID_DATATYPE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified datatype is invalid.
				// '                    ' ''
				// '                    ''const ERROR_INVALID_DATATYPE           1804L

				// '                    ' ''
				// '                    ''MessageId: ERROR_INVALID_ENVIRONMENT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The environment specified is invalid.
				// '                    ' ''
				// '                    ''const ERROR_INVALID_ENVIRONMENT        1805L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_NO_MORE_BINDINGS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' There are no more bindings.
				// '                    ' ''
				// '                    ''const RPC_S_NO_MORE_BINDINGS           1806L

				// '                    ' ''
				// '                    ''MessageId: ERROR_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The account used is an interdomain trust account. Use your global user account or local user account to access this server.
				// '                    ' ''
				// '                    ''const ERROR_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT 1807L

				// '                    ' ''
				// '                    ''MessageId: ERROR_NOLOGON_WORKSTATION_TRUST_ACCOUNT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The account used is a computer account. Use your global user account or local user account to access this server.
				// '                    ' ''
				// '                    ''const ERROR_NOLOGON_WORKSTATION_TRUST_ACCOUNT 1808L

				// '                    ' ''
				// '                    ''MessageId: ERROR_NOLOGON_SERVER_TRUST_ACCOUNT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The account used is a server trust account. Use your global user account or local user account to access this server.
				// '                    ' ''
				// '                    ''const ERROR_NOLOGON_SERVER_TRUST_ACCOUNT 1809L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DOMAIN_TRUST_INCONSISTENT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The name or security ID (SID) of the domain specified is inconsistent with the trust information for that domain.
				// '                    ' ''
				// '                    ''const ERROR_DOMAIN_TRUST_INCONSISTENT  1810L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SERVER_HAS_OPEN_HANDLES
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The server is in use and cannot be unloaded.
				// '                    ' ''
				// '                    ''const ERROR_SERVER_HAS_OPEN_HANDLES    1811L

				// '                    ' ''
				// '                    ''MessageId: ERROR_RESOURCE_DATA_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified image file did not contain a resource section.
				// '                    ' ''
				// '                    ''const ERROR_RESOURCE_DATA_NOT_FOUND    1812L

				// '                    ' ''
				// '                    ''MessageId: ERROR_RESOURCE_TYPE_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified resource type cannot be found in the image file.
				// '                    ' ''
				// '                    ''const ERROR_RESOURCE_TYPE_NOT_FOUND    1813L

				// '                    ' ''
				// '                    ''MessageId: ERROR_RESOURCE_NAME_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified resource name cannot be found in the image file.
				// '                    ' ''
				// '                    ''const ERROR_RESOURCE_NAME_NOT_FOUND    1814L

				// '                    ' ''
				// '                    ''MessageId: ERROR_RESOURCE_LANG_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified resource language ID cannot be found in the image file.
				// '                    ' ''
				// '                    ''const ERROR_RESOURCE_LANG_NOT_FOUND    1815L

				// '                    ' ''
				// '                    ''MessageId: ERROR_NOT_ENOUGH_QUOTA
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Not enough quota is available to process this command.
				// '                    ' ''
				// '                    ''const ERROR_NOT_ENOUGH_QUOTA           1816L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_NO_INTERFACES
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' No interfaces have been registered.
				// '                    ' ''
				// '                    ''const RPC_S_NO_INTERFACES              1817L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_CALL_CANCELLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The remote procedure call was cancelled.
				// '                    ' ''
				// '                    ''const RPC_S_CALL_CANCELLED             1818L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_BINDING_INCOMPLETE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The binding handle does not contain all required information.
				// '                    ' ''
				// '                    ''const RPC_S_BINDING_INCOMPLETE         1819L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_COMM_FAILURE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A communications failure occurred during a remote procedure call.
				// '                    ' ''
				// '                    ''const RPC_S_COMM_FAILURE               1820L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_UNSUPPORTED_AUTHN_LEVEL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested authentication level is not supported.
				// '                    ' ''
				// '                    ''const RPC_S_UNSUPPORTED_AUTHN_LEVEL    1821L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_NO_PRINC_NAME
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' No principal name registered.
				// '                    ' ''
				// '                    ''const RPC_S_NO_PRINC_NAME              1822L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_NOT_RPC_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The error specified is not a valid Windows RPC error code.
				// '                    ' ''
				// '                    ''const RPC_S_NOT_RPC_ERROR              1823L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_UUID_LOCAL_ONLY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A UUID that is valid only on this computer has been allocated.
				// '                    ' ''
				// '                    ''const RPC_S_UUID_LOCAL_ONLY            1824L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_SEC_PKG_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A security package specific error occurred.
				// '                    ' ''
				// '                    ''const RPC_S_SEC_PKG_ERROR              1825L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_NOT_CANCELLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Thread is not canceled.
				// '                    ' ''
				// '                    ''const RPC_S_NOT_CANCELLED              1826L

				// '                    ' ''
				// '                    ''MessageId: RPC_X_INVALID_ES_ACTION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid operation on the encoding/decoding handle.
				// '                    ' ''
				// '                    ''const RPC_X_INVALID_ES_ACTION          1827L

				// '                    ' ''
				// '                    ''MessageId: RPC_X_WRONG_ES_VERSION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Incompatible version of the serializing package.
				// '                    ' ''
				// '                    ''const RPC_X_WRONG_ES_VERSION           1828L

				// '                    ' ''
				// '                    ''MessageId: RPC_X_WRONG_STUB_VERSION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Incompatible version of the RPC stub.
				// '                    ' ''
				// '                    ''const RPC_X_WRONG_STUB_VERSION         1829L

				// '                    ' ''
				// '                    ''MessageId: RPC_X_INVALID_PIPE_OBJECT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The RPC pipe object is invalid or corrupted.
				// '                    ' ''
				// '                    ''const RPC_X_INVALID_PIPE_OBJECT        1830L

				// '                    ' ''
				// '                    ''MessageId: RPC_X_WRONG_PIPE_ORDER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An invalid operation was attempted on an RPC pipe object.
				// '                    ' ''
				// '                    ''const RPC_X_WRONG_PIPE_ORDER           1831L

				// '                    ' ''
				// '                    ''MessageId: RPC_X_WRONG_PIPE_VERSION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unsupported RPC pipe version.
				// '                    ' ''
				// '                    ''const RPC_X_WRONG_PIPE_VERSION         1832L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_GROUP_MEMBER_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The group member was not found.
				// '                    ' ''
				// '                    ''const RPC_S_GROUP_MEMBER_NOT_FOUND     1898L

				// '                    ' ''
				// '                    ''MessageId: EPT_S_CANT_CREATE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The endpoint mapper database entry could not be created.
				// '                    ' ''
				// '                    ''const EPT_S_CANT_CREATE                1899L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_INVALID_OBJECT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The object universal unique identifier (UUID) is the nil UUID.
				// '                    ' ''
				// '                    ''const RPC_S_INVALID_OBJECT             1900L

				// '                    ' ''
				// '                    ''MessageId: ERROR_INVALID_TIME
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified time is invalid.
				// '                    ' ''
				// '                    ''const ERROR_INVALID_TIME               1901L

				// '                    ' ''
				// '                    ''MessageId: ERROR_INVALID_FORM_NAME
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified form name is invalid.
				// '                    ' ''
				// '                    ''const ERROR_INVALID_FORM_NAME          1902L

				// '                    ' ''
				// '                    ''MessageId: ERROR_INVALID_FORM_SIZE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified form size is invalid.
				// '                    ' ''
				// '                    ''const ERROR_INVALID_FORM_SIZE          1903L

				// '                    ' ''
				// '                    ''MessageId: ERROR_ALREADY_WAITING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified printer handle is already being waited on
				// '                    ' ''
				// '                    ''const ERROR_ALREADY_WAITING            1904L

				// '                    ' ''
				// '                    ''MessageId: ERROR_PRINTER_DELETED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified printer has been deleted.
				// '                    ' ''
				// '                    ''const ERROR_PRINTER_DELETED            1905L

				// '                    ' ''
				// '                    ''MessageId: ERROR_INVALID_PRINTER_STATE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The state of the printer is invalid.
				// '                    ' ''
				// '                    ''const ERROR_INVALID_PRINTER_STATE      1906L

				// '                    ' ''
				// '                    ''MessageId: ERROR_PASSWORD_MUST_CHANGE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The user's password must be changed before logging on the first time.
				// '                    ' ''
				// '                    ''const ERROR_PASSWORD_MUST_CHANGE       1907L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DOMAIN_CONTROLLER_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Could not find the domain controller for this domain.
				// '                    ' ''
				// '                    ''const ERROR_DOMAIN_CONTROLLER_NOT_FOUND 1908L

				// '                    ' ''
				// '                    ''MessageId: ERROR_ACCOUNT_LOCKED_OUT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The referenced account is currently locked [Out ] and may not be logged on to.
				// '                    ' ''
				// '                    ''const ERROR_ACCOUNT_LOCKED_OUT         1909L

				// '                    ' ''
				// '                    ''MessageId: OR_INVALID_OXID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The object exporter specified was not found.
				// '                    ' ''
				// '                    ''const OR_INVALID_OXID                  1910L

				// '                    ' ''
				// '                    ''MessageId: OR_INVALID_OID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The object specified was not found.
				// '                    ' ''
				// '                    ''const OR_INVALID_OID                   1911L

				// '                    ' ''
				// '                    ''MessageId: OR_INVALID_SET
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The object resolver set specified was not found.
				// '                    ' ''
				// '                    ''const OR_INVALID_SET                   1912L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_SEND_INCOMPLETE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Some data remains to be sent in the request buffer.
				// '                    ' ''
				// '                    ''const RPC_S_SEND_INCOMPLETE            1913L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_INVALID_ASYNC_HANDLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid asynchronous remote procedure call handle.
				// '                    ' ''
				// '                    ''const RPC_S_INVALID_ASYNC_HANDLE       1914L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_INVALID_ASYNC_CALL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid asynchronous RPC call handle for this operation.
				// '                    ' ''
				// '                    ''const RPC_S_INVALID_ASYNC_CALL         1915L

				// '                    ' ''
				// '                    ''MessageId: RPC_X_PIPE_CLOSED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The RPC pipe object has already been closed.
				// '                    ' ''
				// '                    ''const RPC_X_PIPE_CLOSED                1916L

				// '                    ' ''
				// '                    ''MessageId: RPC_X_PIPE_DISCIPLINE_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The RPC call completed before all pipes were processed.
				// '                    ' ''
				// '                    ''const RPC_X_PIPE_DISCIPLINE_ERROR      1917L

				// '                    ' ''
				// '                    ''MessageId: RPC_X_PIPE_EMPTY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' No more data is available from the RPC pipe.
				// '                    ' ''
				// '                    ''const RPC_X_PIPE_EMPTY                 1918L

				// '                    ' ''
				// '                    ''MessageId: ERROR_NO_SITENAME
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' No site name is available for this machine.
				// '                    ' ''
				// '                    ''const ERROR_NO_SITENAME                1919L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CANT_ACCESS_FILE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The file can not be accessed by the system.
				// '                    ' ''
				// '                    ''const ERROR_CANT_ACCESS_FILE           1920L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CANT_RESOLVE_FILENAME
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The name of the file cannot be resolved by the system.
				// '                    ' ''
				// '                    ''const ERROR_CANT_RESOLVE_FILENAME      1921L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_ENTRY_TYPE_MISMATCH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The entry is not of the expected type.
				// '                    ' ''
				// '                    ''const RPC_S_ENTRY_TYPE_MISMATCH        1922L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_NOT_ALL_OBJS_EXPORTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Not all object UUIDs could be exported to the specified entry.
				// '                    ' ''
				// '                    ''const RPC_S_NOT_ALL_OBJS_EXPORTED      1923L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_INTERFACE_NOT_EXPORTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Interface could not be exported to the specified entry.
				// '                    ' ''
				// '                    ''const RPC_S_INTERFACE_NOT_EXPORTED     1924L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_PROFILE_NOT_ADDED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified profile entry could not be added.
				// '                    ' ''
				// '                    ''const RPC_S_PROFILE_NOT_ADDED          1925L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_PRF_ELT_NOT_ADDED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified profile element could not be added.
				// '                    ' ''
				// '                    ''const RPC_S_PRF_ELT_NOT_ADDED          1926L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_PRF_ELT_NOT_REMOVED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified profile element could not be removed.
				// '                    ' ''
				// '                    ''const RPC_S_PRF_ELT_NOT_REMOVED        1927L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_GRP_ELT_NOT_ADDED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The group element could not be added.
				// '                    ' ''
				// '                    ''const RPC_S_GRP_ELT_NOT_ADDED          1928L

				// '                    ' ''
				// '                    ''MessageId: RPC_S_GRP_ELT_NOT_REMOVED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The group element could not be removed.
				// '                    ' ''
				// '                    ''const RPC_S_GRP_ELT_NOT_REMOVED        1929L

				// '                    ' ''
				// '                    ''MessageId: ERROR_KM_DRIVER_BLOCKED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The printer driver is not compatible with a policy enabled on your computer that blocks NT 4.0 drivers.
				// '                    ' ''
				// '                    ''const ERROR_KM_DRIVER_BLOCKED          1930L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CONTEXT_EXPIRED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The context has expired and can no longer be used.
				// '                    ' ''
				// '                    ''const ERROR_CONTEXT_EXPIRED            1931L

				// '                    ' ''
				// '                    ''MessageId: ERROR_PER_USER_TRUST_QUOTA_EXCEEDED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The current user's delegated trust creation quota has been exceeded.
				// '                    ' ''
				// '                    ''const ERROR_PER_USER_TRUST_QUOTA_EXCEEDED 1932L

				// '                    ' ''
				// '                    ''MessageId: ERROR_ALL_USER_TRUST_QUOTA_EXCEEDED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The total delegated trust creation quota has been exceeded.
				// '                    ' ''
				// '                    ''const ERROR_ALL_USER_TRUST_QUOTA_EXCEEDED 1933L

				// '                    ' ''
				// '                    ''MessageId: ERROR_USER_DELETE_TRUST_QUOTA_EXCEEDED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The current user's delegated trust deletion quota has been exceeded.
				// '                    ' ''
				// '                    ''const ERROR_USER_DELETE_TRUST_QUOTA_EXCEEDED 1934L

				// '                    ' ''
				// '                    ''MessageId: ERROR_AUTHENTICATION_FIREWALL_FAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Logon Failure: The machine you are logging onto is protected by an authentication firewall.  The specified account is not allowed to authenticate to the machine.
				// '                    ' ''
				// '                    ''const ERROR_AUTHENTICATION_FIREWALL_FAILED 1935L

				// '                    ' ''
				// '                    ''MessageId: ERROR_REMOTE_PRINT_CONNECTIONS_BLOCKED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Remote connections to the Print Spooler are blocked by a policy set on your machine.
				// '                    ' ''
				// '                    ''const ERROR_REMOTE_PRINT_CONNECTIONS_BLOCKED 1936L



				// '#Region "OpenGL Error Code"

				// '                    ' ''
				// '                    ''MessageId: ERROR_INVALID_PIXEL_FORMAT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The pixel format is invalid.
				// '                    ' ''
				// '                    ''const ERROR_INVALID_PIXEL_FORMAT       2000L

				// '                    ' ''
				// '                    ''MessageId: ERROR_BAD_DRIVER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified driver is invalid.
				// '                    ' ''
				// '                    ''const ERROR_BAD_DRIVER                 2001L

				// '                    ' ''
				// '                    ''MessageId: ERROR_INVALID_WINDOW_STYLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The window style or class attribute is invalid for this operation.
				// '                    ' ''
				// '                    ''const ERROR_INVALID_WINDOW_STYLE       2002L

				// '                    ' ''
				// '                    ''MessageId: ERROR_METAFILE_NOT_SUPPORTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested metafile operation is not supported.
				// '                    ' ''
				// '                    ''const ERROR_METAFILE_NOT_SUPPORTED     2003L

				// '                    ' ''
				// '                    ''MessageId: ERROR_TRANSFORM_NOT_SUPPORTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested transformation operation is not supported.
				// '                    ' ''
				// '                    ''const ERROR_TRANSFORM_NOT_SUPPORTED    2004L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLIPPING_NOT_SUPPORTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested clipping operation is not supported.
				// '                    ' ''
				// '                    ''const ERROR_CLIPPING_NOT_SUPPORTED     2005L

				// '#End Region
				// '#Region "Image Color Management Error Code"
				// '                    ''MessageId: ERROR_INVALID_CMM
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified color management module is invalid.
				// '                    ' ''
				// '                    ''const ERROR_INVALID_CMM                2010L

				// '                    ' ''
				// '                    ''MessageId: ERROR_INVALID_PROFILE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified color profile is invalid.
				// '                    ' ''
				// '                    ''const ERROR_INVALID_PROFILE            2011L

				// '                    ' ''
				// '                    ''MessageId: ERROR_TAG_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified tag was not found.
				// '                    ' ''
				// '                    ''const ERROR_TAG_NOT_FOUND              2012L

				// '                    ' ''
				// '                    ''MessageId: ERROR_TAG_NOT_PRESENT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A required tag is not present.
				// '                    ' ''
				// '                    ''const ERROR_TAG_NOT_PRESENT            2013L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DUPLICATE_TAG
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified tag is already present.
				// '                    ' ''
				// '                    ''const ERROR_DUPLICATE_TAG              2014L

				// '                    ' ''
				// '                    ''MessageId: ERROR_PROFILE_NOT_ASSOCIATED_WITH_DEVICE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified color profile is not associated with any device.
				// '                    ' ''
				// '                    ''const ERROR_PROFILE_NOT_ASSOCIATED_WITH_DEVICE 2015L

				// '                    ' ''
				// '                    ''MessageId: ERROR_PROFILE_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified color profile was not found.
				// '                    ' ''
				// '                    ''const ERROR_PROFILE_NOT_FOUND          2016L

				// '                    ' ''
				// '                    ''MessageId: ERROR_INVALID_COLORSPACE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified color space is invalid.
				// '                    ' ''
				// '                    ''const ERROR_INVALID_COLORSPACE         2017L

				// '                    ' ''
				// '                    ''MessageId: ERROR_ICM_NOT_ENABLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Image Color Management is not enabled.
				// '                    ' ''
				// '                    ''const ERROR_ICM_NOT_ENABLED            2018L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DELETING_ICM_XFORM
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' There was an error while deleting the color transform.
				// '                    ' ''
				// '                    ''const ERROR_DELETING_ICM_XFORM         2019L

				// '                    ' ''
				// '                    ''MessageId: ERROR_INVALID_TRANSFORM
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified color transform is invalid.
				// '                    ' ''
				// '                    ''const ERROR_INVALID_TRANSFORM          2020L

				// '                    ' ''
				// '                    ''MessageId: ERROR_COLORSPACE_MISMATCH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified transform does not match the bitmap's color space.
				// '                    ' ''
				// '                    ''const ERROR_COLORSPACE_MISMATCH        2021L

				// '                    ' ''
				// '                    ''MessageId: ERROR_INVALID_COLORINDEX
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified named color index is not present in the profile.
				// '                    ' ''
				// '                    ''const ERROR_INVALID_COLORINDEX         2022L
				// '#End Region
				// '#Region "Winnet32 Status Codes"

				// '                    ''                      '
				// '                    ''The range 2100 through 2999 is reserved for network status codes.
				// '                    ''See lmerr.h for a complete listing
				// '                    '''''''''''''''/


				// '                    ' ''
				// '                    ''MessageId: ERROR_CONNECTED_OTHER_PASSWORD
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The network connection was made successfully, but the user had to be prompted for a password other than the one originally specified.
				// '                    ' ''
				// '                    ''const ERROR_CONNECTED_OTHER_PASSWORD   2108L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CONNECTED_OTHER_PASSWORD_DEFAULT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The network connection was made successfully using default credentials.
				// '                    ' ''
				// '                    ''const ERROR_CONNECTED_OTHER_PASSWORD_DEFAULT 2109L

				// '                    ' ''
				// '                    ''MessageId: ERROR_BAD_USERNAME
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified username is invalid.
				// '                    ' ''
				// '                    ''const ERROR_BAD_USERNAME               2202L

				// '                    ' ''
				// '                    ''MessageId: ERROR_NOT_CONNECTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' This network connection does not exist.
				// '                    ' ''
				// '                    ''const ERROR_NOT_CONNECTED              2250L

				// '                    ' ''
				// '                    ''MessageId: ERROR_OPEN_FILES
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' This network connection has files open or requests pending.
				// '                    ' ''
				// '                    ''const ERROR_OPEN_FILES                 2401L

				// '                    ' ''
				// '                    ''MessageId: ERROR_ACTIVE_CONNECTIONS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Active connections still exist.
				// '                    ' ''
				// '                    ''const ERROR_ACTIVE_CONNECTIONS         2402L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DEVICE_IN_USE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The device is in use by an active process and cannot be disconnected.
				// '                    ' ''
				// '                    ''const ERROR_DEVICE_IN_USE              2404L
				// '#End Region


				// '                    ''''''''''''''''''''
				// '                    ''                               '
				// '                    ''    Win32 Spooler Error Codes  '
				// '                    ''                               '
				// '                    ''''''''''''''''''''
				// '                    ' ''
				// '                    ''MessageId: ERROR_UNKNOWN_PRINT_MONITOR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified print monitor is unknown.
				// '                    ' ''
				// '                    ''const ERROR_UNKNOWN_PRINT_MONITOR      3000L

				// '                    ' ''
				// '                    ''MessageId: ERROR_PRINTER_DRIVER_IN_USE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified printer driver is currently in use.
				// '                    ' ''
				// '                    ''const ERROR_PRINTER_DRIVER_IN_USE      3001L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SPOOL_FILE_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The spool file was not found.
				// '                    ' ''
				// '                    ''const ERROR_SPOOL_FILE_NOT_FOUND       3002L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SPL_NO_STARTDOC
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A StartDocPrinter call was not issued.
				// '                    ' ''
				// '                    ''const ERROR_SPL_NO_STARTDOC            3003L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SPL_NO_ADDJOB
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An AddJob call was not issued.
				// '                    ' ''
				// '                    ''const ERROR_SPL_NO_ADDJOB              3004L

				// '                    ' ''
				// '                    ''MessageId: ERROR_PRINT_PROCESSOR_ALREADY_INSTALLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified print processor has already been installed.
				// '                    ' ''
				// '                    ''const ERROR_PRINT_PROCESSOR_ALREADY_INSTALLED 3005L

				// '                    ' ''
				// '                    ''MessageId: ERROR_PRINT_MONITOR_ALREADY_INSTALLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified print monitor has already been installed.
				// '                    ' ''
				// '                    ''const ERROR_PRINT_MONITOR_ALREADY_INSTALLED 3006L

				// '                    ' ''
				// '                    ''MessageId: ERROR_INVALID_PRINT_MONITOR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified print monitor does not have the required functions.
				// '                    ' ''
				// '                    ''const ERROR_INVALID_PRINT_MONITOR      3007L

				// '                    ' ''
				// '                    ''MessageId: ERROR_PRINT_MONITOR_IN_USE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified print monitor is currently in use.
				// '                    ' ''
				// '                    ''const ERROR_PRINT_MONITOR_IN_USE       3008L

				// '                    ' ''
				// '                    ''MessageId: ERROR_PRINTER_HAS_JOBS_QUEUED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested operation is not allowed when there are jobs queued to the printer.
				// '                    ' ''
				// '                    ''const ERROR_PRINTER_HAS_JOBS_QUEUED    3009L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SUCCESS_REBOOT_REQUIRED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested operation is successful. Changes will not be effective until the system is rebooted.
				// '                    ' ''
				// '                    ''const ERROR_SUCCESS_REBOOT_REQUIRED    3010L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SUCCESS_RESTART_REQUIRED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested operation is successful. Changes will not be effective until the service is restarted.
				// '                    ' ''
				// '                    ''const ERROR_SUCCESS_RESTART_REQUIRED   3011L

				// '                    ' ''
				// '                    ''MessageId: ERROR_PRINTER_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' No printers were found.
				// '                    ' ''
				// '                    ''const ERROR_PRINTER_NOT_FOUND          3012L

				// '                    ' ''
				// '                    ''MessageId: ERROR_PRINTER_DRIVER_WARNED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The printer driver is known to be unreliable.
				// '                    ' ''
				// '                    ''const ERROR_PRINTER_DRIVER_WARNED      3013L

				// '                    ' ''
				// '                    ''MessageId: ERROR_PRINTER_DRIVER_BLOCKED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The printer driver is known to harm the system.
				// '                    ' ''
				// '                    ''const ERROR_PRINTER_DRIVER_BLOCKED     3014L

				// '                    ''''''''''''''''''''
				// '                    ''                               '
				// '                    ''    Wins Error Codes           '
				// '                    ''                               '
				// '                    ''''''''''''''''''''
				// '                    ' ''
				// '                    ''MessageId: ERROR_WINS_INTERNAL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' WINS encountered an error while processing the command.
				// '                    ' ''
				// '                    ''const ERROR_WINS_INTERNAL              4000L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CAN_NOT_DEL_LOCAL_WINS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The local WINS can not be deleted.
				// '                    ' ''
				// '                    ''const ERROR_CAN_NOT_DEL_LOCAL_WINS     4001L

				// '                    ' ''
				// '                    ''MessageId: ERROR_STATIC_INIT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The importation from the file failed.
				// '                    ' ''
				// '                    ''const ERROR_STATIC_INIT                4002L

				// '                    ' ''
				// '                    ''MessageId: ERROR_INC_BACKUP
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The backup failed. Was a full backup done before?
				// '                    ' ''
				// '                    ''const ERROR_INC_BACKUP                 4003L

				// '                    ' ''
				// '                    ''MessageId: ERROR_FULL_BACKUP
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The backup failed. Check the directory to which you are backing the database.
				// '                    ' ''
				// '                    ''const ERROR_FULL_BACKUP                4004L

				// '                    ' ''
				// '                    ''MessageId: ERROR_REC_NON_EXISTENT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The name does not exist in the WINS database.
				// '                    ' ''
				// '                    ''const ERROR_REC_NON_EXISTENT           4005L

				// '                    ' ''
				// '                    ''MessageId: ERROR_RPL_NOT_ALLOWED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Replication with a nonconfigured partner is not allowed.
				// '                    ' ''
				// '                    ''const ERROR_RPL_NOT_ALLOWED            4006L

				// '                    ''''''''''''''''''''
				// '                    ''                               '
				// '                    ''    DHCP Error Codes           '
				// '                    ''                               '
				// '                    ''''''''''''''''''''
				// '                    ' ''
				// '                    ''MessageId: ERROR_DHCP_ADDRESS_CONFLICT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The DHCP client has obtained an IP address that is already in use on the network. The local interface will be disabled until the DHCP client can obtain a new address.
				// '                    ' ''
				// '                    ''const ERROR_DHCP_ADDRESS_CONFLICT      4100L

				// '                    ''''''''''''''''''''
				// '                    ''                               '
				// '                    ''    WMI Error Codes            '
				// '                    ''                               '
				// '                    ''''''''''''''''''''
				// '                    ' ''
				// '                    ''MessageId: ERROR_WMI_GUID_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The GUID passed was not recognized as valid by a WMI data provider.
				// '                    ' ''
				// '                    ''const ERROR_WMI_GUID_NOT_FOUND         4200L

				// '                    ' ''
				// '                    ''MessageId: ERROR_WMI_INSTANCE_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The instance name passed was not recognized as valid by a WMI data provider.
				// '                    ' ''
				// '                    ''const ERROR_WMI_INSTANCE_NOT_FOUND     4201L

				// '                    ' ''
				// '                    ''MessageId: ERROR_WMI_ITEMID_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The data item ID passed was not recognized as valid by a WMI data provider.
				// '                    ' ''
				// '                    ''const ERROR_WMI_ITEMID_NOT_FOUND       4202L

				// '                    ' ''
				// '                    ''MessageId: ERROR_WMI_TRY_AGAIN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The WMI request could not be completed and should be retried.
				// '                    ' ''
				// '                    ''const ERROR_WMI_TRY_AGAIN              4203L

				// '                    ' ''
				// '                    ''MessageId: ERROR_WMI_DP_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The WMI data provider could not be located.
				// '                    ' ''
				// '                    ''const ERROR_WMI_DP_NOT_FOUND           4204L

				// '                    ' ''
				// '                    ''MessageId: ERROR_WMI_UNRESOLVED_INSTANCE_REF
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The WMI data provider references an instance set that has not been registered.
				// '                    ' ''
				// '                    ''const ERROR_WMI_UNRESOLVED_INSTANCE_REF 4205L

				// '                    ' ''
				// '                    ''MessageId: ERROR_WMI_ALREADY_ENABLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The WMI data block or event notification has already been enabled.
				// '                    ' ''
				// '                    ''const ERROR_WMI_ALREADY_ENABLED        4206L

				// '                    ' ''
				// '                    ''MessageId: ERROR_WMI_GUID_DISCONNECTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The WMI data block is no longer available.
				// '                    ' ''
				// '                    ''const ERROR_WMI_GUID_DISCONNECTED      4207L

				// '                    ' ''
				// '                    ''MessageId: ERROR_WMI_SERVER_UNAVAILABLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The WMI data service is not available.
				// '                    ' ''
				// '                    ''const ERROR_WMI_SERVER_UNAVAILABLE     4208L

				// '                    ' ''
				// '                    ''MessageId: ERROR_WMI_DP_FAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The WMI data provider failed to carry [Out ] the request.
				// '                    ' ''
				// '                    ''const ERROR_WMI_DP_FAILED              4209L

				// '                    ' ''
				// '                    ''MessageId: ERROR_WMI_INVALID_MOF
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The WMI MOF information is not valid.
				// '                    ' ''
				// '                    ''const ERROR_WMI_INVALID_MOF            4210L

				// '                    ' ''
				// '                    ''MessageId: ERROR_WMI_INVALID_REGINFO
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The WMI registration information is not valid.
				// '                    ' ''
				// '                    ''const ERROR_WMI_INVALID_REGINFO        4211L

				// '                    ' ''
				// '                    ''MessageId: ERROR_WMI_ALREADY_DISABLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The WMI data block or event notification has already been disabled.
				// '                    ' ''
				// '                    ''const ERROR_WMI_ALREADY_DISABLED       4212L

				// '                    ' ''
				// '                    ''MessageId: ERROR_WMI_READ_ONLY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The WMI data item or data block is read only.
				// '                    ' ''
				// '                    ''const ERROR_WMI_READ_ONLY              4213L

				// '                    ' ''
				// '                    ''MessageId: ERROR_WMI_SET_FAILURE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The WMI data item or data block could not be changed.
				// '                    ' ''
				// '                    ''const ERROR_WMI_SET_FAILURE            4214L

				// '                    '''''''''''''''''''''''
				// '                    ''                                     '
				// '                    ''NT Media Services (RSM) Error Codes  '
				// '                    ''                                     '
				// '                    '''''''''''''''''''''''
				// '                    ' ''
				// '                    ''MessageId: ERROR_INVALID_MEDIA
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The media identifier does not represent a valid medium.
				// '                    ' ''
				// '                    ''const ERROR_INVALID_MEDIA              4300L

				// '                    ' ''
				// '                    ''MessageId: ERROR_INVALID_LIBRARY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The library identifier does not represent a valid library.
				// '                    ' ''
				// '                    ''const ERROR_INVALID_LIBRARY            4301L

				// '                    ' ''
				// '                    ''MessageId: ERROR_INVALID_MEDIA_POOL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The media pool identifier does not represent a valid media pool.
				// '                    ' ''
				// '                    ''const ERROR_INVALID_MEDIA_POOL         4302L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DRIVE_MEDIA_MISMATCH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The drive and medium are not compatible or exist in different libraries.
				// '                    ' ''
				// '                    ''const ERROR_DRIVE_MEDIA_MISMATCH       4303L

				// '                    ' ''
				// '                    ''MessageId: ERROR_MEDIA_OFFLINE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The medium currently exists in an offline library and must be online to perform this operation.
				// '                    ' ''
				// '                    ''const ERROR_MEDIA_OFFLINE              4304L

				// '                    ' ''
				// '                    ''MessageId: ERROR_LIBRARY_OFFLINE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The operation cannot be performed on an offline library.
				// '                    ' ''
				// '                    ''const ERROR_LIBRARY_OFFLINE            4305L

				// '                    ' ''
				// '                    ''MessageId: ERROR_EMPTY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The library, drive, or media pool is empty.
				// '                    ' ''
				// '                    ''const ERROR_EMPTY                      4306L

				// '                    ' ''
				// '                    ''MessageId: ERROR_NOT_EMPTY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The library, drive, or media pool must be empty to perform this operation.
				// '                    ' ''
				// '                    ''const ERROR_NOT_EMPTY                  4307L

				// '                    ' ''
				// '                    ''MessageId: ERROR_MEDIA_UNAVAILABLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' No media is currently available in this media pool or library.
				// '                    ' ''
				// '                    ''const ERROR_MEDIA_UNAVAILABLE          4308L

				// '                    ' ''
				// '                    ''MessageId: ERROR_RESOURCE_DISABLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A resource required for this operation is disabled.
				// '                    ' ''
				// '                    ''const ERROR_RESOURCE_DISABLED          4309L

				// '                    ' ''
				// '                    ''MessageId: ERROR_INVALID_CLEANER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The media identifier does not represent a valid cleaner.
				// '                    ' ''
				// '                    ''const ERROR_INVALID_CLEANER            4310L

				// '                    ' ''
				// '                    ''MessageId: ERROR_UNABLE_TO_CLEAN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The drive cannot be cleaned or does not support cleaning.
				// '                    ' ''
				// '                    ''const ERROR_UNABLE_TO_CLEAN            4311L

				// '                    ' ''
				// '                    ''MessageId: ERROR_OBJECT_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The object identifier does not represent a valid object.
				// '                    ' ''
				// '                    ''const ERROR_OBJECT_NOT_FOUND           4312L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DATABASE_FAILURE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unable to read from or write to the database.
				// '                    ' ''
				// '                    ''const ERROR_DATABASE_FAILURE           4313L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DATABASE_FULL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The database is full.
				// '                    ' ''
				// '                    ''const ERROR_DATABASE_FULL              4314L

				// '                    ' ''
				// '                    ''MessageId: ERROR_MEDIA_INCOMPATIBLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The medium is not compatible with the device or media pool.
				// '                    ' ''
				// '                    ''const ERROR_MEDIA_INCOMPATIBLE         4315L

				// '                    ' ''
				// '                    ''MessageId: ERROR_RESOURCE_NOT_PRESENT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The resource required for this operation does not exist.
				// '                    ' ''
				// '                    ''const ERROR_RESOURCE_NOT_PRESENT       4316L

				// '                    ' ''
				// '                    ''MessageId: ERROR_INVALID_OPERATION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The operation identifier is not valid.
				// '                    ' ''
				// '                    ''const ERROR_INVALID_OPERATION          4317L

				// '                    ' ''
				// '                    ''MessageId: ERROR_MEDIA_NOT_AVAILABLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The media is not mounted or ready for use.
				// '                    ' ''
				// '                    ''const ERROR_MEDIA_NOT_AVAILABLE        4318L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DEVICE_NOT_AVAILABLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The device is not ready for use.
				// '                    ' ''
				// '                    ''const ERROR_DEVICE_NOT_AVAILABLE       4319L

				// '                    ' ''
				// '                    ''MessageId: ERROR_REQUEST_REFUSED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The operator or administrator has refused the request.
				// '                    ' ''
				// '                    ''const ERROR_REQUEST_REFUSED            4320L

				// '                    ' ''
				// '                    ''MessageId: ERROR_INVALID_DRIVE_OBJECT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The drive identifier does not represent a valid drive.
				// '                    ' ''
				// '                    ''const ERROR_INVALID_DRIVE_OBJECT       4321L

				// '                    ' ''
				// '                    ''MessageId: ERROR_LIBRARY_FULL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Library is full.  No slot is available for use.
				// '                    ' ''
				// '                    ''const ERROR_LIBRARY_FULL               4322L

				// '                    ' ''
				// '                    ''MessageId: ERROR_MEDIUM_NOT_ACCESSIBLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The transport cannot access the medium.
				// '                    ' ''
				// '                    ''const ERROR_MEDIUM_NOT_ACCESSIBLE      4323L

				// '                    ' ''
				// '                    ''MessageId: ERROR_UNABLE_TO_LOAD_MEDIUM
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unable to load the medium into the drive.
				// '                    ' ''
				// '                    ''const ERROR_UNABLE_TO_LOAD_MEDIUM      4324L

				// '                    ' ''
				// '                    ''MessageId: ERROR_UNABLE_TO_INVENTORY_DRIVE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unable to retrieve the drive status.
				// '                    ' ''
				// '                    ''const ERROR_UNABLE_TO_INVENTORY_DRIVE  4325L

				// '                    ' ''
				// '                    ''MessageId: ERROR_UNABLE_TO_INVENTORY_SLOT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unable to retrieve the slot status.
				// '                    ' ''
				// '                    ''const ERROR_UNABLE_TO_INVENTORY_SLOT   4326L

				// '                    ' ''
				// '                    ''MessageId: ERROR_UNABLE_TO_INVENTORY_TRANSPORT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unable to retrieve status about the transport.
				// '                    ' ''
				// '                    ''const ERROR_UNABLE_TO_INVENTORY_TRANSPORT 4327L

				// '                    ' ''
				// '                    ''MessageId: ERROR_TRANSPORT_FULL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Cannot use the transport because it is already in use.
				// '                    ' ''
				// '                    ''const ERROR_TRANSPORT_FULL             4328L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CONTROLLING_IEPORT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unable to open or close the inject/eject port.
				// '                    ' ''
				// '                    ''const ERROR_CONTROLLING_IEPORT         4329L

				// '                    ' ''
				// '                    ''MessageId: ERROR_UNABLE_TO_EJECT_MOUNTED_MEDIA
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unable to eject the medium because it is in a drive.
				// '                    ' ''
				// '                    ''const ERROR_UNABLE_TO_EJECT_MOUNTED_MEDIA 4330L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLEANER_SLOT_SET
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A cleaner slot is already reserved.
				// '                    ' ''
				// '                    ''const ERROR_CLEANER_SLOT_SET           4331L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLEANER_SLOT_NOT_SET
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A cleaner slot is not reserved.
				// '                    ' ''
				// '                    ''const ERROR_CLEANER_SLOT_NOT_SET       4332L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLEANER_CARTRIDGE_SPENT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cleaner cartridge has performed the maximum number of drive cleanings.
				// '                    ' ''
				// '                    ''const ERROR_CLEANER_CARTRIDGE_SPENT    4333L

				// '                    ' ''
				// '                    ''MessageId: ERROR_UNEXPECTED_OMID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unexpected on-medium identifier.
				// '                    ' ''
				// '                    ''const ERROR_UNEXPECTED_OMID            4334L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CANT_DELETE_LAST_ITEM
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The last remaining item in this group or resource cannot be deleted.
				// '                    ' ''
				// '                    ''const ERROR_CANT_DELETE_LAST_ITEM      4335L

				// '                    ' ''
				// '                    ''MessageId: ERROR_MESSAGE_EXCEEDS_MAX_SIZE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The message provided exceeds the maximum size allowed for this parameter.
				// '                    ' ''
				// '                    ''const ERROR_MESSAGE_EXCEEDS_MAX_SIZE   4336L

				// '                    ' ''
				// '                    ''MessageId: ERROR_VOLUME_CONTAINS_SYS_FILES
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The volume contains system or paging files.
				// '                    ' ''
				// '                    ''const ERROR_VOLUME_CONTAINS_SYS_FILES  4337L

				// '                    ' ''
				// '                    ''MessageId: ERROR_INDIGENOUS_TYPE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The media type cannot be removed from this library since at least one drive in the library reports it can support this media type.
				// '                    ' ''
				// '                    ''const ERROR_INDIGENOUS_TYPE            4338L

				// '                    ' ''
				// '                    ''MessageId: ERROR_NO_SUPPORTING_DRIVES
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' This offline media cannot be mounted on this system since no enabled drives are present which can be used.
				// '                    ' ''
				// '                    ''const ERROR_NO_SUPPORTING_DRIVES       4339L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLEANER_CARTRIDGE_INSTALLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A cleaner cartridge is present in the tape library.
				// '                    ' ''
				// '                    ''const ERROR_CLEANER_CARTRIDGE_INSTALLED 4340L

				// '                    ''''''''''''''''''''''''
				// '                    ''                                       '
				// '                    ''NT Remote Storage Service Error Codes  '
				// '                    ''                                       '
				// '                    ''''''''''''''''''''''''
				// '                    ' ''
				// '                    ''MessageId: ERROR_FILE_OFFLINE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The remote storage service was not able to recall the file.
				// '                    ' ''
				// '                    ''const ERROR_FILE_OFFLINE               4350L

				// '                    ' ''
				// '                    ''MessageId: ERROR_REMOTE_STORAGE_NOT_ACTIVE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The remote storage service is not operational at this time.
				// '                    ' ''
				// '                    ''const ERROR_REMOTE_STORAGE_NOT_ACTIVE  4351L

				// '                    ' ''
				// '                    ''MessageId: ERROR_REMOTE_STORAGE_MEDIA_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The remote storage service encountered a media error.
				// '                    ' ''
				// '                    ''const ERROR_REMOTE_STORAGE_MEDIA_ERROR 4352L

				// '                    ''''''''''''''''''''''''
				// '                    ''                                       '
				// '                    ''NT Reparse Points Error Codes          '
				// '                    ''                                       '
				// '                    ''''''''''''''''''''''''
				// '                    ' ''
				// '                    ''MessageId: ERROR_NOT_A_REPARSE_POINT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The file or directory is not a reparse point.
				// '                    ' ''
				// '                    ''const ERROR_NOT_A_REPARSE_POINT        4390L

				// '                    ' ''
				// '                    ''MessageId: ERROR_REPARSE_ATTRIBUTE_CONFLICT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The reparse point attribute cannot be set because it conflicts with an existing attribute.
				// '                    ' ''
				// '                    ''const ERROR_REPARSE_ATTRIBUTE_CONFLICT 4391L

				// '                    ' ''
				// '                    ''MessageId: ERROR_INVALID_REPARSE_DATA
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The data present in the reparse point buffer is invalid.
				// '                    ' ''
				// '                    ''const ERROR_INVALID_REPARSE_DATA       4392L

				// '                    ' ''
				// '                    ''MessageId: ERROR_REPARSE_TAG_INVALID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The tag present in the reparse point buffer is invalid.
				// '                    ' ''
				// '                    ''const ERROR_REPARSE_TAG_INVALID        4393L

				// '                    ' ''
				// '                    ''MessageId: ERROR_REPARSE_TAG_MISMATCH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' There is a mismatch between the tag specified in the request and the tag present in the reparse point.
				// '                    '' 
				// '                    ' ''
				// '                    ''const ERROR_REPARSE_TAG_MISMATCH       4394L

				// '                    ''''''''''''''''''''''''
				// '                    ''                                       '
				// '                    ''NT Single Instance Store Error Codes   '
				// '                    ''                                       '
				// '                    ''''''''''''''''''''''''
				// '                    ' ''
				// '                    ''MessageId: ERROR_VOLUME_NOT_SIS_ENABLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Single Instance Storage is not available on this volume.
				// '                    ' ''
				// '                    ''const ERROR_VOLUME_NOT_SIS_ENABLED     4500L

				// '                    ''''''''''''''''''''
				// '                    ''                               '
				// '                    ''    Cluster Error Codes        '
				// '                    ''                               '
				// '                    ''''''''''''''''''''
				// '                    ' ''
				// '                    ''MessageId: ERROR_DEPENDENT_RESOURCE_EXISTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster resource cannot be moved to another group because other resources are dependent on it.
				// '                    ' ''
				// '                    ''const ERROR_DEPENDENT_RESOURCE_EXISTS  5001L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DEPENDENCY_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster resource dependency cannot be found.
				// '                    ' ''
				// '                    ''const ERROR_DEPENDENCY_NOT_FOUND       5002L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DEPENDENCY_ALREADY_EXISTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster resource cannot be made dependent on the specified resource because it is already dependent.
				// '                    ' ''
				// '                    ''const ERROR_DEPENDENCY_ALREADY_EXISTS  5003L

				// '                    ' ''
				// '                    ''MessageId: ERROR_RESOURCE_NOT_ONLINE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster resource is not online.
				// '                    ' ''
				// '                    ''const ERROR_RESOURCE_NOT_ONLINE        5004L

				// '                    ' ''
				// '                    ''MessageId: ERROR_HOST_NODE_NOT_AVAILABLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A cluster node is not available for this operation.
				// '                    ' ''
				// '                    ''const ERROR_HOST_NODE_NOT_AVAILABLE    5005L

				// '                    ' ''
				// '                    ''MessageId: ERROR_RESOURCE_NOT_AVAILABLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster resource is not available.
				// '                    ' ''
				// '                    ''const ERROR_RESOURCE_NOT_AVAILABLE     5006L

				// '                    ' ''
				// '                    ''MessageId: ERROR_RESOURCE_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster resource could not be found.
				// '                    ' ''
				// '                    ''const ERROR_RESOURCE_NOT_FOUND         5007L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SHUTDOWN_CLUSTER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster is being shut down.
				// '                    ' ''
				// '                    ''const ERROR_SHUTDOWN_CLUSTER           5008L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CANT_EVICT_ACTIVE_NODE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A cluster node cannot be evicted from the cluster unless the node is down or it is the last node.
				// '                    ' ''
				// '                    ''const ERROR_CANT_EVICT_ACTIVE_NODE     5009L

				// '                    ' ''
				// '                    ''MessageId: ERROR_OBJECT_ALREADY_EXISTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The object already exists.
				// '                    ' ''
				// '                    ''const ERROR_OBJECT_ALREADY_EXISTS      5010L

				// '                    ' ''
				// '                    ''MessageId: ERROR_OBJECT_IN_LIST
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The object is already in the list.
				// '                    ' ''
				// '                    ''const ERROR_OBJECT_IN_LIST             5011L

				// '                    ' ''
				// '                    ''MessageId: ERROR_GROUP_NOT_AVAILABLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster group is not available for any new requests.
				// '                    ' ''
				// '                    ''const ERROR_GROUP_NOT_AVAILABLE        5012L

				// '                    ' ''
				// '                    ''MessageId: ERROR_GROUP_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster group could not be found.
				// '                    ' ''
				// '                    ''const ERROR_GROUP_NOT_FOUND            5013L

				// '                    ' ''
				// '                    ''MessageId: ERROR_GROUP_NOT_ONLINE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The operation could not be completed because the cluster group is not online.
				// '                    ' ''
				// '                    ''const ERROR_GROUP_NOT_ONLINE           5014L

				// '                    ' ''
				// '                    ''MessageId: ERROR_HOST_NODE_NOT_RESOURCE_OWNER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster node is not the owner of the resource.
				// '                    ' ''
				// '                    ''const ERROR_HOST_NODE_NOT_RESOURCE_OWNER 5015L

				// '                    ' ''
				// '                    ''MessageId: ERROR_HOST_NODE_NOT_GROUP_OWNER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster node is not the owner of the group.
				// '                    ' ''
				// '                    ''const ERROR_HOST_NODE_NOT_GROUP_OWNER  5016L

				// '                    ' ''
				// '                    ''MessageId: ERROR_RESMON_CREATE_FAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster resource could not be created in the specified resource monitor.
				// '                    ' ''
				// '                    ''const ERROR_RESMON_CREATE_FAILED       5017L

				// '                    ' ''
				// '                    ''MessageId: ERROR_RESMON_ONLINE_FAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster resource could not be brought online by the resource monitor.
				// '                    ' ''
				// '                    ''const ERROR_RESMON_ONLINE_FAILED       5018L

				// '                    ' ''
				// '                    ''MessageId: ERROR_RESOURCE_ONLINE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The operation could not be completed because the cluster resource is online.
				// '                    ' ''
				// '                    ''const ERROR_RESOURCE_ONLINE            5019L

				// '                    ' ''
				// '                    ''MessageId: ERROR_QUORUM_RESOURCE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster resource could not be deleted or brought offline because it is the quorum resource.
				// '                    ' ''
				// '                    ''const ERROR_QUORUM_RESOURCE            5020L

				// '                    ' ''
				// '                    ''MessageId: ERROR_NOT_QUORUM_CAPABLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster could not make the specified resource a quorum resource because it is not capable of being a quorum resource.
				// '                    ' ''
				// '                    ''const ERROR_NOT_QUORUM_CAPABLE         5021L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_SHUTTING_DOWN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster software is shutting down.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_SHUTTING_DOWN      5022L

				// '                    ' ''
				// '                    ''MessageId: ERROR_INVALID_STATE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The group or resource is not in the correct state to perform the requested operation.
				// '                    ' ''
				// '                    ''const ERROR_INVALID_STATE              5023L

				// '                    ' ''
				// '                    ''MessageId: ERROR_RESOURCE_PROPERTIES_STORED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The properties were stored but not all changes will take effect until the next time the resource is brought online.
				// '                    ' ''
				// '                    ''const ERROR_RESOURCE_PROPERTIES_STORED 5024L

				// '                    ' ''
				// '                    ''MessageId: ERROR_NOT_QUORUM_CLASS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster could not make the specified resource a quorum resource because it does not belong to a shared storage class.
				// '                    ' ''
				// '                    ''const ERROR_NOT_QUORUM_CLASS           5025L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CORE_RESOURCE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster resource could not be deleted since it is a core resource.
				// '                    ' ''
				// '                    ''const ERROR_CORE_RESOURCE              5026L

				// '                    ' ''
				// '                    ''MessageId: ERROR_QUORUM_RESOURCE_ONLINE_FAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The quorum resource failed to come online.
				// '                    ' ''
				// '                    ''const ERROR_QUORUM_RESOURCE_ONLINE_FAILED 5027L

				// '                    ' ''
				// '                    ''MessageId: ERROR_QUORUMLOG_OPEN_FAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The quorum log could not be created or mounted successfully.
				// '                    ' ''
				// '                    ''const ERROR_QUORUMLOG_OPEN_FAILED      5028L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTERLOG_CORRUPT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster log is corrupt.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTERLOG_CORRUPT         5029L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTERLOG_RECORD_EXCEEDS_MAXSIZE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The record could not be written to the cluster log since it exceeds the maximum size.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTERLOG_RECORD_EXCEEDS_MAXSIZE 5030L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTERLOG_EXCEEDS_MAXSIZE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster log exceeds its maximum size.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTERLOG_EXCEEDS_MAXSIZE 5031L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTERLOG_CHKPOINT_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' No checkpoint record was found in the cluster log.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTERLOG_CHKPOINT_NOT_FOUND 5032L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTERLOG_NOT_ENOUGH_SPACE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The minimum required disk space needed for logging is not available.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTERLOG_NOT_ENOUGH_SPACE 5033L

				// '                    ' ''
				// '                    ''MessageId: ERROR_QUORUM_OWNER_ALIVE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster node failed to take control of the quorum resource because the resource is owned by another active node.
				// '                    ' ''
				// '                    ''const ERROR_QUORUM_OWNER_ALIVE         5034L

				// '                    ' ''
				// '                    ''MessageId: ERROR_NETWORK_NOT_AVAILABLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A cluster network is not available for this operation.
				// '                    ' ''
				// '                    ''const ERROR_NETWORK_NOT_AVAILABLE      5035L

				// '                    ' ''
				// '                    ''MessageId: ERROR_NODE_NOT_AVAILABLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A cluster node is not available for this operation.
				// '                    ' ''
				// '                    ''const ERROR_NODE_NOT_AVAILABLE         5036L

				// '                    ' ''
				// '                    ''MessageId: ERROR_ALL_NODES_NOT_AVAILABLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' All cluster nodes must be running to perform this operation.
				// '                    ' ''
				// '                    ''const ERROR_ALL_NODES_NOT_AVAILABLE    5037L

				// '                    ' ''
				// '                    ''MessageId: ERROR_RESOURCE_FAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A cluster resource failed.
				// '                    ' ''
				// '                    ''const ERROR_RESOURCE_FAILED            5038L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_INVALID_NODE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster node is not valid.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_INVALID_NODE       5039L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_NODE_EXISTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster node already exists.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_NODE_EXISTS        5040L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_JOIN_IN_PROGRESS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A node is in the process of joining the cluster.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_JOIN_IN_PROGRESS   5041L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_NODE_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster node was not found.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_NODE_NOT_FOUND     5042L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_LOCAL_NODE_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster local node information was not found.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_LOCAL_NODE_NOT_FOUND 5043L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_NETWORK_EXISTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster network already exists.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_NETWORK_EXISTS     5044L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_NETWORK_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster network was not found.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_NETWORK_NOT_FOUND  5045L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_NETINTERFACE_EXISTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster network interface already exists.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_NETINTERFACE_EXISTS 5046L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_NETINTERFACE_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster network interface was not found.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_NETINTERFACE_NOT_FOUND 5047L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_INVALID_REQUEST
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster request is not valid for this object.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_INVALID_REQUEST    5048L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_INVALID_NETWORK_PROVIDER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster network provider is not valid.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_INVALID_NETWORK_PROVIDER 5049L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_NODE_DOWN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster node is down.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_NODE_DOWN          5050L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_NODE_UNREACHABLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster node is not reachable.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_NODE_UNREACHABLE   5051L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_NODE_NOT_MEMBER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster node is not a member of the cluster.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_NODE_NOT_MEMBER    5052L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_JOIN_NOT_IN_PROGRESS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A cluster join operation is not in progress.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_JOIN_NOT_IN_PROGRESS 5053L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_INVALID_NETWORK
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster network is not valid.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_INVALID_NETWORK    5054L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_NODE_UP
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster node is up.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_NODE_UP            5056L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_IPADDR_IN_USE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster IP address is already in use.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_IPADDR_IN_USE      5057L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_NODE_NOT_PAUSED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster node is not paused.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_NODE_NOT_PAUSED    5058L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_NO_SECURITY_CONTEXT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' No cluster security context is available.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_NO_SECURITY_CONTEXT 5059L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_NETWORK_NOT_INTERNAL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster network is not configured for internal cluster communication.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_NETWORK_NOT_INTERNAL 5060L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_NODE_ALREADY_UP
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster node is already up.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_NODE_ALREADY_UP    5061L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_NODE_ALREADY_DOWN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster node is already down.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_NODE_ALREADY_DOWN  5062L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_NETWORK_ALREADY_ONLINE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster network is already online.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_NETWORK_ALREADY_ONLINE 5063L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_NETWORK_ALREADY_OFFLINE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster network is already offline.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_NETWORK_ALREADY_OFFLINE 5064L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_NODE_ALREADY_MEMBER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster node is already a member of the cluster.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_NODE_ALREADY_MEMBER 5065L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_LAST_INTERNAL_NETWORK
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster network is the only one configured for internal cluster communication between two or more active cluster nodes. The internal communication capability cannot be removed from the network.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_LAST_INTERNAL_NETWORK 5066L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_NETWORK_HAS_DEPENDENTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' One or more cluster resources depend on the network to provide service to clients. The client access capability cannot be removed from the network.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_NETWORK_HAS_DEPENDENTS 5067L

				// '                    ' ''
				// '                    ''MessageId: ERROR_INVALID_OPERATION_ON_QUORUM
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' This operation cannot be performed on the cluster resource as it the quorum resource. You may not bring the quorum resource offline or modify its possible owners list.
				// '                    ' ''
				// '                    ''const ERROR_INVALID_OPERATION_ON_QUORUM 5068L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DEPENDENCY_NOT_ALLOWED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster quorum resource is not allowed to have any dependencies.
				// '                    ' ''
				// '                    ''const ERROR_DEPENDENCY_NOT_ALLOWED     5069L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_NODE_PAUSED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster node is paused.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_NODE_PAUSED        5070L

				// '                    ' ''
				// '                    ''MessageId: ERROR_NODE_CANT_HOST_RESOURCE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster resource cannot be brought online. The owner node cannot run this resource.
				// '                    ' ''
				// '                    ''const ERROR_NODE_CANT_HOST_RESOURCE    5071L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_NODE_NOT_READY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster node is not ready to perform the requested operation.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_NODE_NOT_READY     5072L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_NODE_SHUTTING_DOWN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster node is shutting down.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_NODE_SHUTTING_DOWN 5073L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_JOIN_ABORTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster join operation was aborted.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_JOIN_ABORTED       5074L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_INCOMPATIBLE_VERSIONS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster join operation failed due to incompatible software versions between the joining node and its sponsor.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_INCOMPATIBLE_VERSIONS 5075L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_MAXNUM_OF_RESOURCES_EXCEEDED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' This resource cannot be created because the cluster has reached the limit on the number of resources it can monitor.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_MAXNUM_OF_RESOURCES_EXCEEDED 5076L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_SYSTEM_CONFIG_CHANGED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The system configuration changed during the cluster join or form operation. The join or form operation was aborted.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_SYSTEM_CONFIG_CHANGED 5077L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_RESOURCE_TYPE_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified resource type was not found.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_RESOURCE_TYPE_NOT_FOUND 5078L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_RESTYPE_NOT_SUPPORTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified node does not support a resource of this type.  This may be due to version inconsistencies or due to the absence of the resource DLL on this node.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_RESTYPE_NOT_SUPPORTED 5079L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_RESNAME_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified resource name is not supported by this resource DLL. This may be due to a bad (or changed) name supplied to the resource DLL.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_RESNAME_NOT_FOUND  5080L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_NO_RPC_PACKAGES_REGISTERED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' No authentication package could be registered with the RPC server.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_NO_RPC_PACKAGES_REGISTERED 5081L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_OWNER_NOT_IN_PREFLIST
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' You cannot bring the group online because the owner of the group is not in the preferred list for the group. To change the owner node for the group, move the group.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_OWNER_NOT_IN_PREFLIST 5082L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_DATABASE_SEQMISMATCH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The join operation failed because the cluster database sequence number has changed or is incompatible with the locker node. This may happen during a join operation if the cluster database was changing during the join.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_DATABASE_SEQMISMATCH 5083L

				// '                    ' ''
				// '                    ''MessageId: ERROR_RESMON_INVALID_STATE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The resource monitor will not allow the fail operation to be performed while the resource is in its current state. This may happen if the resource is in a pending state.
				// '                    ' ''
				// '                    ''const ERROR_RESMON_INVALID_STATE       5084L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_GUM_NOT_LOCKER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A non locker code got a request to reserve the lock for making global updates.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_GUM_NOT_LOCKER     5085L

				// '                    ' ''
				// '                    ''MessageId: ERROR_QUORUM_DISK_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The quorum disk could not be located by the cluster service.
				// '                    ' ''
				// '                    ''const ERROR_QUORUM_DISK_NOT_FOUND      5086L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DATABASE_BACKUP_CORRUPT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The backed up cluster database is possibly corrupt.
				// '                    ' ''
				// '                    ''const ERROR_DATABASE_BACKUP_CORRUPT    5087L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_NODE_ALREADY_HAS_DFS_ROOT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A DFS root already exists in this cluster node.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_NODE_ALREADY_HAS_DFS_ROOT 5088L

				// '                    ' ''
				// '                    ''MessageId: ERROR_RESOURCE_PROPERTY_UNCHANGEABLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An attempt to modify a resource property failed because it conflicts with another existing property.
				// '                    ' ''
				// '                    ''const ERROR_RESOURCE_PROPERTY_UNCHANGEABLE 5089L

				// '                    ''/*
				// '                    '' Codes from 4300 through 5889 overlap with codes in ds\published\inc\apperr2.w.
				// '                    '' Do not add any more error codes in that range.
				// '                    ''*/
				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_MEMBERSHIP_INVALID_STATE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An operation was attempted that is incompatible with the current membership state of the node.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_MEMBERSHIP_INVALID_STATE 5890L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_QUORUMLOG_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The quorum resource does not contain the quorum log.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_QUORUMLOG_NOT_FOUND 5891L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_MEMBERSHIP_HALT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The membership engine requested shutdown of the cluster service on this node.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_MEMBERSHIP_HALT    5892L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_INSTANCE_ID_MISMATCH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The join operation failed because the cluster instance ID of the joining node does not match the cluster instance ID of the sponsor node.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_INSTANCE_ID_MISMATCH 5893L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_NETWORK_NOT_FOUND_FOR_IP
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A matching network for the specified IP address could not be found. Please also specify a subnet mask and a cluster network.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_NETWORK_NOT_FOUND_FOR_IP 5894L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_PROPERTY_DATA_TYPE_MISMATCH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The actual data type of the property did not match the expected data type of the property.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_PROPERTY_DATA_TYPE_MISMATCH 5895L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_EVICT_WITHOUT_CLEANUP
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster node was evicted from the cluster successfully, but the node was not cleaned up.  Extended status information explaining why the node was not cleaned up is available.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_EVICT_WITHOUT_CLEANUP 5896L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_PARAMETER_MISMATCH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Two or more parameter values specified for a resource's properties are in conflict.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_PARAMETER_MISMATCH 5897L

				// '                    ' ''
				// '                    ''MessageId: ERROR_NODE_CANNOT_BE_CLUSTERED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' This computer cannot be made a member of a cluster.
				// '                    ' ''
				// '                    ''const ERROR_NODE_CANNOT_BE_CLUSTERED   5898L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_WRONG_OS_VERSION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' This computer cannot be made a member of a cluster because it does not have the correct version of Windows installed.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_WRONG_OS_VERSION   5899L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_CANT_CREATE_DUP_CLUSTER_NAME
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A cluster cannot be created with the specified cluster name because that cluster name is already in use. Specify a different name for the cluster.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_CANT_CREATE_DUP_CLUSTER_NAME 5900L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSCFG_ALREADY_COMMITTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster configuration action has already been committed.
				// '                    ' ''
				// '                    ''const ERROR_CLUSCFG_ALREADY_COMMITTED  5901L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSCFG_ROLLBACK_FAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cluster configuration action could not be rolled back.
				// '                    ' ''
				// '                    ''const ERROR_CLUSCFG_ROLLBACK_FAILED    5902L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSCFG_SYSTEM_DISK_DRIVE_LETTER_CONFLICT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The drive letter assigned to a system disk on one node conflicted with the drive letter assigned to a disk on another node.
				// '                    ' ''
				// '                    ''const ERROR_CLUSCFG_SYSTEM_DISK_DRIVE_LETTER_CONFLICT 5903L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_OLD_VERSION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' One or more nodes in the cluster are running a version of Windows that does not support this operation.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_OLD_VERSION        5904L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CLUSTER_MISMATCHED_COMPUTER_ACCT_NAME
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The name of the corresponding computer account doesn't match the Network Name for this resource.
				// '                    ' ''
				// '                    ''const ERROR_CLUSTER_MISMATCHED_COMPUTER_ACCT_NAME 5905L

				// '                    ''''''''''''''''''''
				// '                    ''                               '
				// '                    ''    EFS Error Codes            '
				// '                    ''                               '
				// '                    ''''''''''''''''''''
				// '                    ' ''
				// '                    ''MessageId: ERROR_ENCRYPTION_FAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified file could not be encrypted.
				// '                    ' ''
				// '                    ''const ERROR_ENCRYPTION_FAILED          6000L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DECRYPTION_FAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified file could not be decrypted.
				// '                    ' ''
				// '                    ''const ERROR_DECRYPTION_FAILED          6001L

				// '                    ' ''
				// '                    ''MessageId: ERROR_FILE_ENCRYPTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified file is encrypted and the user does not have the ability to decrypt it.
				// '                    ' ''
				// '                    ''const ERROR_FILE_ENCRYPTED             6002L

				// '                    ' ''
				// '                    ''MessageId: ERROR_NO_RECOVERY_POLICY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' There is no valid encryption recovery policy configured for this system.
				// '                    ' ''
				// '                    ''const ERROR_NO_RECOVERY_POLICY         6003L

				// '                    ' ''
				// '                    ''MessageId: ERROR_NO_EFS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The required encryption driver is not loaded for this system.
				// '                    ' ''
				// '                    ''const ERROR_NO_EFS                     6004L

				// '                    ' ''
				// '                    ''MessageId: ERROR_WRONG_EFS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The file was encrypted with a different encryption driver than is currently loaded.
				// '                    ' ''
				// '                    ''const ERROR_WRONG_EFS                  6005L

				// '                    ' ''
				// '                    ''MessageId: ERROR_NO_USER_KEYS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' There are no EFS keys defined for the user.
				// '                    ' ''
				// '                    ''const ERROR_NO_USER_KEYS               6006L

				// '                    ' ''
				// '                    ''MessageId: ERROR_FILE_NOT_ENCRYPTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified file is not encrypted.
				// '                    ' ''
				// '                    ''const ERROR_FILE_NOT_ENCRYPTED         6007L

				// '                    ' ''
				// '                    ''MessageId: ERROR_NOT_EXPORT_FORMAT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified file is not in the defined EFS export format.
				// '                    ' ''
				// '                    ''const ERROR_NOT_EXPORT_FORMAT          6008L

				// '                    ' ''
				// '                    ''MessageId: ERROR_FILE_READ_ONLY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified file is read only.
				// '                    ' ''
				// '                    ''const ERROR_FILE_READ_ONLY             6009L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DIR_EFS_DISALLOWED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The directory has been disabled for encryption.
				// '                    ' ''
				// '                    ''const ERROR_DIR_EFS_DISALLOWED         6010L

				// '                    ' ''
				// '                    ''MessageId: ERROR_EFS_SERVER_NOT_TRUSTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The server is not trusted for remote encryption operation.
				// '                    ' ''
				// '                    ''const ERROR_EFS_SERVER_NOT_TRUSTED     6011L

				// '                    ' ''
				// '                    ''MessageId: ERROR_BAD_RECOVERY_POLICY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Recovery policy configured for this system contains invalid recovery certificate.
				// '                    ' ''
				// '                    ''const ERROR_BAD_RECOVERY_POLICY        6012L

				// '                    ' ''
				// '                    ''MessageId: ERROR_EFS_ALG_BLOB_TOO_BIG
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The encryption algorithm used on the source file needs a bigger key buffer than the one on the destination file.
				// '                    ' ''
				// '                    ''const ERROR_EFS_ALG_BLOB_TOO_BIG       6013L

				// '                    ' ''
				// '                    ''MessageId: ERROR_VOLUME_NOT_SUPPORT_EFS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The disk partition does not support file encryption.
				// '                    ' ''
				// '                    ''const ERROR_VOLUME_NOT_SUPPORT_EFS     6014L

				// '                    ' ''
				// '                    ''MessageId: ERROR_EFS_DISABLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' This machine is disabled for file encryption.
				// '                    ' ''
				// '                    ''const ERROR_EFS_DISABLED               6015L

				// '                    ' ''
				// '                    ''MessageId: ERROR_EFS_VERSION_NOT_SUPPORT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A newer system is required to decrypt this encrypted file.
				// '                    ' ''
				// '                    ''const ERROR_EFS_VERSION_NOT_SUPPORT    6016L

				// '                    ''This message number is for historical purposes and cannot be changed or re-used.
				// '                    ' ''
				// '                    ''MessageId: ERROR_NO_BROWSER_SERVERS_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The list of servers for this workgroup is not currently available
				// '                    ' ''
				// '                    ''const ERROR_NO_BROWSER_SERVERS_FOUND   6118L

				// '                    '''''''''''''''''''''''''''''''''''
				// '                    ''                                                             '
				// '                    ''Task Scheduler Error Codes that NET START must understand    '
				// '                    ''                                                             '
				// '                    '''''''''''''''''''''''''''''''''''
				// '                    ' ''
				// '                    ''MessageId: SCHED_E_SERVICE_NOT_LOCALSYSTEM
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The Task Scheduler service must be configured to run in the System account to function properly.  Individual tasks may be configured to run in other accounts.
				// '                    ' ''
				// '                    ''const SCHED_E_SERVICE_NOT_LOCALSYSTEM  6200L

				// '                    ''''''''''''''''''''
				// '                    ''                               '
				// '                    ''Terminal Server Error Codes    '
				// '                    ''                               '
				// '                    ''''''''''''''''''''
				// '                    ' ''
				// '                    ''MessageId: ERROR_CTX_WINSTATION_NAME_INVALID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified session name is invalid.
				// '                    ' ''
				// '                    ''const ERROR_CTX_WINSTATION_NAME_INVALID 7001L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CTX_INVALID_PD
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified protocol driver is invalid.
				// '                    ' ''
				// '                    ''const ERROR_CTX_INVALID_PD             7002L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CTX_PD_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified protocol driver was not found in the system path.
				// '                    ' ''
				// '                    ''const ERROR_CTX_PD_NOT_FOUND           7003L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CTX_WD_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified terminal connection driver was not found in the system path.
				// '                    ' ''
				// '                    ''const ERROR_CTX_WD_NOT_FOUND           7004L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CTX_CANNOT_MAKE_EVENTLOG_ENTRY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A registry key for event logging could not be created for this session.
				// '                    ' ''
				// '                    ''const ERROR_CTX_CANNOT_MAKE_EVENTLOG_ENTRY 7005L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CTX_SERVICE_NAME_COLLISION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A service with the same name already exists on the system.
				// '                    ' ''
				// '                    ''const ERROR_CTX_SERVICE_NAME_COLLISION 7006L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CTX_CLOSE_PENDING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A close operation is pending on the session.
				// '                    ' ''
				// '                    ''const ERROR_CTX_CLOSE_PENDING          7007L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CTX_NO_OUTBUF
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' There are no free output buffers available.
				// '                    ' ''
				// '                    ''const ERROR_CTX_NO_OUTBUF              7008L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CTX_MODEM_INF_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The MODEM.INF file was not found.
				// '                    ' ''
				// '                    ''const ERROR_CTX_MODEM_INF_NOT_FOUND    7009L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CTX_INVALID_MODEMNAME
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The modem name was not found in MODEM.INF.
				// '                    ' ''
				// '                    ''const ERROR_CTX_INVALID_MODEMNAME      7010L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CTX_MODEM_RESPONSE_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The modem did not accept the command sent to it. Verify that the configured modem name matches the attached modem.
				// '                    ' ''
				// '                    ''const ERROR_CTX_MODEM_RESPONSE_ERROR   7011L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CTX_MODEM_RESPONSE_TIMEOUT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The modem did not respond to the command sent to it. Verify that the modem is properly cabled and powered on.
				// '                    ' ''
				// '                    ''const ERROR_CTX_MODEM_RESPONSE_TIMEOUT 7012L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CTX_MODEM_RESPONSE_NO_CARRIER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Carrier detect has failed or carrier has been dropped due to disconnect.
				// '                    ' ''
				// '                    ''const ERROR_CTX_MODEM_RESPONSE_NO_CARRIER 7013L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CTX_MODEM_RESPONSE_NO_DIALTONE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Dial tone not detected within the required time. Verify that the phone cable is properly attached and functional.
				// '                    ' ''
				// '                    ''const ERROR_CTX_MODEM_RESPONSE_NO_DIALTONE 7014L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CTX_MODEM_RESPONSE_BUSY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Busy signal detected at remote site on callback.
				// '                    ' ''
				// '                    ''const ERROR_CTX_MODEM_RESPONSE_BUSY    7015L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CTX_MODEM_RESPONSE_VOICE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Voice detected at remote site on callback.
				// '                    ' ''
				// '                    ''const ERROR_CTX_MODEM_RESPONSE_VOICE   7016L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CTX_TD_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Transport driver error
				// '                    ' ''
				// '                    ''const ERROR_CTX_TD_ERROR               7017L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CTX_WINSTATION_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified session cannot be found.
				// '                    ' ''
				// '                    ''const ERROR_CTX_WINSTATION_NOT_FOUND   7022L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CTX_WINSTATION_ALREADY_EXISTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified session name is already in use.
				// '                    ' ''
				// '                    ''const ERROR_CTX_WINSTATION_ALREADY_EXISTS 7023L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CTX_WINSTATION_BUSY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested operation cannot be completed because the terminal connection is currently busy processing a connect, disconnect, reset, or delete operation.
				// '                    ' ''
				// '                    ''const ERROR_CTX_WINSTATION_BUSY        7024L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CTX_BAD_VIDEO_MODE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An attempt has been made to connect to a session whose video mode is not supported by the current client.
				// '                    ' ''
				// '                    ''const ERROR_CTX_BAD_VIDEO_MODE         7025L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CTX_GRAPHICS_INVALID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The application attempted to enable DOS graphics mode.
				// '                    '' DOS graphics mode is not supported.
				// '                    ' ''
				// '                    ''const ERROR_CTX_GRAPHICS_INVALID       7035L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CTX_LOGON_DISABLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Your interactive logon privilege has been disabled.
				// '                    '' Please contact your administrator.
				// '                    ' ''
				// '                    ''const ERROR_CTX_LOGON_DISABLED         7037L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CTX_NOT_CONSOLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested operation can be performed only on the system console.
				// '                    '' This is most often the result of a driver or system DLL requiring direct console access.
				// '                    ' ''
				// '                    ''const ERROR_CTX_NOT_CONSOLE            7038L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CTX_CLIENT_QUERY_TIMEOUT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The client failed to respond to the server connect message.
				// '                    ' ''
				// '                    ''const ERROR_CTX_CLIENT_QUERY_TIMEOUT   7040L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CTX_CONSOLE_DISCONNECT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Disconnecting the console session is not supported.
				// '                    ' ''
				// '                    ''const ERROR_CTX_CONSOLE_DISCONNECT     7041L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CTX_CONSOLE_CONNECT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Reconnecting a disconnected session to the console is not supported.
				// '                    ' ''
				// '                    ''const ERROR_CTX_CONSOLE_CONNECT        7042L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CTX_SHADOW_DENIED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The request to control another session remotely was denied.
				// '                    ' ''
				// '                    ''const ERROR_CTX_SHADOW_DENIED          7044L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CTX_WINSTATION_ACCESS_DENIED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested session access is denied.
				// '                    ' ''
				// '                    ''const ERROR_CTX_WINSTATION_ACCESS_DENIED 7045L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CTX_INVALID_WD
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified terminal connection driver is invalid.
				// '                    ' ''
				// '                    ''const ERROR_CTX_INVALID_WD             7049L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CTX_SHADOW_INVALID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested session cannot be controlled remotely.
				// '                    '' This may be because the session is disconnected or does not currently have a user logged on.
				// '                    ' ''
				// '                    ''const ERROR_CTX_SHADOW_INVALID         7050L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CTX_SHADOW_DISABLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested session is not configured to allow remote control.
				// '                    ' ''
				// '                    ''const ERROR_CTX_SHADOW_DISABLED        7051L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CTX_CLIENT_LICENSE_IN_USE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Your request to connect to this Terminal Server has been rejected. Your Terminal Server client license number is currently being used by another user.
				// '                    '' Please call your system administrator to obtain a unique license number.
				// '                    ' ''
				// '                    ''const ERROR_CTX_CLIENT_LICENSE_IN_USE  7052L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CTX_CLIENT_LICENSE_NOT_SET
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Your request to connect to this Terminal Server has been rejected. Your Terminal Server client license number has not been entered for this copy of the Terminal Server client.
				// '                    '' Please contact your system administrator.
				// '                    ' ''
				// '                    ''const ERROR_CTX_CLIENT_LICENSE_NOT_SET 7053L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CTX_LICENSE_NOT_AVAILABLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The system has reached its licensed logon limit.
				// '                    '' Please try again later.
				// '                    ' ''
				// '                    ''const ERROR_CTX_LICENSE_NOT_AVAILABLE  7054L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CTX_LICENSE_CLIENT_INVALID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The client you are using is not licensed to use this system.  Your logon request is denied.
				// '                    ' ''
				// '                    ''const ERROR_CTX_LICENSE_CLIENT_INVALID 7055L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CTX_LICENSE_EXPIRED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The system license has expired.  Your logon request is denied.
				// '                    ' ''
				// '                    ''const ERROR_CTX_LICENSE_EXPIRED        7056L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CTX_SHADOW_NOT_RUNNING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Remote control could not be terminated because the specified session is not currently being remotely controlled.
				// '                    ' ''
				// '                    ''const ERROR_CTX_SHADOW_NOT_RUNNING     7057L

				// '                    ' ''
				// '                    ''MessageId: ERROR_CTX_SHADOW_ENDED_BY_MODE_CHANGE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The remote control of the console was terminated because the display mode was changed. Changing the display mode in a remote control session is not supported.
				// '                    ' ''
				// '                    ''const ERROR_CTX_SHADOW_ENDED_BY_MODE_CHANGE 7058L

				// '                    ' ''
				// '                    ''MessageId: ERROR_ACTIVATION_COUNT_EXCEEDED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Activation has already been reset the maximum number of times for this installation. Your activation timer will not be cleared.
				// '                    ' ''
				// '                    ''const ERROR_ACTIVATION_COUNT_EXCEEDED  7059L

				// '                    '''''''''''''''''''''''''''/
				// '                    ''                                               /
				// '                    ''            Traffic Control Error Codes        /
				// '                    ''                                               /
				// '                    ''                 7500 to  7999                 /
				// '                    ''                                               /
				// '                    ''        defined in: tcerror.h                  /
				// '                    '''''''''''''''''''''''''''/
				// '                    '''''''''''''''''''''''''''/
				// '                    ''                                               /
				// '                    ''            Active Directory Error Codes       /
				// '                    ''                                               /
				// '                    ''                 8000 to  8999                 /
				// '                    '''''''''''''''''''''''''''/
				// '                    ''*****************
				// '                    ''FACILITY_FILE_REPLICATION_SERVICE
				// '                    ''*****************
				// '                    ' ''
				// '                    ''MessageId: FRS_ERR_INVALID_API_SEQUENCE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The file replication service API was called incorrectly.
				// '                    ' ''
				// '                    ''const FRS_ERR_INVALID_API_SEQUENCE     8001L

				// '                    ' ''
				// '                    ''MessageId: FRS_ERR_STARTING_SERVICE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The file replication service cannot be started.
				// '                    ' ''
				// '                    ''const FRS_ERR_STARTING_SERVICE         8002L

				// '                    ' ''
				// '                    ''MessageId: FRS_ERR_STOPPING_SERVICE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The file replication service cannot be stopped.
				// '                    ' ''
				// '                    ''const FRS_ERR_STOPPING_SERVICE         8003L

				// '                    ' ''
				// '                    ''MessageId: FRS_ERR_INTERNAL_API
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The file replication service API terminated the request.
				// '                    '' The event log may have more information.
				// '                    ' ''
				// '                    ''const FRS_ERR_INTERNAL_API             8004L

				// '                    ' ''
				// '                    ''MessageId: FRS_ERR_INTERNAL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The file replication service terminated the request.
				// '                    '' The event log may have more information.
				// '                    ' ''
				// '                    ''const FRS_ERR_INTERNAL                 8005L

				// '                    ' ''
				// '                    ''MessageId: FRS_ERR_SERVICE_COMM
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The file replication service cannot be contacted.
				// '                    '' The event log may have more information.
				// '                    ' ''
				// '                    ''const FRS_ERR_SERVICE_COMM             8006L

				// '                    ' ''
				// '                    ''MessageId: FRS_ERR_INSUFFICIENT_PRIV
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The file replication service cannot satisfy the request because the user has insufficient privileges.
				// '                    '' The event log may have more information.
				// '                    ' ''
				// '                    ''const FRS_ERR_INSUFFICIENT_PRIV        8007L

				// '                    ' ''
				// '                    ''MessageId: FRS_ERR_AUTHENTICATION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The file replication service cannot satisfy the request because authenticated RPC is not available.
				// '                    '' The event log may have more information.
				// '                    ' ''
				// '                    ''const FRS_ERR_AUTHENTICATION           8008L

				// '                    ' ''
				// '                    ''MessageId: FRS_ERR_PARENT_INSUFFICIENT_PRIV
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The file replication service cannot satisfy the request because the user has insufficient privileges on the domain controller.
				// '                    '' The event log may have more information.
				// '                    ' ''
				// '                    ''const FRS_ERR_PARENT_INSUFFICIENT_PRIV 8009L

				// '                    ' ''
				// '                    ''MessageId: FRS_ERR_PARENT_AUTHENTICATION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The file replication service cannot satisfy the request because authenticated RPC is not available on the domain controller.
				// '                    '' The event log may have more information.
				// '                    ' ''
				// '                    ''const FRS_ERR_PARENT_AUTHENTICATION    8010L

				// '                    ' ''
				// '                    ''MessageId: FRS_ERR_CHILD_TO_PARENT_COMM
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The file replication service cannot communicate with the file replication service on the domain controller.
				// '                    '' The event log may have more information.
				// '                    ' ''
				// '                    ''const FRS_ERR_CHILD_TO_PARENT_COMM     8011L

				// '                    ' ''
				// '                    ''MessageId: FRS_ERR_PARENT_TO_CHILD_COMM
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The file replication service on the domain controller cannot communicate with the file replication service on this computer.
				// '                    '' The event log may have more information.
				// '                    ' ''
				// '                    ''const FRS_ERR_PARENT_TO_CHILD_COMM     8012L

				// '                    ' ''
				// '                    ''MessageId: FRS_ERR_SYSVOL_POPULATE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The file replication service cannot populate the system volume because of an internal error.
				// '                    '' The event log may have more information.
				// '                    ' ''
				// '                    ''const FRS_ERR_SYSVOL_POPULATE          8013L

				// '                    ' ''
				// '                    ''MessageId: FRS_ERR_SYSVOL_POPULATE_TIMEOUT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The file replication service cannot populate the system volume because of an internal timeout.
				// '                    '' The event log may have more information.
				// '                    ' ''
				// '                    ''const FRS_ERR_SYSVOL_POPULATE_TIMEOUT  8014L

				// '                    ' ''
				// '                    ''MessageId: FRS_ERR_SYSVOL_IS_BUSY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The file replication service cannot process the request. The system volume is busy with a previous request.
				// '                    ' ''
				// '                    ''const FRS_ERR_SYSVOL_IS_BUSY           8015L

				// '                    ' ''
				// '                    ''MessageId: FRS_ERR_SYSVOL_DEMOTE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The file replication service cannot stop replicating the system volume because of an internal error.
				// '                    '' The event log may have more information.
				// '                    ' ''
				// '                    ''const FRS_ERR_SYSVOL_DEMOTE            8016L

				// '                    ' ''
				// '                    ''MessageId: FRS_ERR_INVALID_SERVICE_PARAMETER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The file replication service detected an invalid parameter.
				// '                    ' ''
				// '                    ''const FRS_ERR_INVALID_SERVICE_PARAMETER 8017L

				// '                    ''*****************
				// '                    ''FACILITY DIRECTORY SERVICE
				// '                    ''*****************
				// '                    ''const DS_S_SUCCESS NO_ERROR
				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NOT_INSTALLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An error occurred while installing the directory service. For more information, see the event log.
				// '                    ' ''
				// '                    ''const ERROR_DS_NOT_INSTALLED           8200L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_MEMBERSHIP_EVALUATED_LOCALLY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The directory service evaluated group memberships locally.
				// '                    ' ''
				// '                    ''const ERROR_DS_MEMBERSHIP_EVALUATED_LOCALLY 8201L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NO_ATTRIBUTE_OR_VALUE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified directory service attribute or value does not exist.
				// '                    ' ''
				// '                    ''const ERROR_DS_NO_ATTRIBUTE_OR_VALUE   8202L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_INVALID_ATTRIBUTE_SYNTAX
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The attribute syntax specified to the directory service is invalid.
				// '                    ' ''
				// '                    ''const ERROR_DS_INVALID_ATTRIBUTE_SYNTAX 8203L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_ATTRIBUTE_TYPE_UNDEFINED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The attribute type specified to the directory service is not defined.
				// '                    ' ''
				// '                    ''const ERROR_DS_ATTRIBUTE_TYPE_UNDEFINED 8204L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_ATTRIBUTE_OR_VALUE_EXISTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified directory service attribute or value already exists.
				// '                    ' ''
				// '                    ''const ERROR_DS_ATTRIBUTE_OR_VALUE_EXISTS 8205L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_BUSY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The directory service is busy.
				// '                    ' ''
				// '                    ''const ERROR_DS_BUSY                    8206L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_UNAVAILABLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The directory service is unavailable.
				// '                    ' ''
				// '                    ''const ERROR_DS_UNAVAILABLE             8207L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NO_RIDS_ALLOCATED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The directory service was unable to allocate a relative identifier.
				// '                    ' ''
				// '                    ''const ERROR_DS_NO_RIDS_ALLOCATED       8208L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NO_MORE_RIDS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The directory service has exhausted the pool of relative identifiers.
				// '                    ' ''
				// '                    ''const ERROR_DS_NO_MORE_RIDS            8209L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_INCORRECT_ROLE_OWNER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested operation could not be performed because the directory service is not the master for that type of operation.
				// '                    ' ''
				// '                    ''const ERROR_DS_INCORRECT_ROLE_OWNER    8210L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_RIDMGR_INIT_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The directory service was unable to initialize the subsystem that allocates relative identifiers.
				// '                    ' ''
				// '                    ''const ERROR_DS_RIDMGR_INIT_ERROR       8211L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_OBJ_CLASS_VIOLATION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested operation did not satisfy one or more constraints associated with the class of the object.
				// '                    ' ''
				// '                    ''const ERROR_DS_OBJ_CLASS_VIOLATION     8212L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CANT_ON_NON_LEAF
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The directory service can perform the requested operation only on a leaf object.
				// '                    ' ''
				// '                    ''const ERROR_DS_CANT_ON_NON_LEAF        8213L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CANT_ON_RDN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The directory service cannot perform the requested operation on the RDN attribute of an object.
				// '                    ' ''
				// '                    ''const ERROR_DS_CANT_ON_RDN             8214L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CANT_MOD_OBJ_CLASS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The directory service detected an attempt to modify the object class of an object.
				// '                    ' ''
				// '                    ''const ERROR_DS_CANT_MOD_OBJ_CLASS      8215L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CROSS_DOM_MOVE_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested cross-domain move operation could not be performed.
				// '                    ' ''
				// '                    ''const ERROR_DS_CROSS_DOM_MOVE_ERROR    8216L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_GC_NOT_AVAILABLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unable to contact the global catalog server.
				// '                    ' ''
				// '                    ''const ERROR_DS_GC_NOT_AVAILABLE        8217L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SHARED_POLICY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The policy object is shared and can only be modified at the root.
				// '                    ' ''
				// '                    ''const ERROR_SHARED_POLICY              8218L

				// '                    ' ''
				// '                    ''MessageId: ERROR_POLICY_OBJECT_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The policy object does not exist.
				// '                    ' ''
				// '                    ''const ERROR_POLICY_OBJECT_NOT_FOUND    8219L

				// '                    ' ''
				// '                    ''MessageId: ERROR_POLICY_ONLY_IN_DS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested policy information is only in the directory service.
				// '                    ' ''
				// '                    ''const ERROR_POLICY_ONLY_IN_DS          8220L

				// '                    ' ''
				// '                    ''MessageId: ERROR_PROMOTION_ACTIVE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A domain controller promotion is currently active.
				// '                    ' ''
				// '                    ''const ERROR_PROMOTION_ACTIVE           8221L

				// '                    ' ''
				// '                    ''MessageId: ERROR_NO_PROMOTION_ACTIVE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A domain controller promotion is not currently active
				// '                    ' ''
				// '                    ''const ERROR_NO_PROMOTION_ACTIVE        8222L

				// '                    ''8223 unused
				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_OPERATIONS_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An operations error occurred.
				// '                    ' ''
				// '                    ''const ERROR_DS_OPERATIONS_ERROR        8224L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_PROTOCOL_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A protocol error occurred.
				// '                    ' ''
				// '                    ''const ERROR_DS_PROTOCOL_ERROR          8225L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_TIMELIMIT_EXCEEDED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The time limit for this request was exceeded.
				// '                    ' ''
				// '                    ''const ERROR_DS_TIMELIMIT_EXCEEDED      8226L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_SIZELIMIT_EXCEEDED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The size limit for this request was exceeded.
				// '                    ' ''
				// '                    ''const ERROR_DS_SIZELIMIT_EXCEEDED      8227L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_ADMIN_LIMIT_EXCEEDED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The administrative limit for this request was exceeded.
				// '                    ' ''
				// '                    ''const ERROR_DS_ADMIN_LIMIT_EXCEEDED    8228L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_COMPARE_FALSE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The compare response was false.
				// '                    ' ''
				// '                    ''const ERROR_DS_COMPARE_FALSE           8229L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_COMPARE_TRUE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The compare response was true.
				// '                    ' ''
				// '                    ''const ERROR_DS_COMPARE_TRUE            8230L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_AUTH_METHOD_NOT_SUPPORTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested authentication method is not supported by the server.
				// '                    ' ''
				// '                    ''const ERROR_DS_AUTH_METHOD_NOT_SUPPORTED 8231L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_STRONG_AUTH_REQUIRED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A more secure authentication method is required for this server.
				// '                    ' ''
				// '                    ''const ERROR_DS_STRONG_AUTH_REQUIRED    8232L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_INAPPROPRIATE_AUTH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Inappropriate authentication.
				// '                    ' ''
				// '                    ''const ERROR_DS_INAPPROPRIATE_AUTH      8233L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_AUTH_UNKNOWN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The authentication mechanism is unknown.
				// '                    ' ''
				// '                    ''const ERROR_DS_AUTH_UNKNOWN            8234L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_REFERRAL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A referral was returned from the server.
				// '                    ' ''
				// '                    ''const ERROR_DS_REFERRAL                8235L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_UNAVAILABLE_CRIT_EXTENSION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The server does not support the requested critical extension.
				// '                    ' ''
				// '                    ''const ERROR_DS_UNAVAILABLE_CRIT_EXTENSION 8236L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CONFIDENTIALITY_REQUIRED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' This request requires a secure connection.
				// '                    ' ''
				// '                    ''const ERROR_DS_CONFIDENTIALITY_REQUIRED 8237L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_INAPPROPRIATE_MATCHING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Inappropriate matching.
				// '                    ' ''
				// '                    ''const ERROR_DS_INAPPROPRIATE_MATCHING  8238L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CONSTRAINT_VIOLATION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A constraint violation occurred.
				// '                    ' ''
				// '                    ''const ERROR_DS_CONSTRAINT_VIOLATION    8239L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NO_SUCH_OBJECT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' There is no such object on the server.
				// '                    ' ''
				// '                    ''const ERROR_DS_NO_SUCH_OBJECT          8240L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_ALIAS_PROBLEM
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' There is an alias problem.
				// '                    ' ''
				// '                    ''const ERROR_DS_ALIAS_PROBLEM           8241L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_INVALID_DN_SYNTAX
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An invalid dn syntax has been specified.
				// '                    ' ''
				// '                    ''const ERROR_DS_INVALID_DN_SYNTAX       8242L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_IS_LEAF
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The object is a leaf object.
				// '                    ' ''
				// '                    ''const ERROR_DS_IS_LEAF                 8243L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_ALIAS_DEREF_PROBLEM
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' There is an alias dereferencing problem.
				// '                    ' ''
				// '                    ''const ERROR_DS_ALIAS_DEREF_PROBLEM     8244L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_UNWILLING_TO_PERFORM
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The server is unwilling to process the request.
				// '                    ' ''
				// '                    ''const ERROR_DS_UNWILLING_TO_PERFORM    8245L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_LOOP_DETECT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A loop has been detected.
				// '                    ' ''
				// '                    ''const ERROR_DS_LOOP_DETECT             8246L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NAMING_VIOLATION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' There is a naming violation.
				// '                    ' ''
				// '                    ''const ERROR_DS_NAMING_VIOLATION        8247L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_OBJECT_RESULTS_TOO_LARGE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The result set is too large.
				// '                    ' ''
				// '                    ''const ERROR_DS_OBJECT_RESULTS_TOO_LARGE 8248L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_AFFECTS_MULTIPLE_DSAS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The operation affects multiple DSAs
				// '                    ' ''
				// '                    ''const ERROR_DS_AFFECTS_MULTIPLE_DSAS   8249L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_SERVER_DOWN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The server is not operational.
				// '                    ' ''
				// '                    ''const ERROR_DS_SERVER_DOWN             8250L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_LOCAL_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A local error has occurred.
				// '                    ' ''
				// '                    ''const ERROR_DS_LOCAL_ERROR             8251L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_ENCODING_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An encoding error has occurred.
				// '                    ' ''
				// '                    ''const ERROR_DS_ENCODING_ERROR          8252L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DECODING_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A decoding error has occurred.
				// '                    ' ''
				// '                    ''const ERROR_DS_DECODING_ERROR          8253L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_FILTER_UNKNOWN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The search filter cannot be recognized.
				// '                    ' ''
				// '                    ''const ERROR_DS_FILTER_UNKNOWN          8254L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_PARAM_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' One or more parameters are illegal.
				// '                    ' ''
				// '                    ''const ERROR_DS_PARAM_ERROR             8255L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NOT_SUPPORTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified method is not supported.
				// '                    ' ''
				// '                    ''const ERROR_DS_NOT_SUPPORTED           8256L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NO_RESULTS_RETURNED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' No results were returned.
				// '                    ' ''
				// '                    ''const ERROR_DS_NO_RESULTS_RETURNED     8257L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CONTROL_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified control is not supported by the server.
				// '                    ' ''
				// '                    ''const ERROR_DS_CONTROL_NOT_FOUND       8258L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CLIENT_LOOP
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A referral loop was detected by the client.
				// '                    ' ''
				// '                    ''const ERROR_DS_CLIENT_LOOP             8259L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_REFERRAL_LIMIT_EXCEEDED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The preset referral limit was exceeded.
				// '                    ' ''
				// '                    ''const ERROR_DS_REFERRAL_LIMIT_EXCEEDED 8260L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_SORT_CONTROL_MISSING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The search requires a SORT control.
				// '                    ' ''
				// '                    ''const ERROR_DS_SORT_CONTROL_MISSING    8261L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_OFFSET_RANGE_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The search results exceed the offset range specified.
				// '                    ' ''
				// '                    ''const ERROR_DS_OFFSET_RANGE_ERROR      8262L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_ROOT_MUST_BE_NC
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The root object must be the head of a naming context. The root object cannot have an instantiated parent.
				// '                    ' ''
				// '                    ''const ERROR_DS_ROOT_MUST_BE_NC         8301L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_ADD_REPLICA_INHIBITED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The add replica operation cannot be performed. The naming context must be writeable in order to create the replica.
				// '                    ' ''
				// '                    ''const ERROR_DS_ADD_REPLICA_INHIBITED   8302L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_ATT_NOT_DEF_IN_SCHEMA
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A reference to an attribute that is not defined in the schema occurred.
				// '                    ' ''
				// '                    ''const ERROR_DS_ATT_NOT_DEF_IN_SCHEMA   8303L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_MAX_OBJ_SIZE_EXCEEDED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The maximum size of an object has been exceeded.
				// '                    ' ''
				// '                    ''const ERROR_DS_MAX_OBJ_SIZE_EXCEEDED   8304L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_OBJ_STRING_NAME_EXISTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An attempt was made to add an object to the directory with a name that is already in use.
				// '                    ' ''
				// '                    ''const ERROR_DS_OBJ_STRING_NAME_EXISTS  8305L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NO_RDN_DEFINED_IN_SCHEMA
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An attempt was made to add an object of a class that does not have an RDN defined in the schema.
				// '                    ' ''
				// '                    ''const ERROR_DS_NO_RDN_DEFINED_IN_SCHEMA 8306L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_RDN_DOESNT_MATCH_SCHEMA
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An attempt was made to add an object using an RDN that is not the RDN defined in the schema.
				// '                    ' ''
				// '                    ''const ERROR_DS_RDN_DOESNT_MATCH_SCHEMA 8307L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NO_REQUESTED_ATTS_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' None of the requested attributes were found on the objects.
				// '                    ' ''
				// '                    ''const ERROR_DS_NO_REQUESTED_ATTS_FOUND 8308L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_USER_BUFFER_TO_SMALL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The user buffer is too small.
				// '                    ' ''
				// '                    ''const ERROR_DS_USER_BUFFER_TO_SMALL    8309L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_ATT_IS_NOT_ON_OBJ
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The attribute specified in the operation is not present on the object.
				// '                    ' ''
				// '                    ''const ERROR_DS_ATT_IS_NOT_ON_OBJ       8310L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_ILLEGAL_MOD_OPERATION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Illegal modify operation. Some aspect of the modification is not permitted.
				// '                    ' ''
				// '                    ''const ERROR_DS_ILLEGAL_MOD_OPERATION   8311L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_OBJ_TOO_LARGE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified object is too large.
				// '                    ' ''
				// '                    ''const ERROR_DS_OBJ_TOO_LARGE           8312L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_BAD_INSTANCE_TYPE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified instance type is not valid.
				// '                    ' ''
				// '                    ''const ERROR_DS_BAD_INSTANCE_TYPE       8313L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_MASTERDSA_REQUIRED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The operation must be performed at a master DSA.
				// '                    ' ''
				// '                    ''const ERROR_DS_MASTERDSA_REQUIRED      8314L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_OBJECT_CLASS_REQUIRED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The object class attribute must be specified.
				// '                    ' ''
				// '                    ''const ERROR_DS_OBJECT_CLASS_REQUIRED   8315L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_MISSING_REQUIRED_ATT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A required attribute is missing.
				// '                    ' ''
				// '                    ''const ERROR_DS_MISSING_REQUIRED_ATT    8316L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_ATT_NOT_DEF_FOR_CLASS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An attempt was made to modify an object to include an attribute that is not legal for its class.
				// '                    ' ''
				// '                    ''const ERROR_DS_ATT_NOT_DEF_FOR_CLASS   8317L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_ATT_ALREADY_EXISTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified attribute is already present on the object.
				// '                    ' ''
				// '                    ''const ERROR_DS_ATT_ALREADY_EXISTS      8318L

				// '                    ''8319 unused
				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CANT_ADD_ATT_VALUES
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified attribute is not present, or has no values.
				// '                    ' ''
				// '                    ''const ERROR_DS_CANT_ADD_ATT_VALUES     8320L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_SINGLE_VALUE_CONSTRAINT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Multiple values were specified for an attribute that can have only one value.
				// '                    ' ''
				// '                    ''const ERROR_DS_SINGLE_VALUE_CONSTRAINT 8321L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_RANGE_CONSTRAINT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A value for the attribute was not in the acceptable range of values.
				// '                    ' ''
				// '                    ''const ERROR_DS_RANGE_CONSTRAINT        8322L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_ATT_VAL_ALREADY_EXISTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified value already exists.
				// '                    ' ''
				// '                    ''const ERROR_DS_ATT_VAL_ALREADY_EXISTS  8323L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CANT_REM_MISSING_ATT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The attribute cannot be removed because it is not present on the object.
				// '                    ' ''
				// '                    ''const ERROR_DS_CANT_REM_MISSING_ATT    8324L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CANT_REM_MISSING_ATT_VAL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The attribute value cannot be removed because it is not present on the object.
				// '                    ' ''
				// '                    ''const ERROR_DS_CANT_REM_MISSING_ATT_VAL 8325L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_ROOT_CANT_BE_SUBREF
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified root object cannot be a subref.
				// '                    ' ''
				// '                    ''const ERROR_DS_ROOT_CANT_BE_SUBREF     8326L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NO_CHAINING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Chaining is not permitted.
				// '                    ' ''
				// '                    ''const ERROR_DS_NO_CHAINING             8327L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NO_CHAINED_EVAL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Chained evaluation is not permitted.
				// '                    ' ''
				// '                    ''const ERROR_DS_NO_CHAINED_EVAL         8328L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NO_PARENT_OBJECT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The operation could not be performed because the object's parent is either uninstantiated or deleted.
				// '                    ' ''
				// '                    ''const ERROR_DS_NO_PARENT_OBJECT        8329L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_PARENT_IS_AN_ALIAS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Having a parent that is an alias is not permitted. Aliases are leaf objects.
				// '                    ' ''
				// '                    ''const ERROR_DS_PARENT_IS_AN_ALIAS      8330L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CANT_MIX_MASTER_AND_REPS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The object and parent must be of the same type, either both masters or both replicas.
				// '                    ' ''
				// '                    ''const ERROR_DS_CANT_MIX_MASTER_AND_REPS 8331L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CHILDREN_EXIST
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The operation cannot be performed because child objects exist. This operation can only be performed on a leaf object.
				// '                    ' ''
				// '                    ''const ERROR_DS_CHILDREN_EXIST          8332L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_OBJ_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Directory object not found.
				// '                    ' ''
				// '                    ''const ERROR_DS_OBJ_NOT_FOUND           8333L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_ALIASED_OBJ_MISSING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The aliased object is missing.
				// '                    ' ''
				// '                    ''const ERROR_DS_ALIASED_OBJ_MISSING     8334L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_BAD_NAME_SYNTAX
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The object name has bad syntax.
				// '                    ' ''
				// '                    ''const ERROR_DS_BAD_NAME_SYNTAX         8335L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_ALIAS_POINTS_TO_ALIAS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' It is not permitted for an alias to refer to another alias.
				// '                    ' ''
				// '                    ''const ERROR_DS_ALIAS_POINTS_TO_ALIAS   8336L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CANT_DEREF_ALIAS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The alias cannot be dereferenced.
				// '                    ' ''
				// '                    ''const ERROR_DS_CANT_DEREF_ALIAS        8337L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_OUT_OF_SCOPE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The operation is [Out ] of scope.
				// '                    ' ''
				// '                    ''const ERROR_DS_OUT_OF_SCOPE            8338L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_OBJECT_BEING_REMOVED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The operation cannot continue because the object is in the process of being removed.
				// '                    ' ''
				// '                    ''const ERROR_DS_OBJECT_BEING_REMOVED    8339L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CANT_DELETE_DSA_OBJ
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The DSA object cannot be deleted.
				// '                    ' ''
				// '                    ''const ERROR_DS_CANT_DELETE_DSA_OBJ     8340L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_GENERIC_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A directory service error has occurred.
				// '                    ' ''
				// '                    ''const ERROR_DS_GENERIC_ERROR           8341L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DSA_MUST_BE_INT_MASTER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The operation can only be performed on an internal master DSA object.
				// '                    ' ''
				// '                    ''const ERROR_DS_DSA_MUST_BE_INT_MASTER  8342L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CLASS_NOT_DSA
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The object must be of class DSA.
				// '                    ' ''
				// '                    ''const ERROR_DS_CLASS_NOT_DSA           8343L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_INSUFF_ACCESS_RIGHTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Insufficient access rights to perform the operation.
				// '                    ' ''
				// '                    ''const ERROR_DS_INSUFF_ACCESS_RIGHTS    8344L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_ILLEGAL_SUPERIOR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The object cannot be added because the parent is not on the list of possible superiors.
				// '                    ' ''
				// '                    ''const ERROR_DS_ILLEGAL_SUPERIOR        8345L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_ATTRIBUTE_OWNED_BY_SAM
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Access to the attribute is not permitted because the attribute is owned by the Security Accounts Manager (SAM).
				// '                    ' ''
				// '                    ''const ERROR_DS_ATTRIBUTE_OWNED_BY_SAM  8346L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NAME_TOO_MANY_PARTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The name has too many parts.
				// '                    ' ''
				// '                    ''const ERROR_DS_NAME_TOO_MANY_PARTS     8347L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NAME_TOO_LONG
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The name is too long.
				// '                    ' ''
				// '                    ''const ERROR_DS_NAME_TOO_LONG           8348L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NAME_VALUE_TOO_LONG
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The name value is too long.
				// '                    ' ''
				// '                    ''const ERROR_DS_NAME_VALUE_TOO_LONG     8349L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NAME_UNPARSEABLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The directory service encountered an error parsing a name.
				// '                    ' ''
				// '                    ''const ERROR_DS_NAME_UNPARSEABLE        8350L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NAME_TYPE_UNKNOWN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The directory service cannot get the attribute type for a name.
				// '                    ' ''
				// '                    ''const ERROR_DS_NAME_TYPE_UNKNOWN       8351L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NOT_AN_OBJECT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The name does not identify an object; the name identifies a phantom.
				// '                    ' ''
				// '                    ''const ERROR_DS_NOT_AN_OBJECT           8352L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_SEC_DESC_TOO_SHORT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The security descriptor is too short.
				// '                    ' ''
				// '                    ''const ERROR_DS_SEC_DESC_TOO_SHORT      8353L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_SEC_DESC_INVALID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The security descriptor is invalid.
				// '                    ' ''
				// '                    ''const ERROR_DS_SEC_DESC_INVALID        8354L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NO_DELETED_NAME
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Failed to create name for deleted object.
				// '                    ' ''
				// '                    ''const ERROR_DS_NO_DELETED_NAME         8355L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_SUBREF_MUST_HAVE_PARENT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The parent of a new subref must exist.
				// '                    ' ''
				// '                    ''const ERROR_DS_SUBREF_MUST_HAVE_PARENT 8356L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NCNAME_MUST_BE_NC
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The object must be a naming context.
				// '                    ' ''
				// '                    ''const ERROR_DS_NCNAME_MUST_BE_NC       8357L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CANT_ADD_SYSTEM_ONLY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' It is not permitted to add an attribute which is owned by the system.
				// '                    ' ''
				// '                    ''const ERROR_DS_CANT_ADD_SYSTEM_ONLY    8358L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CLASS_MUST_BE_CONCRETE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The class of the object must be structural; you cannot instantiate an abstract class.
				// '                    ' ''
				// '                    ''const ERROR_DS_CLASS_MUST_BE_CONCRETE  8359L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_INVALID_DMD
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The schema object could not be found.
				// '                    ' ''
				// '                    ''const ERROR_DS_INVALID_DMD             8360L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_OBJ_GUID_EXISTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A local object with this GUID (dead or alive) already exists.
				// '                    ' ''
				// '                    ''const ERROR_DS_OBJ_GUID_EXISTS         8361L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NOT_ON_BACKLINK
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The operation cannot be performed on a back link.
				// '                    ' ''
				// '                    ''const ERROR_DS_NOT_ON_BACKLINK         8362L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NO_CROSSREF_FOR_NC
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cross reference for the specified naming context could not be found.
				// '                    ' ''
				// '                    ''const ERROR_DS_NO_CROSSREF_FOR_NC      8363L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_SHUTTING_DOWN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The operation could not be performed because the directory service is shutting down.
				// '                    ' ''
				// '                    ''const ERROR_DS_SHUTTING_DOWN           8364L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_UNKNOWN_OPERATION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The directory service request is invalid.
				// '                    ' ''
				// '                    ''const ERROR_DS_UNKNOWN_OPERATION       8365L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_INVALID_ROLE_OWNER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The role owner attribute could not be read.
				// '                    ' ''
				// '                    ''const ERROR_DS_INVALID_ROLE_OWNER      8366L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_COULDNT_CONTACT_FSMO
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested FSMO operation failed. The current FSMO holder could not be contacted.
				// '                    ' ''
				// '                    ''const ERROR_DS_COULDNT_CONTACT_FSMO    8367L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CROSS_NC_DN_RENAME
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Modification of a DN across a naming context is not permitted.
				// '                    ' ''
				// '                    ''const ERROR_DS_CROSS_NC_DN_RENAME      8368L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CANT_MOD_SYSTEM_ONLY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The attribute cannot be modified because it is owned by the system.
				// '                    ' ''
				// '                    ''const ERROR_DS_CANT_MOD_SYSTEM_ONLY    8369L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_REPLICATOR_ONLY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Only the replicator can perform this function.
				// '                    ' ''
				// '                    ''const ERROR_DS_REPLICATOR_ONLY         8370L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_OBJ_CLASS_NOT_DEFINED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified class is not defined.
				// '                    ' ''
				// '                    ''const ERROR_DS_OBJ_CLASS_NOT_DEFINED   8371L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_OBJ_CLASS_NOT_SUBCLASS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified class is not a subclass.
				// '                    ' ''
				// '                    ''const ERROR_DS_OBJ_CLASS_NOT_SUBCLASS  8372L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NAME_REFERENCE_INVALID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The name reference is invalid.
				// '                    ' ''
				// '                    ''const ERROR_DS_NAME_REFERENCE_INVALID  8373L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CROSS_REF_EXISTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A cross reference already exists.
				// '                    ' ''
				// '                    ''const ERROR_DS_CROSS_REF_EXISTS        8374L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CANT_DEL_MASTER_CROSSREF
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' It is not permitted to delete a master cross reference.
				// '                    ' ''
				// '                    ''const ERROR_DS_CANT_DEL_MASTER_CROSSREF 8375L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_SUBTREE_NOTIFY_NOT_NC_HEAD
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Subtree notifications are only supported on NC heads.
				// '                    ' ''
				// '                    ''const ERROR_DS_SUBTREE_NOTIFY_NOT_NC_HEAD 8376L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NOTIFY_FILTER_TOO_COMPLEX
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Notification filter is too complex.
				// '                    ' ''
				// '                    ''const ERROR_DS_NOTIFY_FILTER_TOO_COMPLEX 8377L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DUP_RDN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Schema update failed: duplicate RDN.
				// '                    ' ''
				// '                    ''const ERROR_DS_DUP_RDN                 8378L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DUP_OID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Schema update failed: duplicate OID.
				// '                    ' ''
				// '                    ''const ERROR_DS_DUP_OID                 8379L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DUP_MAPI_ID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Schema update failed: duplicate MAPI identifier.
				// '                    ' ''
				// '                    ''const ERROR_DS_DUP_MAPI_ID             8380L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DUP_SCHEMA_ID_GUID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Schema update failed: duplicate schema-id GUID.
				// '                    ' ''
				// '                    ''const ERROR_DS_DUP_SCHEMA_ID_GUID      8381L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DUP_LDAP_DISPLAY_NAME
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Schema update failed: duplicate LDAP display name.
				// '                    ' ''
				// '                    ''const ERROR_DS_DUP_LDAP_DISPLAY_NAME   8382L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_SEMANTIC_ATT_TEST
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Schema update failed: range-lower less than range upper.
				// '                    ' ''
				// '                    ''const ERROR_DS_SEMANTIC_ATT_TEST       8383L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_SYNTAX_MISMATCH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Schema update failed: syntax mismatch.
				// '                    ' ''
				// '                    ''const ERROR_DS_SYNTAX_MISMATCH         8384L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_EXISTS_IN_MUST_HAVE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Schema deletion failed: attribute is used in must-contain.
				// '                    ' ''
				// '                    ''const ERROR_DS_EXISTS_IN_MUST_HAVE     8385L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_EXISTS_IN_MAY_HAVE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Schema deletion failed: attribute is used in may-contain.
				// '                    ' ''
				// '                    ''const ERROR_DS_EXISTS_IN_MAY_HAVE      8386L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NONEXISTENT_MAY_HAVE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Schema update failed: attribute in may-contain does not exist.
				// '                    ' ''
				// '                    ''const ERROR_DS_NONEXISTENT_MAY_HAVE    8387L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NONEXISTENT_MUST_HAVE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Schema update failed: attribute in must-contain does not exist.
				// '                    ' ''
				// '                    ''const ERROR_DS_NONEXISTENT_MUST_HAVE   8388L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_AUX_CLS_TEST_FAIL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Schema update failed: class in aux-class list does not exist or is not an auxiliary class.
				// '                    ' ''
				// '                    ''const ERROR_DS_AUX_CLS_TEST_FAIL       8389L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NONEXISTENT_POSS_SUP
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Schema update failed: class in poss-superiors does not exist.
				// '                    ' ''
				// '                    ''const ERROR_DS_NONEXISTENT_POSS_SUP    8390L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_SUB_CLS_TEST_FAIL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Schema update failed: class in subclassof list does not exist or does not satisfy hierarchy rules.
				// '                    ' ''
				// '                    ''const ERROR_DS_SUB_CLS_TEST_FAIL       8391L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_BAD_RDN_ATT_ID_SYNTAX
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Schema update failed: Rdn-Att-Id has wrong syntax.
				// '                    ' ''
				// '                    ''const ERROR_DS_BAD_RDN_ATT_ID_SYNTAX   8392L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_EXISTS_IN_AUX_CLS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Schema deletion failed: class is used as auxiliary class.
				// '                    ' ''
				// '                    ''const ERROR_DS_EXISTS_IN_AUX_CLS       8393L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_EXISTS_IN_SUB_CLS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Schema deletion failed: class is used as sub class.
				// '                    ' ''
				// '                    ''const ERROR_DS_EXISTS_IN_SUB_CLS       8394L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_EXISTS_IN_POSS_SUP
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Schema deletion failed: class is used as poss superior.
				// '                    ' ''
				// '                    ''const ERROR_DS_EXISTS_IN_POSS_SUP      8395L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_RECALCSCHEMA_FAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Schema update failed in recalculating validation cache.
				// '                    ' ''
				// '                    ''const ERROR_DS_RECALCSCHEMA_FAILED     8396L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_TREE_DELETE_NOT_FINISHED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The tree deletion is not finished.  The request must be made again to continue deleting the tree.
				// '                    ' ''
				// '                    ''const ERROR_DS_TREE_DELETE_NOT_FINISHED 8397L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CANT_DELETE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested delete operation could not be performed.
				// '                    ' ''
				// '                    ''const ERROR_DS_CANT_DELETE             8398L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_ATT_SCHEMA_REQ_ID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Cannot read the governs class identifier for the schema record.
				// '                    ' ''
				// '                    ''const ERROR_DS_ATT_SCHEMA_REQ_ID       8399L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_BAD_ATT_SCHEMA_SYNTAX
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The attribute schema has bad syntax.
				// '                    ' ''
				// '                    ''const ERROR_DS_BAD_ATT_SCHEMA_SYNTAX   8400L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CANT_CACHE_ATT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The attribute could not be cached.
				// '                    ' ''
				// '                    ''const ERROR_DS_CANT_CACHE_ATT          8401L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CANT_CACHE_CLASS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The class could not be cached.
				// '                    ' ''
				// '                    ''const ERROR_DS_CANT_CACHE_CLASS        8402L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CANT_REMOVE_ATT_CACHE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The attribute could not be removed from the cache.
				// '                    ' ''
				// '                    ''const ERROR_DS_CANT_REMOVE_ATT_CACHE   8403L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CANT_REMOVE_CLASS_CACHE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The class could not be removed from the cache.
				// '                    ' ''
				// '                    ''const ERROR_DS_CANT_REMOVE_CLASS_CACHE 8404L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CANT_RETRIEVE_DN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The distinguished name attribute could not be read.
				// '                    ' ''
				// '                    ''const ERROR_DS_CANT_RETRIEVE_DN        8405L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_MISSING_SUPREF
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' No superior reference has been configured for the directory service. The directory service is therefore unable to issue referrals to objects outside this forest.
				// '                    ' ''
				// '                    ''const ERROR_DS_MISSING_SUPREF          8406L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CANT_RETRIEVE_INSTANCE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The instance type attribute could not be retrieved.
				// '                    ' ''
				// '                    ''const ERROR_DS_CANT_RETRIEVE_INSTANCE  8407L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CODE_INCONSISTENCY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An internal error has occurred.
				// '                    ' ''
				// '                    ''const ERROR_DS_CODE_INCONSISTENCY      8408L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DATABASE_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A database error has occurred.
				// '                    ' ''
				// '                    ''const ERROR_DS_DATABASE_ERROR          8409L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_GOVERNSID_MISSING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The attribute GOVERNSID is missing.
				// '                    ' ''
				// '                    ''const ERROR_DS_GOVERNSID_MISSING       8410L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_MISSING_EXPECTED_ATT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An expected attribute is missing.
				// '                    ' ''
				// '                    ''const ERROR_DS_MISSING_EXPECTED_ATT    8411L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NCNAME_MISSING_CR_REF
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified naming context is missing a cross reference.
				// '                    ' ''
				// '                    ''const ERROR_DS_NCNAME_MISSING_CR_REF   8412L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_SECURITY_CHECKING_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A security checking error has occurred.
				// '                    ' ''
				// '                    ''const ERROR_DS_SECURITY_CHECKING_ERROR 8413L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_SCHEMA_NOT_LOADED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The schema is not loaded.
				// '                    ' ''
				// '                    ''const ERROR_DS_SCHEMA_NOT_LOADED       8414L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_SCHEMA_ALLOC_FAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Schema allocation failed. Please check if the machine is running low on memory.
				// '                    ' ''
				// '                    ''const ERROR_DS_SCHEMA_ALLOC_FAILED     8415L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_ATT_SCHEMA_REQ_SYNTAX
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Failed to obtain the required syntax for the attribute schema.
				// '                    ' ''
				// '                    ''const ERROR_DS_ATT_SCHEMA_REQ_SYNTAX   8416L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_GCVERIFY_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The global catalog verification failed. The global catalog is not available or does not support the operation. Some part of the directory is currently not available.
				// '                    ' ''
				// '                    ''const ERROR_DS_GCVERIFY_ERROR          8417L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DRA_SCHEMA_MISMATCH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The replication operation failed because of a schema mismatch between the servers involved.
				// '                    ' ''
				// '                    ''const ERROR_DS_DRA_SCHEMA_MISMATCH     8418L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CANT_FIND_DSA_OBJ
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The DSA object could not be found.
				// '                    ' ''
				// '                    ''const ERROR_DS_CANT_FIND_DSA_OBJ       8419L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CANT_FIND_EXPECTED_NC
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The naming context could not be found.
				// '                    ' ''
				// '                    ''const ERROR_DS_CANT_FIND_EXPECTED_NC   8420L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CANT_FIND_NC_IN_CACHE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The naming context could not be found in the cache.
				// '                    ' ''
				// '                    ''const ERROR_DS_CANT_FIND_NC_IN_CACHE   8421L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CANT_RETRIEVE_CHILD
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The child object could not be retrieved.
				// '                    ' ''
				// '                    ''const ERROR_DS_CANT_RETRIEVE_CHILD     8422L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_SECURITY_ILLEGAL_MODIFY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The modification was not permitted for security reasons.
				// '                    ' ''
				// '                    ''const ERROR_DS_SECURITY_ILLEGAL_MODIFY 8423L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CANT_REPLACE_HIDDEN_REC
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The operation cannot replace the hidden record.
				// '                    ' ''
				// '                    ''const ERROR_DS_CANT_REPLACE_HIDDEN_REC 8424L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_BAD_HIERARCHY_FILE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The hierarchy file is invalid.
				// '                    ' ''
				// '                    ''const ERROR_DS_BAD_HIERARCHY_FILE      8425L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_BUILD_HIERARCHY_TABLE_FAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The attempt to build the hierarchy table failed.
				// '                    ' ''
				// '                    ''const ERROR_DS_BUILD_HIERARCHY_TABLE_FAILED 8426L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CONFIG_PARAM_MISSING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The directory configuration parameter is missing from the registry.
				// '                    ' ''
				// '                    ''const ERROR_DS_CONFIG_PARAM_MISSING    8427L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_COUNTING_AB_INDICES_FAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The attempt to count the address book indices failed.
				// '                    ' ''
				// '                    ''const ERROR_DS_COUNTING_AB_INDICES_FAILED 8428L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_HIERARCHY_TABLE_MALLOC_FAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The allocation of the hierarchy table failed.
				// '                    ' ''
				// '                    ''const ERROR_DS_HIERARCHY_TABLE_MALLOC_FAILED 8429L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_INTERNAL_FAILURE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The directory service encountered an internal failure.
				// '                    ' ''
				// '                    ''const ERROR_DS_INTERNAL_FAILURE        8430L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_UNKNOWN_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The directory service encountered an unknown failure.
				// '                    ' ''
				// '                    ''const ERROR_DS_UNKNOWN_ERROR           8431L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_ROOT_REQUIRES_CLASS_TOP
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A root object requires a class of 'top'.
				// '                    ' ''
				// '                    ''const ERROR_DS_ROOT_REQUIRES_CLASS_TOP 8432L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_REFUSING_FSMO_ROLES
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' This directory server is shutting down, and cannot take ownership of new floating single-master operation roles.
				// '                    ' ''
				// '                    ''const ERROR_DS_REFUSING_FSMO_ROLES     8433L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_MISSING_FSMO_SETTINGS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The directory service is missing mandatory configuration information, and is unable to determine the ownership of floating single-master operation roles.
				// '                    ' ''
				// '                    ''const ERROR_DS_MISSING_FSMO_SETTINGS   8434L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_UNABLE_TO_SURRENDER_ROLES
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The directory service was unable to transfer ownership of one or more floating single-master operation roles to other servers.
				// '                    ' ''
				// '                    ''const ERROR_DS_UNABLE_TO_SURRENDER_ROLES 8435L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DRA_GENERIC
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The replication operation failed.
				// '                    ' ''
				// '                    ''const ERROR_DS_DRA_GENERIC             8436L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DRA_INVALID_PARAMETER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An invalid parameter was specified for this replication operation.
				// '                    ' ''
				// '                    ''const ERROR_DS_DRA_INVALID_PARAMETER   8437L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DRA_BUSY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The directory service is too busy to complete the replication operation at this time.
				// '                    ' ''
				// '                    ''const ERROR_DS_DRA_BUSY                8438L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DRA_BAD_DN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The distinguished name specified for this replication operation is invalid.
				// '                    ' ''
				// '                    ''const ERROR_DS_DRA_BAD_DN              8439L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DRA_BAD_NC
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The naming context specified for this replication operation is invalid.
				// '                    ' ''
				// '                    ''const ERROR_DS_DRA_BAD_NC              8440L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DRA_DN_EXISTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The distinguished name specified for this replication operation already exists.
				// '                    ' ''
				// '                    ''const ERROR_DS_DRA_DN_EXISTS           8441L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DRA_INTERNAL_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The replication system encountered an internal error.
				// '                    ' ''
				// '                    ''const ERROR_DS_DRA_INTERNAL_ERROR      8442L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DRA_INCONSISTENT_DIT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The replication operation encountered a database inconsistency.
				// '                    ' ''
				// '                    ''const ERROR_DS_DRA_INCONSISTENT_DIT    8443L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DRA_CONNECTION_FAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The server specified for this replication operation could not be contacted.
				// '                    ' ''
				// '                    ''const ERROR_DS_DRA_CONNECTION_FAILED   8444L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DRA_BAD_INSTANCE_TYPE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The replication operation encountered an object with an invalid instance type.
				// '                    ' ''
				// '                    ''const ERROR_DS_DRA_BAD_INSTANCE_TYPE   8445L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DRA_OUT_OF_MEM
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The replication operation failed to allocate memory.
				// '                    ' ''
				// '                    ''const ERROR_DS_DRA_OUT_OF_MEM          8446L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DRA_MAIL_PROBLEM
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The replication operation encountered an error with the mail system.
				// '                    ' ''
				// '                    ''const ERROR_DS_DRA_MAIL_PROBLEM        8447L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DRA_REF_ALREADY_EXISTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The replication reference information for the target server already exists.
				// '                    ' ''
				// '                    ''const ERROR_DS_DRA_REF_ALREADY_EXISTS  8448L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DRA_REF_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The replication reference information for the target server does not exist.
				// '                    ' ''
				// '                    ''const ERROR_DS_DRA_REF_NOT_FOUND       8449L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DRA_OBJ_IS_REP_SOURCE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The naming context cannot be removed because it is replicated to another server.
				// '                    ' ''
				// '                    ''const ERROR_DS_DRA_OBJ_IS_REP_SOURCE   8450L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DRA_DB_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The replication operation encountered a database error.
				// '                    ' ''
				// '                    ''const ERROR_DS_DRA_DB_ERROR            8451L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DRA_NO_REPLICA
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The naming context is in the process of being removed or is not replicated from the specified server.
				// '                    ' ''
				// '                    ''const ERROR_DS_DRA_NO_REPLICA          8452L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DRA_ACCESS_DENIED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Replication access was denied.
				// '                    ' ''
				// '                    ''const ERROR_DS_DRA_ACCESS_DENIED       8453L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DRA_NOT_SUPPORTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested operation is not supported by this version of the directory service.
				// '                    ' ''
				// '                    ''const ERROR_DS_DRA_NOT_SUPPORTED       8454L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DRA_RPC_CANCELLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The replication remote procedure call was cancelled.
				// '                    ' ''
				// '                    ''const ERROR_DS_DRA_RPC_CANCELLED       8455L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DRA_SOURCE_DISABLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The source server is currently rejecting replication requests.
				// '                    ' ''
				// '                    ''const ERROR_DS_DRA_SOURCE_DISABLED     8456L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DRA_SINK_DISABLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The destination server is currently rejecting replication requests.
				// '                    ' ''
				// '                    ''const ERROR_DS_DRA_SINK_DISABLED       8457L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DRA_NAME_COLLISION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The replication operation failed due to a collision of object names.
				// '                    ' ''
				// '                    ''const ERROR_DS_DRA_NAME_COLLISION      8458L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DRA_SOURCE_REINSTALLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The replication source has been reinstalled.
				// '                    ' ''
				// '                    ''const ERROR_DS_DRA_SOURCE_REINSTALLED  8459L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DRA_MISSING_PARENT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The replication operation failed because a required parent object is missing.
				// '                    ' ''
				// '                    ''const ERROR_DS_DRA_MISSING_PARENT      8460L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DRA_PREEMPTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The replication operation was preempted.
				// '                    ' ''
				// '                    ''const ERROR_DS_DRA_PREEMPTED           8461L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DRA_ABANDON_SYNC
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The replication synchronization attempt was abandoned because of a lack of updates.
				// '                    ' ''
				// '                    ''const ERROR_DS_DRA_ABANDON_SYNC        8462L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DRA_SHUTDOWN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The replication operation was terminated because the system is shutting down.
				// '                    ' ''
				// '                    ''const ERROR_DS_DRA_SHUTDOWN            8463L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DRA_INCOMPATIBLE_PARTIAL_SET
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The replication synchronization attempt failed as the destination partial attribute set is not a subset of source partial attribute set.
				// '                    ' ''
				// '                    ''const ERROR_DS_DRA_INCOMPATIBLE_PARTIAL_SET 8464L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DRA_SOURCE_IS_PARTIAL_REPLICA
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The replication synchronization attempt failed because a master replica attempted to sync from a partial replica.
				// '                    ' ''
				// '                    ''const ERROR_DS_DRA_SOURCE_IS_PARTIAL_REPLICA 8465L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DRA_EXTN_CONNECTION_FAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The server specified for this replication operation was contacted, but that server was unable to contact an additional server needed to complete the operation.
				// '                    ' ''
				// '                    ''const ERROR_DS_DRA_EXTN_CONNECTION_FAILED 8466L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_INSTALL_SCHEMA_MISMATCH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The version of the Active Directory schema of the source forest is not compatible with the version of Active Directory on this computer.
				// '                    ' ''
				// '                    ''const ERROR_DS_INSTALL_SCHEMA_MISMATCH 8467L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DUP_LINK_ID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Schema update failed: An attribute with the same link identifier already exists.
				// '                    ' ''
				// '                    ''const ERROR_DS_DUP_LINK_ID             8468L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NAME_ERROR_RESOLVING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Name translation: Generic processing error.
				// '                    ' ''
				// '                    ''const ERROR_DS_NAME_ERROR_RESOLVING    8469L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NAME_ERROR_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Name translation: Could not find the name or insufficient right to see name.
				// '                    ' ''
				// '                    ''const ERROR_DS_NAME_ERROR_NOT_FOUND    8470L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NAME_ERROR_NOT_UNIQUE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Name translation: Input name mapped to more than one output name.
				// '                    ' ''
				// '                    ''const ERROR_DS_NAME_ERROR_NOT_UNIQUE   8471L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NAME_ERROR_NO_MAPPING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Name translation: Input name found, but not the associated output format.
				// '                    ' ''
				// '                    ''const ERROR_DS_NAME_ERROR_NO_MAPPING   8472L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NAME_ERROR_DOMAIN_ONLY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Name translation: Unable to resolve completely, only the domain was found.
				// '                    ' ''
				// '                    ''const ERROR_DS_NAME_ERROR_DOMAIN_ONLY  8473L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NAME_ERROR_NO_SYNTACTICAL_MAPPING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Name translation: Unable to perform purely syntactical mapping at the client without going [Out ] to the wire.
				// '                    ' ''
				// '                    ''const ERROR_DS_NAME_ERROR_NO_SYNTACTICAL_MAPPING 8474L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CONSTRUCTED_ATT_MOD
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Modification of a constructed attribute is not allowed.
				// '                    ' ''
				// '                    ''const ERROR_DS_CONSTRUCTED_ATT_MOD     8475L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_WRONG_OM_OBJ_CLASS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The OM-Object-Class specified is incorrect for an attribute with the specified syntax.
				// '                    ' ''
				// '                    ''const ERROR_DS_WRONG_OM_OBJ_CLASS      8476L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DRA_REPL_PENDING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The replication request has been posted; waiting for reply.
				// '                    ' ''
				// '                    ''const ERROR_DS_DRA_REPL_PENDING        8477L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DS_REQUIRED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested operation requires a directory service, and none was available.
				// '                    ' ''
				// '                    ''const ERROR_DS_DS_REQUIRED             8478L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_INVALID_LDAP_DISPLAY_NAME
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The LDAP display name of the class or attribute contains non-ASCII characters.
				// '                    ' ''
				// '                    ''const ERROR_DS_INVALID_LDAP_DISPLAY_NAME 8479L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NON_BASE_SEARCH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested search operation is only supported for base searches.
				// '                    ' ''
				// '                    ''const ERROR_DS_NON_BASE_SEARCH         8480L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CANT_RETRIEVE_ATTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The search failed to retrieve attributes from the database.
				// '                    ' ''
				// '                    ''const ERROR_DS_CANT_RETRIEVE_ATTS      8481L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_BACKLINK_WITHOUT_LINK
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The schema update operation tried to add a backward link attribute that has no corresponding forward link.
				// '                    ' ''
				// '                    ''const ERROR_DS_BACKLINK_WITHOUT_LINK   8482L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_EPOCH_MISMATCH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Source and destination of a cross-domain move do not agree on the object's epoch number.  Either source or destination does not have the latest version of the object.
				// '                    ' ''
				// '                    ''const ERROR_DS_EPOCH_MISMATCH          8483L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_SRC_NAME_MISMATCH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Source and destination of a cross-domain move do not agree on the object's current name.  Either source or destination does not have the latest version of the object.
				// '                    ' ''
				// '                    ''const ERROR_DS_SRC_NAME_MISMATCH       8484L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_SRC_AND_DST_NC_IDENTICAL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Source and destination for the cross-domain move operation are identical.  Caller should use local move operation instead of cross-domain move operation.
				// '                    ' ''
				// '                    ''const ERROR_DS_SRC_AND_DST_NC_IDENTICAL 8485L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DST_NC_MISMATCH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Source and destination for a cross-domain move are not in agreement on the naming contexts in the forest.  Either source or destination does not have the latest version of the Partitions container.
				// '                    ' ''
				// '                    ''const ERROR_DS_DST_NC_MISMATCH         8486L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NOT_AUTHORITIVE_FOR_DST_NC
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Destination of a cross-domain move is not authoritative for the destination naming context.
				// '                    ' ''
				// '                    ''const ERROR_DS_NOT_AUTHORITIVE_FOR_DST_NC 8487L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_SRC_GUID_MISMATCH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Source and destination of a cross-domain move do not agree on the identity of the source object.  Either source or destination does not have the latest version of the source object.
				// '                    ' ''
				// '                    ''const ERROR_DS_SRC_GUID_MISMATCH       8488L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CANT_MOVE_DELETED_OBJECT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Object being moved across-domains is already known to be deleted by the destination server.  The source server does not have the latest version of the source object.
				// '                    ' ''
				// '                    ''const ERROR_DS_CANT_MOVE_DELETED_OBJECT 8489L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_PDC_OPERATION_IN_PROGRESS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Another operation which requires exclusive access to the PDC FSMO is already in progress.
				// '                    ' ''
				// '                    ''const ERROR_DS_PDC_OPERATION_IN_PROGRESS 8490L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CROSS_DOMAIN_CLEANUP_REQD
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A cross-domain move operation failed such that two versions of the moved object exist - one each in the source and destination domains.  The destination object needs to be removed to restore the system to a consistent state.
				// '                    ' ''
				// '                    ''const ERROR_DS_CROSS_DOMAIN_CLEANUP_REQD 8491L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_ILLEGAL_XDOM_MOVE_OPERATION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' This object may not be moved across domain boundaries either because cross-domain moves for this class are disallowed, or the object has some special characteristics, e.g.: trust account or restricted RID, which prevent its move.
				// '                    ' ''
				// '                    ''const ERROR_DS_ILLEGAL_XDOM_MOVE_OPERATION 8492L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CANT_WITH_ACCT_GROUP_MEMBERSHPS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Can't move objects with memberships across domain boundaries as once moved, this would violate the membership conditions of the account group.  Remove the object from any account group memberships and retry.
				// '                    ' ''
				// '                    ''const ERROR_DS_CANT_WITH_ACCT_GROUP_MEMBERSHPS 8493L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NC_MUST_HAVE_NC_PARENT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A naming context head must be the immediate child of another naming context head, not of an interior node.
				// '                    ' ''
				// '                    ''const ERROR_DS_NC_MUST_HAVE_NC_PARENT  8494L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CR_IMPOSSIBLE_TO_VALIDATE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The directory cannot validate the proposed naming context name because it does not hold a replica of the naming context above the proposed naming context.  Please ensure that the domain naming master role is held by a server that is configured as a global catalog server, and that the server is up to date with its replication partners. (Applies only to Windows 2000 Domain Naming masters)
				// '                    ' ''
				// '                    ''const ERROR_DS_CR_IMPOSSIBLE_TO_VALIDATE 8495L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DST_DOMAIN_NOT_NATIVE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Destination domain must be in native mode.
				// '                    ' ''
				// '                    ''const ERROR_DS_DST_DOMAIN_NOT_NATIVE   8496L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_MISSING_INFRASTRUCTURE_CONTAINER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The operation can not be performed because the server does not have an infrastructure container in the domain of interest.
				// '                    ' ''
				// '                    ''const ERROR_DS_MISSING_INFRASTRUCTURE_CONTAINER 8497L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CANT_MOVE_ACCOUNT_GROUP
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Cross-domain move of non-empty account groups is not allowed.
				// '                    ' ''
				// '                    ''const ERROR_DS_CANT_MOVE_ACCOUNT_GROUP 8498L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CANT_MOVE_RESOURCE_GROUP
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Cross-domain move of non-empty resource groups is not allowed.
				// '                    ' ''
				// '                    ''const ERROR_DS_CANT_MOVE_RESOURCE_GROUP 8499L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_INVALID_SEARCH_FLAG
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The search flags for the attribute are invalid. The ANR bit is valid only on attributes of Unicode or Teletex strings.
				// '                    ' ''
				// '                    ''const ERROR_DS_INVALID_SEARCH_FLAG     8500L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NO_TREE_DELETE_ABOVE_NC
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Tree deletions starting at an object which has an NC head as a descendant are not allowed.
				// '                    ' ''
				// '                    ''const ERROR_DS_NO_TREE_DELETE_ABOVE_NC 8501L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_COULDNT_LOCK_TREE_FOR_DELETE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The directory service failed to lock a tree in preparation for a tree deletion because the tree was in use.
				// '                    ' ''
				// '                    ''const ERROR_DS_COULDNT_LOCK_TREE_FOR_DELETE 8502L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_COULDNT_IDENTIFY_OBJECTS_FOR_TREE_DELETE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The directory service failed to identify the list of objects to delete while attempting a tree deletion.
				// '                    ' ''
				// '                    ''const ERROR_DS_COULDNT_IDENTIFY_OBJECTS_FOR_TREE_DELETE 8503L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_SAM_INIT_FAILURE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Security Accounts Manager initialization failed because of the following error: %1.
				// '                    '' Error Status: = &h%2. Click OK to shut down the system and reboot into Directory Services Restore Mode. Check the event log for detailed information.
				// '                    ' ''
				// '                    ''const ERROR_DS_SAM_INIT_FAILURE        8504L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_SENSITIVE_GROUP_VIOLATION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Only an administrator can modify the membership list of an administrative group.
				// '                    ' ''
				// '                    ''const ERROR_DS_SENSITIVE_GROUP_VIOLATION 8505L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CANT_MOD_PRIMARYGROUPID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Cannot change the primary group ID of a domain controller account.
				// '                    ' ''
				// '                    ''const ERROR_DS_CANT_MOD_PRIMARYGROUPID 8506L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_ILLEGAL_BASE_SCHEMA_MOD
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An attempt is made to modify the base schema.
				// '                    ' ''
				// '                    ''const ERROR_DS_ILLEGAL_BASE_SCHEMA_MOD 8507L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NONSAFE_SCHEMA_CHANGE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Adding a new mandatory attribute to an existing class, deleting a mandatory attribute from an existing class, or adding an optional attribute to the special class Top that is not a backlink attribute (directly or through inheritance, for example, by adding or deleting an auxiliary class) is not allowed.
				// '                    ' ''
				// '                    ''const ERROR_DS_NONSAFE_SCHEMA_CHANGE   8508L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_SCHEMA_UPDATE_DISALLOWED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Schema update is not allowed on this DC because the DC is not the schema FSMO Role Owner.
				// '                    ' ''
				// '                    ''const ERROR_DS_SCHEMA_UPDATE_DISALLOWED 8509L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CANT_CREATE_UNDER_SCHEMA
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An object of this class cannot be created under the schema container. You can only create attribute-schema and class-schema objects under the schema container.
				// '                    ' ''
				// '                    ''const ERROR_DS_CANT_CREATE_UNDER_SCHEMA 8510L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_INSTALL_NO_SRC_SCH_VERSION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The replica/child install failed to get the objectVersion attribute on the schema container on the source DC. Either the attribute is missing on the schema container or the credentials supplied do not have permission to read it.
				// '                    ' ''
				// '                    ''const ERROR_DS_INSTALL_NO_SRC_SCH_VERSION 8511L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_INSTALL_NO_SCH_VERSION_IN_INIFILE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The replica/child install failed to read the objectVersion attribute in the SCHEMA section of the file schema.ini in the system32 directory.
				// '                    ' ''
				// '                    ''const ERROR_DS_INSTALL_NO_SCH_VERSION_IN_INIFILE 8512L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_INVALID_GROUP_TYPE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified group type is invalid.
				// '                    ' ''
				// '                    ''const ERROR_DS_INVALID_GROUP_TYPE      8513L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' You cannot nest global groups in a mixed domain if the group is security-enabled.
				// '                    ' ''
				// '                    ''const ERROR_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN 8514L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' You cannot nest local groups in a mixed domain if the group is security-enabled.
				// '                    ' ''
				// '                    ''const ERROR_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN 8515L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A global group cannot have a local group as a member.
				// '                    ' ''
				// '                    ''const ERROR_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER 8516L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A global group cannot have a universal group as a member.
				// '                    ' ''
				// '                    ''const ERROR_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER 8517L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A universal group cannot have a local group as a member.
				// '                    ' ''
				// '                    ''const ERROR_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER 8518L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A global group cannot have a cross-domain member.
				// '                    ' ''
				// '                    ''const ERROR_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER 8519L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A local group cannot have another cross domain local group as a member.
				// '                    ' ''
				// '                    ''const ERROR_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER 8520L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_HAVE_PRIMARY_MEMBERS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A group with primary members cannot change to a security-disabled group.
				// '                    ' ''
				// '                    ''const ERROR_DS_HAVE_PRIMARY_MEMBERS    8521L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_STRING_SD_CONVERSION_FAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The schema cache load failed to convert the string default SD on a class-schema object.
				// '                    ' ''
				// '                    ''const ERROR_DS_STRING_SD_CONVERSION_FAILED 8522L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NAMING_MASTER_GC
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Only DSAs configured to be Global Catalog servers should be allowed to hold the Domain Naming Master FSMO role. (Applies only to Windows 2000 servers)
				// '                    ' ''
				// '                    ''const ERROR_DS_NAMING_MASTER_GC        8523L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DNS_LOOKUP_FAILURE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The DSA operation is unable to proceed because of a DNS lookup failure.
				// '                    ' ''
				// '                    ''const ERROR_DS_DNS_LOOKUP_FAILURE      8524L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_COULDNT_UPDATE_SPNS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' While processing a change to the DNS Host Name for an object, the Service Principal Name values could not be kept in sync.
				// '                    ' ''
				// '                    ''const ERROR_DS_COULDNT_UPDATE_SPNS     8525L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CANT_RETRIEVE_SD
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The Security Descriptor attribute could not be read.
				// '                    ' ''
				// '                    ''const ERROR_DS_CANT_RETRIEVE_SD        8526L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_KEY_NOT_UNIQUE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The object requested was not found, but an object with that key was found.
				// '                    ' ''
				// '                    ''const ERROR_DS_KEY_NOT_UNIQUE          8527L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_WRONG_LINKED_ATT_SYNTAX
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The syntax of the linked attribute being added is incorrect. Forward links can only have syntax 2.5.5.1, 2.5.5.7, and 2.5.5.14, and backlinks can only have syntax 2.5.5.1
				// '                    ' ''
				// '                    ''const ERROR_DS_WRONG_LINKED_ATT_SYNTAX 8528L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_SAM_NEED_BOOTKEY_PASSWORD
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Security Account Manager needs to get the boot password.
				// '                    ' ''
				// '                    ''const ERROR_DS_SAM_NEED_BOOTKEY_PASSWORD 8529L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_SAM_NEED_BOOTKEY_FLOPPY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Security Account Manager needs to get the boot key from floppy disk.
				// '                    ' ''
				// '                    ''const ERROR_DS_SAM_NEED_BOOTKEY_FLOPPY 8530L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CANT_START
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Directory Service cannot start.
				// '                    ' ''
				// '                    ''const ERROR_DS_CANT_START              8531L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_INIT_FAILURE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Directory Services could not start.
				// '                    ' ''
				// '                    ''const ERROR_DS_INIT_FAILURE            8532L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NO_PKT_PRIVACY_ON_CONNECTION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The connection between client and server requires packet privacy or better.
				// '                    ' ''
				// '                    ''const ERROR_DS_NO_PKT_PRIVACY_ON_CONNECTION 8533L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_SOURCE_DOMAIN_IN_FOREST
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The source domain may not be in the same forest as destination.
				// '                    ' ''
				// '                    ''const ERROR_DS_SOURCE_DOMAIN_IN_FOREST 8534L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DESTINATION_DOMAIN_NOT_IN_FOREST
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The destination domain must be in the forest.
				// '                    ' ''
				// '                    ''const ERROR_DS_DESTINATION_DOMAIN_NOT_IN_FOREST 8535L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DESTINATION_AUDITING_NOT_ENABLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The operation requires that destination domain auditing be enabled.
				// '                    ' ''
				// '                    ''const ERROR_DS_DESTINATION_AUDITING_NOT_ENABLED 8536L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CANT_FIND_DC_FOR_SRC_DOMAIN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The operation couldn't locate a DC for the source domain.
				// '                    ' ''
				// '                    ''const ERROR_DS_CANT_FIND_DC_FOR_SRC_DOMAIN 8537L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_SRC_OBJ_NOT_GROUP_OR_USER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The source object must be a group or user.
				// '                    ' ''
				// '                    ''const ERROR_DS_SRC_OBJ_NOT_GROUP_OR_USER 8538L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_SRC_SID_EXISTS_IN_FOREST
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The source object's SID already exists in destination forest.
				// '                    ' ''
				// '                    ''const ERROR_DS_SRC_SID_EXISTS_IN_FOREST 8539L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_SRC_AND_DST_OBJECT_CLASS_MISMATCH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The source and destination object must be of the same type.
				// '                    ' ''
				// '                    ''const ERROR_DS_SRC_AND_DST_OBJECT_CLASS_MISMATCH 8540L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SAM_INIT_FAILURE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Security Accounts Manager initialization failed because of the following error: %1.
				// '                    '' Error Status: = &h%2. Click OK to shut down the system and reboot into Safe Mode. Check the event log for detailed information.
				// '                    ' ''
				// '                    ''const ERROR_SAM_INIT_FAILURE           8541L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DRA_SCHEMA_INFO_SHIP
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Schema information could not be included in the replication request.
				// '                    ' ''
				// '                    ''const ERROR_DS_DRA_SCHEMA_INFO_SHIP    8542L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DRA_SCHEMA_CONFLICT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The replication operation could not be completed due to a schema incompatibility.
				// '                    ' ''
				// '                    ''const ERROR_DS_DRA_SCHEMA_CONFLICT     8543L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DRA_EARLIER_SCHEMA_CONFLICT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The replication operation could not be completed due to a previous schema incompatibility.
				// '                    ' ''
				// '                    ''const ERROR_DS_DRA_EARLIER_SCHEMA_CONFLICT 8544L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DRA_OBJ_NC_MISMATCH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The replication update could not be applied because either the source or the destination has not yet received information regarding a recent cross-domain move operation.
				// '                    ' ''
				// '                    ''const ERROR_DS_DRA_OBJ_NC_MISMATCH     8545L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NC_STILL_HAS_DSAS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested domain could not be deleted because there exist domain controllers that still host this domain.
				// '                    ' ''
				// '                    ''const ERROR_DS_NC_STILL_HAS_DSAS       8546L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_GC_REQUIRED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested operation can be performed only on a global catalog server.
				// '                    ' ''
				// '                    ''const ERROR_DS_GC_REQUIRED             8547L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_LOCAL_MEMBER_OF_LOCAL_ONLY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A local group can only be a member of other local groups in the same domain.
				// '                    ' ''
				// '                    ''const ERROR_DS_LOCAL_MEMBER_OF_LOCAL_ONLY 8548L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NO_FPO_IN_UNIVERSAL_GROUPS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Foreign security principals cannot be members of universal groups.
				// '                    ' ''
				// '                    ''const ERROR_DS_NO_FPO_IN_UNIVERSAL_GROUPS 8549L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CANT_ADD_TO_GC
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The attribute is not allowed to be replicated to the GC because of security reasons.
				// '                    ' ''
				// '                    ''const ERROR_DS_CANT_ADD_TO_GC          8550L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NO_CHECKPOINT_WITH_PDC
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The checkpoint with the PDC could not be taken because there too many modifications being processed currently.
				// '                    ' ''
				// '                    ''const ERROR_DS_NO_CHECKPOINT_WITH_PDC  8551L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_SOURCE_AUDITING_NOT_ENABLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The operation requires that source domain auditing be enabled.
				// '                    ' ''
				// '                    ''const ERROR_DS_SOURCE_AUDITING_NOT_ENABLED 8552L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CANT_CREATE_IN_NONDOMAIN_NC
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Security principal objects can only be created inside domain naming contexts.
				// '                    ' ''
				// '                    ''const ERROR_DS_CANT_CREATE_IN_NONDOMAIN_NC 8553L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_INVALID_NAME_FOR_SPN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A Service Principal Name (SPN) could not be constructed because the provided hostname is not in the necessary format.
				// '                    ' ''
				// '                    ''const ERROR_DS_INVALID_NAME_FOR_SPN    8554L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_FILTER_USES_CONTRUCTED_ATTRS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A Filter was passed that uses constructed attributes.
				// '                    ' ''
				// '                    ''const ERROR_DS_FILTER_USES_CONTRUCTED_ATTRS 8555L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_UNICODEPWD_NOT_IN_QUOTES
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The unicodePwd attribute value must be enclosed in double quotes.
				// '                    ' ''
				// '                    ''const ERROR_DS_UNICODEPWD_NOT_IN_QUOTES 8556L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Your computer could not be joined to the domain. You have exceeded the maximum number of computer accounts you are allowed to create in this domain. Contact your system administrator to have this limit reset or increased.
				// '                    ' ''
				// '                    ''const ERROR_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED 8557L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_MUST_BE_RUN_ON_DST_DC
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' For security reasons, the operation must be run on the destination DC.
				// '                    ' ''
				// '                    ''const ERROR_DS_MUST_BE_RUN_ON_DST_DC   8558L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_SRC_DC_MUST_BE_SP4_OR_GREATER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' For security reasons, the source DC must be NT4SP4 or greater.
				// '                    ' ''
				// '                    ''const ERROR_DS_SRC_DC_MUST_BE_SP4_OR_GREATER 8559L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CANT_TREE_DELETE_CRITICAL_OBJ
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Critical Directory Service System objects cannot be deleted during tree delete operations.  The tree delete may have been partially performed.
				// '                    ' ''
				// '                    ''const ERROR_DS_CANT_TREE_DELETE_CRITICAL_OBJ 8560L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_INIT_FAILURE_CONSOLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Directory Services could not start because of the following error: %1.
				// '                    '' Error Status: = &h%2. Please click OK to shutdown the system. You can use the recovery console to diagnose the system further.
				// '                    ' ''
				// '                    ''const ERROR_DS_INIT_FAILURE_CONSOLE    8561L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_SAM_INIT_FAILURE_CONSOLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Security Accounts Manager initialization failed because of the following error: %1.
				// '                    '' Error Status: = &h%2. Please click OK to shutdown the system. You can use the recovery console to diagnose the system further.
				// '                    ' ''
				// '                    ''const ERROR_DS_SAM_INIT_FAILURE_CONSOLE 8562L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_FOREST_VERSION_TOO_HIGH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The version of the operating system installed is incompatible with the current forest functional level. You must upgrade to a new version of the operating system before this server can become a domain controller in this forest.
				// '                    ' ''
				// '                    ''const ERROR_DS_FOREST_VERSION_TOO_HIGH 8563L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DOMAIN_VERSION_TOO_HIGH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The version of the operating system installed is incompatible with the current domain functional level. You must upgrade to a new version of the operating system before this server can become a domain controller in this domain.
				// '                    ' ''
				// '                    ''const ERROR_DS_DOMAIN_VERSION_TOO_HIGH 8564L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_FOREST_VERSION_TOO_LOW
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The version of the operating system installed on this server no longer supports the current forest functional level. You must raise the forest functional level before this server can become a domain controller in this forest.
				// '                    ' ''
				// '                    ''const ERROR_DS_FOREST_VERSION_TOO_LOW  8565L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DOMAIN_VERSION_TOO_LOW
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The version of the operating system installed on this server no longer supports the current domain functional level. You must raise the domain functional level before this server can become a domain controller in this domain.
				// '                    ' ''
				// '                    ''const ERROR_DS_DOMAIN_VERSION_TOO_LOW  8566L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_INCOMPATIBLE_VERSION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The version of the operating system installed on this server is incompatible with the functional level of the domain or forest.
				// '                    ' ''
				// '                    ''const ERROR_DS_INCOMPATIBLE_VERSION    8567L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_LOW_DSA_VERSION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The functional level of the domain (or forest) cannot be raised to the requested value, because there exist one or more domain controllers in the domain (or forest) that are at a lower incompatible functional level.
				// '                    ' ''
				// '                    ''const ERROR_DS_LOW_DSA_VERSION         8568L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NO_BEHAVIOR_VERSION_IN_MIXEDDOMAIN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The forest functional level cannot be raised to the requested value since one or more domains are still in mixed domain mode. All domains in the forest must be in native mode, for you to raise the forest functional level.
				// '                    ' ''
				// '                    ''const ERROR_DS_NO_BEHAVIOR_VERSION_IN_MIXEDDOMAIN 8569L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NOT_SUPPORTED_SORT_ORDER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The sort order requested is not supported.
				// '                    ' ''
				// '                    ''const ERROR_DS_NOT_SUPPORTED_SORT_ORDER 8570L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NAME_NOT_UNIQUE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested name already exists as a unique identifier.
				// '                    ' ''
				// '                    ''const ERROR_DS_NAME_NOT_UNIQUE         8571L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_MACHINE_ACCOUNT_CREATED_PRENT4
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The machine account was created pre-NT4.  The account needs to be recreated.
				// '                    ' ''
				// '                    ''const ERROR_DS_MACHINE_ACCOUNT_CREATED_PRENT4 8572L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_OUT_OF_VERSION_STORE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The database is [Out ] of version store.
				// '                    ' ''
				// '                    ''const ERROR_DS_OUT_OF_VERSION_STORE    8573L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_INCOMPATIBLE_CONTROLS_USED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unable to continue operation because multiple conflicting controls were used.
				// '                    ' ''
				// '                    ''const ERROR_DS_INCOMPATIBLE_CONTROLS_USED 8574L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NO_REF_DOMAIN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unable to find a valid security descriptor reference domain for this partition.
				// '                    ' ''
				// '                    ''const ERROR_DS_NO_REF_DOMAIN           8575L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_RESERVED_LINK_ID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Schema update failed: The link identifier is reserved.
				// '                    ' ''
				// '                    ''const ERROR_DS_RESERVED_LINK_ID        8576L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_LINK_ID_NOT_AVAILABLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Schema update failed: There are no link identifiers available.
				// '                    ' ''
				// '                    ''const ERROR_DS_LINK_ID_NOT_AVAILABLE   8577L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An account group can not have a universal group as a member.
				// '                    ' ''
				// '                    ''const ERROR_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER 8578L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_MODIFYDN_DISALLOWED_BY_INSTANCE_TYPE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Rename or move operations on naming context heads or read-only objects are not allowed.
				// '                    ' ''
				// '                    ''const ERROR_DS_MODIFYDN_DISALLOWED_BY_INSTANCE_TYPE 8579L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NO_OBJECT_MOVE_IN_SCHEMA_NC
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Move operations on objects in the schema naming context are not allowed.
				// '                    ' ''
				// '                    ''const ERROR_DS_NO_OBJECT_MOVE_IN_SCHEMA_NC 8580L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_MODIFYDN_DISALLOWED_BY_FLAG
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A system flag has been set on the object and does not allow the object to be moved or renamed.
				// '                    ' ''
				// '                    ''const ERROR_DS_MODIFYDN_DISALLOWED_BY_FLAG 8581L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_MODIFYDN_WRONG_GRANDPARENT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' This object is not allowed to change its grandparent container. Moves are not forbidden on this object, but are restricted to sibling containers.
				// '                    ' ''
				// '                    ''const ERROR_DS_MODIFYDN_WRONG_GRANDPARENT 8582L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NAME_ERROR_TRUST_REFERRAL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unable to resolve completely, a referral to another forest is generated.
				// '                    ' ''
				// '                    ''const ERROR_DS_NAME_ERROR_TRUST_REFERRAL 8583L

				// '                    ' ''
				// '                    ''MessageId: ERROR_NOT_SUPPORTED_ON_STANDARD_SERVER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested action is not supported on standard server.
				// '                    ' ''
				// '                    ''const ERROR_NOT_SUPPORTED_ON_STANDARD_SERVER 8584L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CANT_ACCESS_REMOTE_PART_OF_AD
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Could not access a partition of the Active Directory located on a remote server.  Make sure at least one server is running for the partition in question.
				// '                    ' ''
				// '                    ''const ERROR_DS_CANT_ACCESS_REMOTE_PART_OF_AD 8585L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CR_IMPOSSIBLE_TO_VALIDATE_V2
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The directory cannot validate the proposed naming context (or partition) name because it does not hold a replica nor can it contact a replica of the naming context above the proposed naming context.  Please ensure that the parent naming context is properly registered in DNS, and at least one replica of this naming context is reachable by the Domain Naming master.
				// '                    ' ''
				// '                    ''const ERROR_DS_CR_IMPOSSIBLE_TO_VALIDATE_V2 8586L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_THREAD_LIMIT_EXCEEDED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The thread limit for this request was exceeded.
				// '                    ' ''
				// '                    ''const ERROR_DS_THREAD_LIMIT_EXCEEDED   8587L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NOT_CLOSEST
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The Global catalog server is not in the closest site.
				// '                    ' ''
				// '                    ''const ERROR_DS_NOT_CLOSEST             8588L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CANT_DERIVE_SPN_WITHOUT_SERVER_REF
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The DS cannot derive a service principal name (SPN) with which to mutually authenticate the target server because the corresponding server object in the local DS database has no serverReference attribute.
				// '                    ' ''
				// '                    ''const ERROR_DS_CANT_DERIVE_SPN_WITHOUT_SERVER_REF 8589L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_SINGLE_USER_MODE_FAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The Directory Service failed to enter single user mode.
				// '                    ' ''
				// '                    ''const ERROR_DS_SINGLE_USER_MODE_FAILED 8590L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NTDSCRIPT_SYNTAX_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The Directory Service cannot parse the script because of a syntax error.
				// '                    ' ''
				// '                    ''const ERROR_DS_NTDSCRIPT_SYNTAX_ERROR  8591L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NTDSCRIPT_PROCESS_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The Directory Service cannot process the script because of an error.
				// '                    ' ''
				// '                    ''const ERROR_DS_NTDSCRIPT_PROCESS_ERROR 8592L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DIFFERENT_REPL_EPOCHS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The directory service cannot perform the requested operation because the servers
				// '                    '' involved are of different replication epochs (which is usually related to a
				// '                    '' domain rename that is in progress).
				// '                    ' ''
				// '                    ''const ERROR_DS_DIFFERENT_REPL_EPOCHS   8593L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DRS_EXTENSIONS_CHANGED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The directory service binding must be renegotiated due to a change in the server
				// '                    '' extensions information.
				// '                    ' ''
				// '                    ''const ERROR_DS_DRS_EXTENSIONS_CHANGED  8594L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_REPLICA_SET_CHANGE_NOT_ALLOWED_ON_DISABLED_CR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Operation not allowed on a disabled cross ref.
				// '                    ' ''
				// '                    ''const ERROR_DS_REPLICA_SET_CHANGE_NOT_ALLOWED_ON_DISABLED_CR 8595L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_NO_MSDS_INTID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Schema update failed: No values for msDS-IntId are available.
				// '                    ' ''
				// '                    ''const ERROR_DS_NO_MSDS_INTID           8596L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DUP_MSDS_INTID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Schema update failed: Duplicate msDS-INtId. Retry the operation.
				// '                    ' ''
				// '                    ''const ERROR_DS_DUP_MSDS_INTID          8597L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_EXISTS_IN_RDNATTID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Schema deletion failed: attribute is used in rDNAttID.
				// '                    ' ''
				// '                    ''const ERROR_DS_EXISTS_IN_RDNATTID      8598L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_AUTHORIZATION_FAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The directory service failed to authorize the request.
				// '                    ' ''
				// '                    ''const ERROR_DS_AUTHORIZATION_FAILED    8599L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_INVALID_SCRIPT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The Directory Service cannot process the script because it is invalid.
				// '                    ' ''
				// '                    ''const ERROR_DS_INVALID_SCRIPT          8600L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_REMOTE_CROSSREF_OP_FAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The remote create cross reference operation failed on the Domain Naming Master FSMO.  The operation's error is in the extended data.
				// '                    ' ''
				// '                    ''const ERROR_DS_REMOTE_CROSSREF_OP_FAILED 8601L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CROSS_REF_BUSY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A cross reference is in use locally with the same name.
				// '                    ' ''
				// '                    ''const ERROR_DS_CROSS_REF_BUSY          8602L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CANT_DERIVE_SPN_FOR_DELETED_DOMAIN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The DS cannot derive a service principal name (SPN) with which to mutually authenticate the target server because the server's domain has been deleted from the forest.
				// '                    ' ''
				// '                    ''const ERROR_DS_CANT_DERIVE_SPN_FOR_DELETED_DOMAIN 8603L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CANT_DEMOTE_WITH_WRITEABLE_NC
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Writeable NCs prevent this DC from demoting.
				// '                    ' ''
				// '                    ''const ERROR_DS_CANT_DEMOTE_WITH_WRITEABLE_NC 8604L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DUPLICATE_ID_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested object has a non-unique identifier and cannot be retrieved.
				// '                    ' ''
				// '                    ''const ERROR_DS_DUPLICATE_ID_FOUND      8605L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_INSUFFICIENT_ATTR_TO_CREATE_OBJECT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Insufficient attributes were given to create an object.  This object may not exist because it may have been deleted and already garbage collected.
				// '                    ' ''
				// '                    ''const ERROR_DS_INSUFFICIENT_ATTR_TO_CREATE_OBJECT 8606L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_GROUP_CONVERSION_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The group cannot be converted due to attribute restrictions on the requested group type.
				// '                    ' ''
				// '                    ''const ERROR_DS_GROUP_CONVERSION_ERROR  8607L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CANT_MOVE_APP_BASIC_GROUP
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Cross-domain move of non-empty basic application groups is not allowed.
				// '                    ' ''
				// '                    ''const ERROR_DS_CANT_MOVE_APP_BASIC_GROUP 8608L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_CANT_MOVE_APP_QUERY_GROUP
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Cross-domain move of non-empty query based application groups is not allowed.
				// '                    ' ''
				// '                    ''const ERROR_DS_CANT_MOVE_APP_QUERY_GROUP 8609L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_ROLE_NOT_VERIFIED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The FSMO role ownership could not be verified because its directory partition has not replicated successfully with atleast one replication partner. 
				// '                    ' ''
				// '                    ''const ERROR_DS_ROLE_NOT_VERIFIED       8610L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_WKO_CONTAINER_CANNOT_BE_SPECIAL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The target container for a redirection of a well known object container cannot already be a special container.
				// '                    ' ''
				// '                    ''const ERROR_DS_WKO_CONTAINER_CANNOT_BE_SPECIAL 8611L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DOMAIN_RENAME_IN_PROGRESS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The Directory Service cannot perform the requested operation because a domain rename operation is in progress.
				// '                    ' ''
				// '                    ''const ERROR_DS_DOMAIN_RENAME_IN_PROGRESS 8612L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_EXISTING_AD_CHILD_NC
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The Active Directory detected an Active Directory child partition below the
				// '                    '' requested new partition name.  The Active Directory's partition heiarchy must
				// '                    '' be created in a top down method.
				// '                    ' ''
				// '                    ''const ERROR_DS_EXISTING_AD_CHILD_NC    8613L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_REPL_LIFETIME_EXCEEDED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The Active Directory cannot replicate with this server because the time since the last replication with this server has exceeded the tombstone lifetime.
				// '                    ' ''
				// '                    ''const ERROR_DS_REPL_LIFETIME_EXCEEDED  8614L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_DISALLOWED_IN_SYSTEM_CONTAINER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested operation is not allowed on an object under the system container.
				// '                    ' ''
				// '                    ''const ERROR_DS_DISALLOWED_IN_SYSTEM_CONTAINER 8615L

				// '                    ' ''
				// '                    ''MessageId: ERROR_DS_LDAP_SEND_QUEUE_FULL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The LDAP servers network send queue has filled up because the client is not
				// '                    '' processing the results of it's requests fast enough.  No more requests will
				// '                    '' be processed until the client catches up.  If the client does not catch up
				// '                    '' then it will be disconnected.
				// '                    ' ''
				// '                    ''const ERROR_DS_LDAP_SEND_QUEUE_FULL    8616L

				// '                    '''''''''''''''''''''''''''/
				// '                    ''                                               /
				// '                    ''    End of Active Directory Error Codes        /
				// '                    ''                                               /
				// '                    ''                 8000 to  8999                 /
				// '                    '''''''''''''''''''''''''''/


				// '                    '''''''''''''''''''''''''''/
				// '                    ''                                              '
				// '                    ''                 DNS Error Codes              '
				// '                    ''                                              '
				// '                    ''                  9000 to 9999                '
				// '                    '''''''''''''''''''''''''''/

				// '                    ''=============================
				// '                    ''Facility DNS Error Messages
				// '                    ''=============================

				// '                    ' ''
				// '                    '' DNS response codes.
				// '                    ' ''

				// '                    ''const DNS_ERROR_RESPONSE_CODES_BASE 9000

				// '                    ''const DNS_ERROR_RCODE_NO_ERROR NO_ERROR

				// '                    ''const DNS_ERROR_MASK = &h00002328 ' 9000 or DNS_ERROR_RESPONSE_CODES_BASE

				// '                    ''DNS_ERROR_RCODE_FORMAT_ERROR          = &h00002329
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_RCODE_FORMAT_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' DNS server unable to interpret format.
				// '                    ' ''
				// '                    ''const DNS_ERROR_RCODE_FORMAT_ERROR     9001L

				// '                    ''DNS_ERROR_RCODE_SERVER_FAILURE        = &h0000232a
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_RCODE_SERVER_FAILURE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' DNS server failure.
				// '                    ' ''
				// '                    ''const DNS_ERROR_RCODE_SERVER_FAILURE   9002L

				// '                    ''DNS_ERROR_RCODE_NAME_ERROR            = &h0000232b
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_RCODE_NAME_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' DNS name does not exist.
				// '                    ' ''
				// '                    ''const DNS_ERROR_RCODE_NAME_ERROR       9003L

				// '                    ''DNS_ERROR_RCODE_NOT_IMPLEMENTED       = &h0000232c
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_RCODE_NOT_IMPLEMENTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' DNS request not supported by name server.
				// '                    ' ''
				// '                    ''const DNS_ERROR_RCODE_NOT_IMPLEMENTED  9004L

				// '                    ''DNS_ERROR_RCODE_REFUSED               = &h0000232d
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_RCODE_REFUSED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' DNS operation refused.
				// '                    ' ''
				// '                    ''const DNS_ERROR_RCODE_REFUSED          9005L

				// '                    ''DNS_ERROR_RCODE_YXDOMAIN              = &h0000232e
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_RCODE_YXDOMAIN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' DNS name that ought not exist, does exist.
				// '                    ' ''
				// '                    ''const DNS_ERROR_RCODE_YXDOMAIN         9006L

				// '                    ''DNS_ERROR_RCODE_YXRRSET               = &h0000232f
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_RCODE_YXRRSET
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' DNS RR set that ought not exist, does exist.
				// '                    ' ''
				// '                    ''const DNS_ERROR_RCODE_YXRRSET          9007L

				// '                    ''DNS_ERROR_RCODE_NXRRSET               = &h00002330
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_RCODE_NXRRSET
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' DNS RR set that ought to exist, does not exist.
				// '                    ' ''
				// '                    ''const DNS_ERROR_RCODE_NXRRSET          9008L

				// '                    ''DNS_ERROR_RCODE_NOTAUTH               = &h00002331
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_RCODE_NOTAUTH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' DNS server not authoritative for zone.
				// '                    ' ''
				// '                    ''const DNS_ERROR_RCODE_NOTAUTH          9009L

				// '                    ''DNS_ERROR_RCODE_NOTZONE               = &h00002332
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_RCODE_NOTZONE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' DNS name in update or prereq is not in zone.
				// '                    ' ''
				// '                    ''const DNS_ERROR_RCODE_NOTZONE          9010L

				// '                    ''DNS_ERROR_RCODE_BADSIG                = &h00002338
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_RCODE_BADSIG
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' DNS signature failed to verify.
				// '                    ' ''
				// '                    ''const DNS_ERROR_RCODE_BADSIG           9016L

				// '                    ''DNS_ERROR_RCODE_BADKEY                = &h00002339
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_RCODE_BADKEY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' DNS bad key.
				// '                    ' ''
				// '                    ''const DNS_ERROR_RCODE_BADKEY           9017L

				// '                    ''DNS_ERROR_RCODE_BADTIME               = &h0000233a
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_RCODE_BADTIME
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' DNS signature validity expired.
				// '                    ' ''
				// '                    ''const DNS_ERROR_RCODE_BADTIME          9018L

				// '                    ''const DNS_ERROR_RCODE_LAST DNS_ERROR_RCODE_BADTIME


				// '                    ' ''
				// '                    '' Packet format
				// '                    ' ''

				// '                    ''const DNS_ERROR_PACKET_FMT_BASE 9500

				// '                    ''DNS_INFO_NO_RECORDS                   = &h0000251d
				// '                    ' ''
				// '                    ''MessageId: DNS_INFO_NO_RECORDS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' No records found for given DNS query.
				// '                    ' ''
				// '                    ''const DNS_INFO_NO_RECORDS              9501L

				// '                    ''DNS_ERROR_BAD_PACKET                  = &h0000251e
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_BAD_PACKET
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Bad DNS packet.
				// '                    ' ''
				// '                    ''const DNS_ERROR_BAD_PACKET             9502L

				// '                    ''DNS_ERROR_NO_PACKET                   = &h0000251f
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_NO_PACKET
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' No DNS packet.
				// '                    ' ''
				// '                    ''const DNS_ERROR_NO_PACKET              9503L

				// '                    ''DNS_ERROR_RCODE                       = &h00002520
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_RCODE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' DNS error, check rcode.
				// '                    ' ''
				// '                    ''const DNS_ERROR_RCODE                  9504L

				// '                    ''DNS_ERROR_UNSECURE_PACKET             = &h00002521
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_UNSECURE_PACKET
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unsecured DNS packet.
				// '                    ' ''
				// '                    ''const DNS_ERROR_UNSECURE_PACKET        9505L

				// '                    ''const DNS_STATUS_PACKET_UNSECURE DNS_ERROR_UNSECURE_PACKET


				// '                    ' ''
				// '                    '' General API errors
				// '                    ' ''

				// '                    ''const DNS_ERROR_NO_MEMORY            ERROR_OUTOFMEMORY
				// '                    ''const DNS_ERROR_INVALID_NAME         ERROR_INVALID_NAME
				// '                    ''const DNS_ERROR_INVALID_DATA         ERROR_INVALID_DATA

				// '                    ''const DNS_ERROR_GENERAL_API_BASE 9550

				// '                    ''DNS_ERROR_INVALID_TYPE                = &h0000254f
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_INVALID_TYPE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid DNS type.
				// '                    ' ''
				// '                    ''const DNS_ERROR_INVALID_TYPE           9551L

				// '                    ''DNS_ERROR_INVALID_IP_ADDRESS          = &h00002550
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_INVALID_IP_ADDRESS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid IP address.
				// '                    ' ''
				// '                    ''const DNS_ERROR_INVALID_IP_ADDRESS     9552L

				// '                    ''DNS_ERROR_INVALID_PROPERTY            = &h00002551
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_INVALID_PROPERTY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid property.
				// '                    ' ''
				// '                    ''const DNS_ERROR_INVALID_PROPERTY       9553L

				// '                    ''DNS_ERROR_TRY_AGAIN_LATER             = &h00002552
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_TRY_AGAIN_LATER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Try DNS operation again later.
				// '                    ' ''
				// '                    ''const DNS_ERROR_TRY_AGAIN_LATER        9554L

				// '                    ''DNS_ERROR_NOT_UNIQUE                  = &h00002553
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_NOT_UNIQUE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Record for given name and type is not unique.
				// '                    ' ''
				// '                    ''const DNS_ERROR_NOT_UNIQUE             9555L

				// '                    ''DNS_ERROR_NON_RFC_NAME                = &h00002554
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_NON_RFC_NAME
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' DNS name does not comply with RFC specifications.
				// '                    ' ''
				// '                    ''const DNS_ERROR_NON_RFC_NAME           9556L

				// '                    ''DNS_STATUS_FQDN                       = &h00002555
				// '                    ' ''
				// '                    ''MessageId: DNS_STATUS_FQDN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' DNS name is a fully-qualified DNS name.
				// '                    ' ''
				// '                    ''const DNS_STATUS_FQDN                  9557L

				// '                    ''DNS_STATUS_DOTTED_NAME                = &h00002556
				// '                    ' ''
				// '                    ''MessageId: DNS_STATUS_DOTTED_NAME
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' DNS name is dotted (multi-label).
				// '                    ' ''
				// '                    ''const DNS_STATUS_DOTTED_NAME           9558L

				// '                    ''DNS_STATUS_SINGLE_PART_NAME           = &h00002557
				// '                    ' ''
				// '                    ''MessageId: DNS_STATUS_SINGLE_PART_NAME
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' DNS name is a single-part name.
				// '                    ' ''
				// '                    ''const DNS_STATUS_SINGLE_PART_NAME      9559L

				// '                    ''DNS_ERROR_INVALID_NAME_CHAR           = &h00002558
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_INVALID_NAME_CHAR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' DNS name contains an invalid character.
				// '                    ' ''
				// '                    ''const DNS_ERROR_INVALID_NAME_CHAR      9560L

				// '                    ''DNS_ERROR_NUMERIC_NAME                = &h00002559
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_NUMERIC_NAME
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' DNS name is entirely numeric.
				// '                    ' ''
				// '                    ''const DNS_ERROR_NUMERIC_NAME           9561L

				// '                    ''DNS_ERROR_NOT_ALLOWED_ON_ROOT_SERVER  = &h0000255A
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_NOT_ALLOWED_ON_ROOT_SERVER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The operation requested is not permitted on a DNS root server.
				// '                    ' ''
				// '                    ''const DNS_ERROR_NOT_ALLOWED_ON_ROOT_SERVER 9562L

				// '                    ''DNS_ERROR_NOT_ALLOWED_UNDER_DELEGATION  = &h0000255B
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_NOT_ALLOWED_UNDER_DELEGATION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The record could not be created because this part of the DNS namespace has
				// '                    '' been delegated to another server.
				// '                    ' ''
				// '                    ''const DNS_ERROR_NOT_ALLOWED_UNDER_DELEGATION 9563L

				// '                    ''DNS_ERROR_CANNOT_FIND_ROOT_HINTS  = &h0000255C
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_CANNOT_FIND_ROOT_HINTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The DNS server could not find a set of root hints.
				// '                    ' ''
				// '                    ''const DNS_ERROR_CANNOT_FIND_ROOT_HINTS 9564L

				// '                    ''DNS_ERROR_INCONSISTENT_ROOT_HINTS  = &h0000255D
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_INCONSISTENT_ROOT_HINTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The DNS server found root hints but they were not consistent across
				// '                    '' all adapters.
				// '                    ' ''
				// '                    ''const DNS_ERROR_INCONSISTENT_ROOT_HINTS 9565L


				// '                    ' ''
				// '                    '' Zone errors
				// '                    ' ''

				// '                    ''const DNS_ERROR_ZONE_BASE 9600

				// '                    ''DNS_ERROR_ZONE_DOES_NOT_EXIST         = &h00002581
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_ZONE_DOES_NOT_EXIST
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' DNS zone does not exist.
				// '                    ' ''
				// '                    ''const DNS_ERROR_ZONE_DOES_NOT_EXIST    9601L

				// '                    ''DNS_ERROR_NO_ZONE_INFO                = &h00002582
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_NO_ZONE_INFO
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' DNS zone information not available.
				// '                    ' ''
				// '                    ''const DNS_ERROR_NO_ZONE_INFO           9602L

				// '                    ''DNS_ERROR_INVALID_ZONE_OPERATION      = &h00002583
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_INVALID_ZONE_OPERATION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid operation for DNS zone.
				// '                    ' ''
				// '                    ''const DNS_ERROR_INVALID_ZONE_OPERATION 9603L

				// '                    ''DNS_ERROR_ZONE_CONFIGURATION_ERROR    = &h00002584
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_ZONE_CONFIGURATION_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid DNS zone configuration.
				// '                    ' ''
				// '                    ''const DNS_ERROR_ZONE_CONFIGURATION_ERROR 9604L

				// '                    ''DNS_ERROR_ZONE_HAS_NO_SOA_RECORD      = &h00002585
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_ZONE_HAS_NO_SOA_RECORD
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' DNS zone has no start of authority (SOA) record.
				// '                    ' ''
				// '                    ''const DNS_ERROR_ZONE_HAS_NO_SOA_RECORD 9605L

				// '                    ''DNS_ERROR_ZONE_HAS_NO_NS_RECORDS      = &h00002586
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_ZONE_HAS_NO_NS_RECORDS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' DNS zone has no Name Server (NS) record.
				// '                    ' ''
				// '                    ''const DNS_ERROR_ZONE_HAS_NO_NS_RECORDS 9606L

				// '                    ''DNS_ERROR_ZONE_LOCKED                 = &h00002587
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_ZONE_LOCKED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' DNS zone is locked.
				// '                    ' ''
				// '                    ''const DNS_ERROR_ZONE_LOCKED            9607L

				// '                    ''DNS_ERROR_ZONE_CREATION_FAILED        = &h00002588
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_ZONE_CREATION_FAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' DNS zone creation failed.
				// '                    ' ''
				// '                    ''const DNS_ERROR_ZONE_CREATION_FAILED   9608L

				// '                    ''DNS_ERROR_ZONE_ALREADY_EXISTS         = &h00002589
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_ZONE_ALREADY_EXISTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' DNS zone already exists.
				// '                    ' ''
				// '                    ''const DNS_ERROR_ZONE_ALREADY_EXISTS    9609L

				// '                    ''DNS_ERROR_AUTOZONE_ALREADY_EXISTS     = &h0000258a
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_AUTOZONE_ALREADY_EXISTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' DNS automatic zone already exists.
				// '                    ' ''
				// '                    ''const DNS_ERROR_AUTOZONE_ALREADY_EXISTS 9610L

				// '                    ''DNS_ERROR_INVALID_ZONE_TYPE           = &h0000258b
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_INVALID_ZONE_TYPE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid DNS zone type.
				// '                    ' ''
				// '                    ''const DNS_ERROR_INVALID_ZONE_TYPE      9611L

				// '                    ''DNS_ERROR_SECONDARY_REQUIRES_MASTER_IP = &h0000258c
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_SECONDARY_REQUIRES_MASTER_IP
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Secondary DNS zone requires master IP address.
				// '                    ' ''
				// '                    ''const DNS_ERROR_SECONDARY_REQUIRES_MASTER_IP 9612L

				// '                    ''DNS_ERROR_ZONE_NOT_SECONDARY          = &h0000258d
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_ZONE_NOT_SECONDARY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' DNS zone not secondary.
				// '                    ' ''
				// '                    ''const DNS_ERROR_ZONE_NOT_SECONDARY     9613L

				// '                    ''DNS_ERROR_NEED_SECONDARY_ADDRESSES    = &h0000258e
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_NEED_SECONDARY_ADDRESSES
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Need secondary IP address.
				// '                    ' ''
				// '                    ''const DNS_ERROR_NEED_SECONDARY_ADDRESSES 9614L

				// '                    ''DNS_ERROR_WINS_INIT_FAILED            = &h0000258f
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_WINS_INIT_FAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' WINS initialization failed.
				// '                    ' ''
				// '                    ''const DNS_ERROR_WINS_INIT_FAILED       9615L

				// '                    ''DNS_ERROR_NEED_WINS_SERVERS           = &h00002590
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_NEED_WINS_SERVERS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Need WINS servers.
				// '                    ' ''
				// '                    ''const DNS_ERROR_NEED_WINS_SERVERS      9616L

				// '                    ''DNS_ERROR_NBSTAT_INIT_FAILED          = &h00002591
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_NBSTAT_INIT_FAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' NBTSTAT initialization call failed.
				// '                    ' ''
				// '                    ''const DNS_ERROR_NBSTAT_INIT_FAILED     9617L

				// '                    ''DNS_ERROR_SOA_DELETE_INVALID          = &h00002592
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_SOA_DELETE_INVALID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid delete of start of authority (SOA)
				// '                    ' ''
				// '                    ''const DNS_ERROR_SOA_DELETE_INVALID     9618L

				// '                    ''DNS_ERROR_FORWARDER_ALREADY_EXISTS    = &h00002593
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_FORWARDER_ALREADY_EXISTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A conditional forwarding zone already exists for that name.
				// '                    ' ''
				// '                    ''const DNS_ERROR_FORWARDER_ALREADY_EXISTS 9619L

				// '                    ''DNS_ERROR_ZONE_REQUIRES_MASTER_IP     = &h00002594
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_ZONE_REQUIRES_MASTER_IP
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' This zone must be configured with one or more master DNS server IP addresses.
				// '                    ' ''
				// '                    ''const DNS_ERROR_ZONE_REQUIRES_MASTER_IP 9620L

				// '                    ''DNS_ERROR_ZONE_IS_SHUTDOWN            = &h00002595
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_ZONE_IS_SHUTDOWN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The operation cannot be performed because this zone is shutdown.
				// '                    ' ''
				// '                    ''const DNS_ERROR_ZONE_IS_SHUTDOWN       9621L


				// '                    ' ''
				// '                    '' Datafile errors
				// '                    ' ''

				// '                    ''const DNS_ERROR_DATAFILE_BASE 9650

				// '                    ''DNS                                   = &h000025b3
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_PRIMARY_REQUIRES_DATAFILE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Primary DNS zone requires datafile.
				// '                    ' ''
				// '                    ''const DNS_ERROR_PRIMARY_REQUIRES_DATAFILE 9651L

				// '                    ''DNS                                   = &h000025b4
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_INVALID_DATAFILE_NAME
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid datafile name for DNS zone.
				// '                    ' ''
				// '                    ''const DNS_ERROR_INVALID_DATAFILE_NAME  9652L

				// '                    ''DNS                                   = &h000025b5
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_DATAFILE_OPEN_FAILURE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Failed to open datafile for DNS zone.
				// '                    ' ''
				// '                    ''const DNS_ERROR_DATAFILE_OPEN_FAILURE  9653L

				// '                    ''DNS                                   = &h000025b6
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_FILE_WRITEBACK_FAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Failed to write datafile for DNS zone.
				// '                    ' ''
				// '                    ''const DNS_ERROR_FILE_WRITEBACK_FAILED  9654L

				// '                    ''DNS                                   = &h000025b7
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_DATAFILE_PARSING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Failure while reading datafile for DNS zone.
				// '                    ' ''
				// '                    ''const DNS_ERROR_DATAFILE_PARSING       9655L


				// '                    ' ''
				// '                    '' Database errors
				// '                    ' ''

				// '                    ''const DNS_ERROR_DATABASE_BASE 9700

				// '                    ''DNS_ERROR_RECORD_DOES_NOT_EXIST       = &h000025e5
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_RECORD_DOES_NOT_EXIST
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' DNS record does not exist.
				// '                    ' ''
				// '                    ''const DNS_ERROR_RECORD_DOES_NOT_EXIST  9701L

				// '                    ''DNS_ERROR_RECORD_FORMAT               = &h000025e6
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_RECORD_FORMAT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' DNS record format error.
				// '                    ' ''
				// '                    ''const DNS_ERROR_RECORD_FORMAT          9702L

				// '                    ''DNS_ERROR_NODE_CREATION_FAILED        = &h000025e7
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_NODE_CREATION_FAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Node creation failure in DNS.
				// '                    ' ''
				// '                    ''const DNS_ERROR_NODE_CREATION_FAILED   9703L

				// '                    ''DNS_ERROR_UNKNOWN_RECORD_TYPE         = &h000025e8
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_UNKNOWN_RECORD_TYPE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unknown DNS record type.
				// '                    ' ''
				// '                    ''const DNS_ERROR_UNKNOWN_RECORD_TYPE    9704L

				// '                    ''DNS_ERROR_RECORD_TIMED_OUT            = &h000025e9
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_RECORD_TIMED_OUT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' DNS record timed out.
				// '                    ' ''
				// '                    ''const DNS_ERROR_RECORD_TIMED_OUT       9705L

				// '                    ''DNS_ERROR_NAME_NOT_IN_ZONE            = &h000025ea
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_NAME_NOT_IN_ZONE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Name not in DNS zone.
				// '                    ' ''
				// '                    ''const DNS_ERROR_NAME_NOT_IN_ZONE       9706L

				// '                    ''DNS_ERROR_CNAME_LOOP                  = &h000025eb
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_CNAME_LOOP
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' CNAME loop detected.
				// '                    ' ''
				// '                    ''const DNS_ERROR_CNAME_LOOP             9707L

				// '                    ''DNS_ERROR_NODE_IS_CNAME               = &h000025ec
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_NODE_IS_CNAME
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Node is a CNAME DNS record.
				// '                    ' ''
				// '                    ''const DNS_ERROR_NODE_IS_CNAME          9708L

				// '                    ''DNS_ERROR_CNAME_COLLISION             = &h000025ed
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_CNAME_COLLISION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A CNAME record already exists for given name.
				// '                    ' ''
				// '                    ''const DNS_ERROR_CNAME_COLLISION        9709L

				// '                    ''DNS_ERROR_RECORD_ONLY_AT_ZONE_ROOT    = &h000025ee
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_RECORD_ONLY_AT_ZONE_ROOT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Record only at DNS zone root.
				// '                    ' ''
				// '                    ''const DNS_ERROR_RECORD_ONLY_AT_ZONE_ROOT 9710L

				// '                    ''DNS_ERROR_RECORD_ALREADY_EXISTS       = &h000025ef
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_RECORD_ALREADY_EXISTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' DNS record already exists.
				// '                    ' ''
				// '                    ''const DNS_ERROR_RECORD_ALREADY_EXISTS  9711L

				// '                    ''DNS_ERROR_SECONDARY_DATA              = &h000025f0
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_SECONDARY_DATA
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Secondary DNS zone data error.
				// '                    ' ''
				// '                    ''const DNS_ERROR_SECONDARY_DATA         9712L

				// '                    ''DNS_ERROR_NO_CREATE_CACHE_DATA        = &h000025f1
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_NO_CREATE_CACHE_DATA
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Could not create DNS cache data.
				// '                    ' ''
				// '                    ''const DNS_ERROR_NO_CREATE_CACHE_DATA   9713L

				// '                    ''DNS_ERROR_NAME_DOES_NOT_EXIST         = &h000025f2
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_NAME_DOES_NOT_EXIST
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' DNS name does not exist.
				// '                    ' ''
				// '                    ''const DNS_ERROR_NAME_DOES_NOT_EXIST    9714L

				// '                    ''DNS_WARNING_PTR_CREATE_FAILED         = &h000025f3
				// '                    ' ''
				// '                    ''MessageId: DNS_WARNING_PTR_CREATE_FAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Could not create pointer (PTR) record.
				// '                    ' ''
				// '                    ''const DNS_WARNING_PTR_CREATE_FAILED    9715L

				// '                    ''DNS_WARNING_DOMAIN_UNDELETED          = &h000025f4
				// '                    ' ''
				// '                    ''MessageId: DNS_WARNING_DOMAIN_UNDELETED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' DNS domain was undeleted.
				// '                    ' ''
				// '                    ''const DNS_WARNING_DOMAIN_UNDELETED     9716L

				// '                    ''DNS_ERROR_DS_UNAVAILABLE              = &h000025f5
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_DS_UNAVAILABLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The directory service is unavailable.
				// '                    ' ''
				// '                    ''const DNS_ERROR_DS_UNAVAILABLE         9717L

				// '                    ''DNS_ERROR_DS_ZONE_ALREADY_EXISTS      = &h000025f6
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_DS_ZONE_ALREADY_EXISTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' DNS zone already exists in the directory service.
				// '                    ' ''
				// '                    ''const DNS_ERROR_DS_ZONE_ALREADY_EXISTS 9718L

				// '                    ''DNS_ERROR_NO_BOOTFILE_IF_DS_ZONE      = &h000025f7
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_NO_BOOTFILE_IF_DS_ZONE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' DNS server not creating or reading the boot file for the directory service integrated DNS zone.
				// '                    ' ''
				// '                    ''const DNS_ERROR_NO_BOOTFILE_IF_DS_ZONE 9719L


				// '                    ' ''
				// '                    '' Operation errors
				// '                    ' ''

				// '                    ''const DNS_ERROR_OPERATION_BASE 9750

				// '                    ''DNS_INFO_AXFR_COMPLETE                = &h00002617
				// '                    ' ''
				// '                    ''MessageId: DNS_INFO_AXFR_COMPLETE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' DNS AXFR (zone transfer) complete.
				// '                    ' ''
				// '                    ''const DNS_INFO_AXFR_COMPLETE           9751L

				// '                    ''DNS_ERROR_AXFR                        = &h00002618
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_AXFR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' DNS zone transfer failed.
				// '                    ' ''
				// '                    ''const DNS_ERROR_AXFR                   9752L

				// '                    ''DNS_INFO_ADDED_LOCAL_WINS             = &h00002619
				// '                    ' ''
				// '                    ''MessageId: DNS_INFO_ADDED_LOCAL_WINS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Added local WINS server.
				// '                    ' ''
				// '                    ''const DNS_INFO_ADDED_LOCAL_WINS        9753L


				// '                    ' ''
				// '                    '' Secure update
				// '                    ' ''

				// '                    ''const DNS_ERROR_SECURE_BASE 9800

				// '                    ''DNS_STATUS_CONTINUE_NEEDED            = &h00002649
				// '                    ' ''
				// '                    ''MessageId: DNS_STATUS_CONTINUE_NEEDED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Secure update call needs to continue update request.
				// '                    ' ''
				// '                    ''const DNS_STATUS_CONTINUE_NEEDED       9801L


				// '                    ' ''
				// '                    '' Setup errors
				// '                    ' ''

				// '                    ''const DNS_ERROR_SETUP_BASE 9850

				// '                    ''DNS_ERROR_NO_TCPIP                    = &h0000267b
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_NO_TCPIP
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' TCP/IP network protocol not installed.
				// '                    ' ''
				// '                    ''const DNS_ERROR_NO_TCPIP               9851L

				// '                    ''DNS_ERROR_NO_DNS_SERVERS              = &h0000267c
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_NO_DNS_SERVERS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' No DNS servers configured for local system.
				// '                    ' ''
				// '                    ''const DNS_ERROR_NO_DNS_SERVERS         9852L


				// '                    ' ''
				// '                    '' Directory partition (DP) errors
				// '                    ' ''

				// '                    ''const DNS_ERROR_DP_BASE 9900

				// '                    ''DNS_ERROR_DP_DOES_NOT_EXIST           = &h000026ad
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_DP_DOES_NOT_EXIST
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified directory partition does not exist.
				// '                    ' ''
				// '                    ''const DNS_ERROR_DP_DOES_NOT_EXIST      9901L

				// '                    ''DNS_ERROR_DP_ALREADY_EXISTS           = &h000026ae
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_DP_ALREADY_EXISTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified directory partition already exists.
				// '                    ' ''
				// '                    ''const DNS_ERROR_DP_ALREADY_EXISTS      9902L

				// '                    ''DNS_ERROR_DP_NOT_ENLISTED             = &h000026af
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_DP_NOT_ENLISTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' This DNS server is not enlisted in the specified directory partition.
				// '                    ' ''
				// '                    ''const DNS_ERROR_DP_NOT_ENLISTED        9903L

				// '                    ''DNS_ERROR_DP_ALREADY_ENLISTED         = &h000026b0
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_DP_ALREADY_ENLISTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' This DNS server is already enlisted in the specified directory partition.
				// '                    ' ''
				// '                    ''const DNS_ERROR_DP_ALREADY_ENLISTED    9904L

				// '                    ''DNS_ERROR_DP_NOT_AVAILABLE            = &h000026b1
				// '                    ' ''
				// '                    ''MessageId: DNS_ERROR_DP_NOT_AVAILABLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The directory partition is not available at this time. Please wait
				// '                    '' a few minutes and try again.
				// '                    ' ''
				// '                    ''const DNS_ERROR_DP_NOT_AVAILABLE       9905L

				// '                    '''''''''''''''''''''''''''/
				// '                    ''                                              '
				// '                    ''            End of DNS Error Codes            '
				// '                    ''                                              '
				// '                    ''                 9000 to 9999                 '
				// '                    '''''''''''''''''''''''''''/


				// '                    '''''''''''''''''''''''''''/
				// '                    ''                                              '
				// '                    ''              WinSock Error Codes             '
				// '                    ''                                              '
				// '                    ''                10000 to 11999                '
				// '                    '''''''''''''''''''''''''''/

				// '                    ' ''
				// '                    ''WinSock error codes are also defined in WinSock.h
				// '                    ''and WinSock2.h, hence the IFDEF
				// '                    ' ''
				// '                    ''#ifndef WSABASEERR
				// '                    ''const WSABASEERR 10000
				// '                    ' ''
				// '                    ''MessageId: WSAEINTR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A blocking operation was interrupted by a call to WSACancelBlockingCall.
				// '                    ' ''
				// '                    ''const WSAEINTR                         10004L

				// '                    ' ''
				// '                    ''MessageId: WSAEBADF
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The file handle supplied is not valid.
				// '                    ' ''
				// '                    ''const WSAEBADF                         10009L

				// '                    ' ''
				// '                    ''MessageId: WSAEACCES
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An attempt was made to access a socket in a way forbidden by its access permissions.
				// '                    ' ''
				// '                    ''const WSAEACCES                        10013L

				// '                    ' ''
				// '                    ''MessageId: WSAEFAULT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The system detected an invalid pointer address in attempting to use a pointer argument in a call.
				// '                    ' ''
				// '                    ''const WSAEFAULT                        10014L

				// '                    ' ''
				// '                    ''MessageId: WSAEINVAL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An invalid argument was supplied.
				// '                    ' ''
				// '                    ''const WSAEINVAL                        10022L

				// '                    ' ''
				// '                    ''MessageId: WSAEMFILE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Too many open sockets.
				// '                    ' ''
				// '                    ''const WSAEMFILE                        10024L

				// '                    ' ''
				// '                    ''MessageId: WSAEWOULDBLOCK
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A non-blocking socket operation could not be completed immediately.
				// '                    ' ''
				// '                    ''const WSAEWOULDBLOCK                   10035L

				// '                    ' ''
				// '                    ''MessageId: WSAEINPROGRESS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A blocking operation is currently e_runuting.
				// '                    ' ''
				// '                    ''const WSAEINPROGRESS                   10036L

				// '                    ' ''
				// '                    ''MessageId: WSAEALREADY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An operation was attempted on a non-blocking socket that already had an operation in progress.
				// '                    ' ''
				// '                    ''const WSAEALREADY                      10037L

				// '                    ' ''
				// '                    ''MessageId: WSAENOTSOCK
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An operation was attempted on something that is not a socket.
				// '                    ' ''
				// '                    ''const WSAENOTSOCK                      10038L

				// '                    ' ''
				// '                    ''MessageId: WSAEDESTADDRREQ
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A required address was omitted from an operation on a socket.
				// '                    ' ''
				// '                    ''const WSAEDESTADDRREQ                  10039L

				// '                    ' ''
				// '                    ''MessageId: WSAEMSGSIZE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A message sent on a datagram socket was larger than the internal message buffer or some other network limit, or the buffer used to receive a datagram into was smaller than the datagram itself.
				// '                    ' ''
				// '                    ''const WSAEMSGSIZE                      10040L

				// '                    ' ''
				// '                    ''MessageId: WSAEPROTOTYPE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A protocol was specified in the socket function call that does not support the semantics of the socket type requested.
				// '                    ' ''
				// '                    ''const WSAEPROTOTYPE                    10041L

				// '                    ' ''
				// '                    ''MessageId: WSAENOPROTOOPT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An unknown, invalid, or unsupported option or level was specified in a getsockopt or setsockopt call.
				// '                    ' ''
				// '                    ''const WSAENOPROTOOPT                   10042L

				// '                    ' ''
				// '                    ''MessageId: WSAEPROTONOSUPPORT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested protocol has not been configured into the system, or no implementation for it exists.
				// '                    ' ''
				// '                    ''const WSAEPROTONOSUPPORT               10043L

				// '                    ' ''
				// '                    ''MessageId: WSAESOCKTNOSUPPORT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The support for the specified socket type does not exist in this address family.
				// '                    ' ''
				// '                    ''const WSAESOCKTNOSUPPORT               10044L

				// '                    ' ''
				// '                    ''MessageId: WSAEOPNOTSUPP
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The attempted operation is not supported for the type of object referenced.
				// '                    ' ''
				// '                    ''const WSAEOPNOTSUPP                    10045L

				// '                    ' ''
				// '                    ''MessageId: WSAEPFNOSUPPORT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The protocol family has not been configured into the system or no implementation for it exists.
				// '                    ' ''
				// '                    ''const WSAEPFNOSUPPORT                  10046L

				// '                    ' ''
				// '                    ''MessageId: WSAEAFNOSUPPORT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An address incompatible with the requested protocol was used.
				// '                    ' ''
				// '                    ''const WSAEAFNOSUPPORT                  10047L

				// '                    ' ''
				// '                    ''MessageId: WSAEADDRINUSE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Only one usage of each socket address (protocol/network address/port) is normally permitted.
				// '                    ' ''
				// '                    ''const WSAEADDRINUSE                    10048L

				// '                    ' ''
				// '                    ''MessageId: WSAEADDRNOTAVAIL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested address is not valid in its context.
				// '                    ' ''
				// '                    ''const WSAEADDRNOTAVAIL                 10049L

				// '                    ' ''
				// '                    ''MessageId: WSAENETDOWN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A socket operation encountered a dead network.
				// '                    ' ''
				// '                    ''const WSAENETDOWN                      10050L

				// '                    ' ''
				// '                    ''MessageId: WSAENETUNREACH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A socket operation was attempted to an unreachable network.
				// '                    ' ''
				// '                    ''const WSAENETUNREACH                   10051L

				// '                    ' ''
				// '                    ''MessageId: WSAENETRESET
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The connection has been broken due to keep-alive activity detecting a failure while the operation was in progress.
				// '                    ' ''
				// '                    ''const WSAENETRESET                     10052L

				// '                    ' ''
				// '                    ''MessageId: WSAECONNABORTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An established connection was aborted by the software in your host machine.
				// '                    ' ''
				// '                    ''const WSAECONNABORTED                  10053L

				// '                    ' ''
				// '                    ''MessageId: WSAECONNRESET
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An existing connection was forcibly closed by the remote host.
				// '                    ' ''
				// '                    ''const WSAECONNRESET                    10054L

				// '                    ' ''
				// '                    ''MessageId: WSAENOBUFS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full.
				// '                    ' ''
				// '                    ''const WSAENOBUFS                       10055L

				// '                    ' ''
				// '                    ''MessageId: WSAEISCONN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A connect request was made on an already connected socket.
				// '                    ' ''
				// '                    ''const WSAEISCONN                       10056L

				// '                    ' ''
				// '                    ''MessageId: WSAENOTCONN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A request to send or receive data was disallowed because the socket is not connected and (when sending on a datagram socket using a sendto call) no address was supplied.
				// '                    ' ''
				// '                    ''const WSAENOTCONN                      10057L

				// '                    ' ''
				// '                    ''MessageId: WSAESHUTDOWN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A request to send or receive data was disallowed because the socket had already been shut down in that direction with a previous shutdown call.
				// '                    ' ''
				// '                    ''const WSAESHUTDOWN                     10058L

				// '                    ' ''
				// '                    ''MessageId: WSAETOOMANYREFS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Too many references to some kernel object.
				// '                    ' ''
				// '                    ''const WSAETOOMANYREFS                  10059L

				// '                    ' ''
				// '                    ''MessageId: WSAETIMEDOUT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
				// '                    ' ''
				// '                    ''const WSAETIMEDOUT                     10060L

				// '                    ' ''
				// '                    ''MessageId: WSAECONNREFUSED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' No connection could be made because the target machine actively refused it.
				// '                    ' ''
				// '                    ''const WSAECONNREFUSED                  10061L

				// '                    ' ''
				// '                    ''MessageId: WSAELOOP
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Cannot translate name.
				// '                    ' ''
				// '                    ''const WSAELOOP                         10062L

				// '                    ' ''
				// '                    ''MessageId: WSAENAMETOOLONG
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Name component or name was too long.
				// '                    ' ''
				// '                    ''const WSAENAMETOOLONG                  10063L

				// '                    ' ''
				// '                    ''MessageId: WSAEHOSTDOWN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A socket operation failed because the destination host was down.
				// '                    ' ''
				// '                    ''const WSAEHOSTDOWN                     10064L

				// '                    ' ''
				// '                    ''MessageId: WSAEHOSTUNREACH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A socket operation was attempted to an unreachable host.
				// '                    ' ''
				// '                    ''const WSAEHOSTUNREACH                  10065L

				// '                    ' ''
				// '                    ''MessageId: WSAENOTEMPTY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Cannot remove a directory that is not empty.
				// '                    ' ''
				// '                    ''const WSAENOTEMPTY                     10066L

				// '                    ' ''
				// '                    ''MessageId: WSAEPROCLIM
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A Windows Sockets implementation may have a limit on the number of applications that may use it simultaneously.
				// '                    ' ''
				// '                    ''const WSAEPROCLIM                      10067L

				// '                    ' ''
				// '                    ''MessageId: WSAEUSERS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Ran [Out ] of quota.
				// '                    ' ''
				// '                    ''const WSAEUSERS                        10068L

				// '                    ' ''
				// '                    ''MessageId: WSAEDQUOT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Ran [Out ] of disk quota.
				// '                    ' ''
				// '                    ''const WSAEDQUOT                        10069L

				// '                    ' ''
				// '                    ''MessageId: WSAESTALE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' File handle reference is no longer available.
				// '                    ' ''
				// '                    ''const WSAESTALE                        10070L

				// '                    ' ''
				// '                    ''MessageId: WSAEREMOTE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Item is not available locally.
				// '                    ' ''
				// '                    ''const WSAEREMOTE                       10071L

				// '                    ' ''
				// '                    ''MessageId: WSASYSNOTREADY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' WSAStartup cannot function at this time because the underlying system it uses to provide network services is currently unavailable.
				// '                    ' ''
				// '                    ''const WSASYSNOTREADY                   10091L

				// '                    ' ''
				// '                    ''MessageId: WSAVERNOTSUPPORTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The Windows Sockets version requested is not supported.
				// '                    ' ''
				// '                    ''const WSAVERNOTSUPPORTED               10092L

				// '                    ' ''
				// '                    ''MessageId: WSANOTINITIALISED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Either the application has not called WSAStartup, or WSAStartup failed.
				// '                    ' ''
				// '                    ''const WSANOTINITIALISED                10093L

				// '                    ' ''
				// '                    ''MessageId: WSAEDISCON
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Returned by WSARecv or WSARecvFrom to indicate the remote party has initiated a graceful shutdown sequence.
				// '                    ' ''
				// '                    ''const WSAEDISCON                       10101L

				// '                    ' ''
				// '                    ''MessageId: WSAENOMORE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' No more results can be returned by WSALookupServiceNext.
				// '                    ' ''
				// '                    ''const WSAENOMORE                       10102L

				// '                    ' ''
				// '                    ''MessageId: WSAECANCELLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A call to WSALookupServiceEnd was made while this call was still processing. The call has been canceled.
				// '                    ' ''
				// '                    ''const WSAECANCELLED                    10103L

				// '                    ' ''
				// '                    ''MessageId: WSAEINVALIDPROCTABLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The procedure call table is invalid.
				// '                    ' ''
				// '                    ''const WSAEINVALIDPROCTABLE             10104L

				// '                    ' ''
				// '                    ''MessageId: WSAEINVALIDPROVIDER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested service provider is invalid.
				// '                    ' ''
				// '                    ''const WSAEINVALIDPROVIDER              10105L

				// '                    ' ''
				// '                    ''MessageId: WSAEPROVIDERFAILEDINIT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested service provider could not be loaded or initialized.
				// '                    ' ''
				// '                    ''const WSAEPROVIDERFAILEDINIT           10106L

				// '                    ' ''
				// '                    ''MessageId: WSASYSCALLFAILURE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A system call that should never fail has failed.
				// '                    ' ''
				// '                    ''const WSASYSCALLFAILURE                10107L

				// '                    ' ''
				// '                    ''MessageId: WSASERVICE_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' No such service is known. The service cannot be found in the specified name space.
				// '                    ' ''
				// '                    ''const WSASERVICE_NOT_FOUND             10108L

				// '                    ' ''
				// '                    ''MessageId: WSATYPE_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified class was not found.
				// '                    ' ''
				// '                    ''const WSATYPE_NOT_FOUND                10109L

				// '                    ' ''
				// '                    ''MessageId: WSA_E_NO_MORE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' No more results can be returned by WSALookupServiceNext.
				// '                    ' ''
				// '                    ''const WSA_E_NO_MORE                    10110L

				// '                    ' ''
				// '                    ''MessageId: WSA_E_CANCELLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A call to WSALookupServiceEnd was made while this call was still processing. The call has been canceled.
				// '                    ' ''
				// '                    ''const WSA_E_CANCELLED                  10111L

				// '                    ' ''
				// '                    ''MessageId: WSAEREFUSED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A database query failed because it was actively refused.
				// '                    ' ''
				// '                    ''const WSAEREFUSED                      10112L

				// '                    ' ''
				// '                    ''MessageId: WSAHOST_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' No such host is known.
				// '                    ' ''
				// '                    ''const WSAHOST_NOT_FOUND                11001L

				// '                    ' ''
				// '                    ''MessageId: WSATRY_AGAIN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' This is usually a temporary error during hostname resolution and means that the local server did not receive a response from an authoritative server.
				// '                    ' ''
				// '                    ''const WSATRY_AGAIN                     11002L

				// '                    ' ''
				// '                    ''MessageId: WSANO_RECOVERY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A non-recoverable error occurred during a database lookup.
				// '                    ' ''
				// '                    ''const WSANO_RECOVERY                   11003L

				// '                    ' ''
				// '                    ''MessageId: WSANO_DATA
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested name is valid, but no data of the requested type was found.
				// '                    ' ''
				// '                    ''const WSANO_DATA                       11004L

				// '                    ' ''
				// '                    ''MessageId: WSA_QOS_RECEIVERS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' At least one reserve has arrived.
				// '                    ' ''
				// '                    ''const WSA_QOS_RECEIVERS                11005L

				// '                    ' ''
				// '                    ''MessageId: WSA_QOS_SENDERS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' At least one path has arrived.
				// '                    ' ''
				// '                    ''const WSA_QOS_SENDERS                  11006L

				// '                    ' ''
				// '                    ''MessageId: WSA_QOS_NO_SENDERS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' There are no senders.
				// '                    ' ''
				// '                    ''const WSA_QOS_NO_SENDERS               11007L

				// '                    ' ''
				// '                    ''MessageId: WSA_QOS_NO_RECEIVERS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' There are no receivers.
				// '                    ' ''
				// '                    ''const WSA_QOS_NO_RECEIVERS             11008L

				// '                    ' ''
				// '                    ''MessageId: WSA_QOS_REQUEST_CONFIRMED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Reserve has been confirmed.
				// '                    ' ''
				// '                    ''const WSA_QOS_REQUEST_CONFIRMED        11009L

				// '                    ' ''
				// '                    ''MessageId: WSA_QOS_ADMISSION_FAILURE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Error due to lack of resources.
				// '                    ' ''
				// '                    ''const WSA_QOS_ADMISSION_FAILURE        11010L

				// '                    ' ''
				// '                    ''MessageId: WSA_QOS_POLICY_FAILURE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Rejected for administrative reasons - bad credentials.
				// '                    ' ''
				// '                    ''const WSA_QOS_POLICY_FAILURE           11011L

				// '                    ' ''
				// '                    ''MessageId: WSA_QOS_BAD_STYLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unknown or conflicting style.
				// '                    ' ''
				// '                    ''const WSA_QOS_BAD_STYLE                11012L

				// '                    ' ''
				// '                    ''MessageId: WSA_QOS_BAD_OBJECT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Problem with some part of the filterspec or providerspecific buffer in general.
				// '                    ' ''
				// '                    ''const WSA_QOS_BAD_OBJECT               11013L

				// '                    ' ''
				// '                    ''MessageId: WSA_QOS_TRAFFIC_CTRL_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Problem with some part of the flowspec.
				// '                    ' ''
				// '                    ''const WSA_QOS_TRAFFIC_CTRL_ERROR       11014L

				// '                    ' ''
				// '                    ''MessageId: WSA_QOS_GENERIC_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' General QOS error.
				// '                    ' ''
				// '                    ''const WSA_QOS_GENERIC_ERROR            11015L

				// '                    ' ''
				// '                    ''MessageId: WSA_QOS_ESERVICETYPE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An invalid or unrecognized service type was found in the flowspec.
				// '                    ' ''
				// '                    ''const WSA_QOS_ESERVICETYPE             11016L

				// '                    ' ''
				// '                    ''MessageId: WSA_QOS_EFLOWSPEC
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An invalid or inconsistent flowspec was found in the QOS structure.
				// '                    ' ''
				// '                    ''const WSA_QOS_EFLOWSPEC                11017L

				// '                    ' ''
				// '                    ''MessageId: WSA_QOS_EPROVSPECBUF
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid QOS provider-specific buffer.
				// '                    ' ''
				// '                    ''const WSA_QOS_EPROVSPECBUF             11018L

				// '                    ' ''
				// '                    ''MessageId: WSA_QOS_EFILTERSTYLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An invalid QOS filter style was used.
				// '                    ' ''
				// '                    ''const WSA_QOS_EFILTERSTYLE             11019L

				// '                    ' ''
				// '                    ''MessageId: WSA_QOS_EFILTERTYPE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An invalid QOS filter type was used.
				// '                    ' ''
				// '                    ''const WSA_QOS_EFILTERTYPE              11020L

				// '                    ' ''
				// '                    ''MessageId: WSA_QOS_EFILTERCOUNT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An incorrect number of QOS FILTERSPECs were specified in the FLOWDESCRIPTOR.
				// '                    ' ''
				// '                    ''const WSA_QOS_EFILTERCOUNT             11021L

				// '                    ' ''
				// '                    ''MessageId: WSA_QOS_EOBJLENGTH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An object with an invalid ObjectLength field was specified in the QOS provider-specific buffer.
				// '                    ' ''
				// '                    ''const WSA_QOS_EOBJLENGTH               11022L

				// '                    ' ''
				// '                    ''MessageId: WSA_QOS_EFLOWCOUNT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An incorrect number of flow descriptors was specified in the QOS structure.
				// '                    ' ''
				// '                    ''const WSA_QOS_EFLOWCOUNT               11023L

				// '                    ' ''
				// '                    ''MessageId: WSA_QOS_EUNKOWNPSOBJ
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An unrecognized object was found in the QOS provider-specific buffer.
				// '                    ' ''
				// '                    ''const WSA_QOS_EUNKOWNPSOBJ             11024L

				// '                    ' ''
				// '                    ''MessageId: WSA_QOS_EPOLICYOBJ
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An invalid policy object was found in the QOS provider-specific buffer.
				// '                    ' ''
				// '                    ''const WSA_QOS_EPOLICYOBJ               11025L

				// '                    ' ''
				// '                    ''MessageId: WSA_QOS_EFLOWDESC
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An invalid QOS flow descriptor was found in the flow descriptor list.
				// '                    ' ''
				// '                    ''const WSA_QOS_EFLOWDESC                11026L

				// '                    ' ''
				// '                    ''MessageId: WSA_QOS_EPSFLOWSPEC
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An invalid or inconsistent flowspec was found in the QOS provider specific buffer.
				// '                    ' ''
				// '                    ''const WSA_QOS_EPSFLOWSPEC              11027L

				// '                    ' ''
				// '                    ''MessageId: WSA_QOS_EPSFILTERSPEC
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An invalid FILTERSPEC was found in the QOS provider-specific buffer.
				// '                    ' ''
				// '                    ''const WSA_QOS_EPSFILTERSPEC            11028L

				// '                    ' ''
				// '                    ''MessageId: WSA_QOS_ESDMODEOBJ
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An invalid shape discard mode object was found in the QOS provider specific buffer.
				// '                    ' ''
				// '                    ''const WSA_QOS_ESDMODEOBJ               11029L

				// '                    ' ''
				// '                    ''MessageId: WSA_QOS_ESHAPERATEOBJ
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An invalid shaping rate object was found in the QOS provider-specific buffer.
				// '                    ' ''
				// '                    ''const WSA_QOS_ESHAPERATEOBJ            11030L

				// '                    ' ''
				// '                    ''MessageId: WSA_QOS_RESERVED_PETYPE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A reserved policy element was found in the QOS provider-specific buffer.
				// '                    ' ''
				// '                    ''const WSA_QOS_RESERVED_PETYPE          11031L

				// '                    ''#endif ' defined(WSABASEERR)

				// '                    '''''''''''''''''''''''''''/
				// '                    ''                                              '
				// '                    ''          End of WinSock Error Codes          '
				// '                    ''                                              '
				// '                    ''                10000 to 11999                '
				// '                    '''''''''''''''''''''''''''/



				// '                    '''''''''''''''''''''''''''/
				// '                    ''                                              '
				// '                    ''            Side By Side Error Codes          '
				// '                    ''                                              '
				// '                    ''                14000 to 14999                '
				// '                    '''''''''''''''''''''''''''/

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_SECTION_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested section was not present in the activation context.
				// '                    ' ''
				// '                    ''const ERROR_SXS_SECTION_NOT_FOUND      14000L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_CANT_GEN_ACTCTX
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' This application has failed to start because the application configuration is incorrect. Reinstalling the application may fix this problem.
				// '                    ' ''
				// '                    ''const ERROR_SXS_CANT_GEN_ACTCTX        14001L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_INVALID_ACTCTXDATA_FORMAT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The application binding data format is invalid.
				// '                    ' ''
				// '                    ''const ERROR_SXS_INVALID_ACTCTXDATA_FORMAT 14002L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_ASSEMBLY_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The referenced assembly is not installed on your system.
				// '                    ' ''
				// '                    ''const ERROR_SXS_ASSEMBLY_NOT_FOUND     14003L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_MANIFEST_FORMAT_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The manifest file does not begin with the required tag and format information.
				// '                    ' ''
				// '                    ''const ERROR_SXS_MANIFEST_FORMAT_ERROR  14004L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_MANIFEST_PARSE_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The manifest file contains one or more syntax errors.
				// '                    ' ''
				// '                    ''const ERROR_SXS_MANIFEST_PARSE_ERROR   14005L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_ACTIVATION_CONTEXT_DISABLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The application attempted to activate a disabled activation context.
				// '                    ' ''
				// '                    ''const ERROR_SXS_ACTIVATION_CONTEXT_DISABLED 14006L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_KEY_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested lookup key was not found in any active activation context.
				// '                    ' ''
				// '                    ''const ERROR_SXS_KEY_NOT_FOUND          14007L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_VERSION_CONFLICT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A component version required by the application conflicts with another component version already active.
				// '                    ' ''
				// '                    ''const ERROR_SXS_VERSION_CONFLICT       14008L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_WRONG_SECTION_TYPE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The type requested activation context section does not match the query API used.
				// '                    ' ''
				// '                    ''const ERROR_SXS_WRONG_SECTION_TYPE     14009L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_THREAD_QUERIES_DISABLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Lack of system resources has required isolated activation to be disabled for the current thread of e_runution.
				// '                    ' ''
				// '                    ''const ERROR_SXS_THREAD_QUERIES_DISABLED 14010L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_PROCESS_DEFAULT_ALREADY_SET
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An attempt to set the process default activation context failed because the process default activation context was already set.
				// '                    ' ''
				// '                    ''const ERROR_SXS_PROCESS_DEFAULT_ALREADY_SET 14011L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_UNKNOWN_ENCODING_GROUP
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The encoding group identifier specified is not recognized.
				// '                    ' ''
				// '                    ''const ERROR_SXS_UNKNOWN_ENCODING_GROUP 14012L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_UNKNOWN_ENCODING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The encoding requested is not recognized.
				// '                    ' ''
				// '                    ''const ERROR_SXS_UNKNOWN_ENCODING       14013L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_INVALID_XML_NAMESPACE_URI
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The manifest contains a reference to an invalid URI.
				// '                    ' ''
				// '                    ''const ERROR_SXS_INVALID_XML_NAMESPACE_URI 14014L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_ROOT_MANIFEST_DEPENDENCY_NOT_INSTALLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The application manifest contains a reference to a dependent assembly which is not installed
				// '                    ' ''
				// '                    ''const ERROR_SXS_ROOT_MANIFEST_DEPENDENCY_NOT_INSTALLED 14015L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_LEAF_MANIFEST_DEPENDENCY_NOT_INSTALLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The manifest for an assembly used by the application has a reference to a dependent assembly which is not installed
				// '                    ' ''
				// '                    ''const ERROR_SXS_LEAF_MANIFEST_DEPENDENCY_NOT_INSTALLED 14016L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The manifest contains an attribute for the assembly identity which is not valid.
				// '                    ' ''
				// '                    ''const ERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE 14017L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_MANIFEST_MISSING_REQUIRED_DEFAULT_NAMESPACE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The manifest is missing the required default namespace specification on the assembly element.
				// '                    ' ''
				// '                    ''const ERROR_SXS_MANIFEST_MISSING_REQUIRED_DEFAULT_NAMESPACE 14018L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_MANIFEST_INVALID_REQUIRED_DEFAULT_NAMESPACE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The manifest has a default namespace specified on the assembly element but its value is not "urn:schemas-microsoft-com:asm.v1".
				// '                    ' ''
				// '                    ''const ERROR_SXS_MANIFEST_INVALID_REQUIRED_DEFAULT_NAMESPACE 14019L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_PRIVATE_MANIFEST_CROSS_PATH_WITH_REPARSE_POINT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The private manifest probed has crossed reparse-point-associated path
				// '                    ' ''
				// '                    ''const ERROR_SXS_PRIVATE_MANIFEST_CROSS_PATH_WITH_REPARSE_POINT 14020L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_DUPLICATE_DLL_NAME
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Two or more components referenced directly or indirectly by the application manifest have files by the same name.
				// '                    ' ''
				// '                    ''const ERROR_SXS_DUPLICATE_DLL_NAME     14021L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_DUPLICATE_WINDOWCLASS_NAME
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Two or more components referenced directly or indirectly by the application manifest have window classes with the same name.
				// '                    ' ''
				// '                    ''const ERROR_SXS_DUPLICATE_WINDOWCLASS_NAME 14022L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_DUPLICATE_CLSID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Two or more components referenced directly or indirectly by the application manifest have the same COM server CLSIDs.
				// '                    ' ''
				// '                    ''const ERROR_SXS_DUPLICATE_CLSID        14023L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_DUPLICATE_IID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Two or more components referenced directly or indirectly by the application manifest have proxies for the same COM interface IIDs.
				// '                    ' ''
				// '                    ''const ERROR_SXS_DUPLICATE_IID          14024L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_DUPLICATE_TLBID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Two or more components referenced directly or indirectly by the application manifest have the same COM type library TLBIDs.
				// '                    ' ''
				// '                    ''const ERROR_SXS_DUPLICATE_TLBID        14025L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_DUPLICATE_PROGID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Two or more components referenced directly or indirectly by the application manifest have the same COM ProgIDs.
				// '                    ' ''
				// '                    ''const ERROR_SXS_DUPLICATE_PROGID       14026L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_DUPLICATE_ASSEMBLY_NAME
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Two or more components referenced directly or indirectly by the application manifest are different versions of the same component which is not permitted.
				// '                    ' ''
				// '                    ''const ERROR_SXS_DUPLICATE_ASSEMBLY_NAME 14027L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_FILE_HASH_MISMATCH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A component's file does not match the verification information present in the
				// '                    '' component manifest.
				// '                    ' ''
				// '                    ''const ERROR_SXS_FILE_HASH_MISMATCH     14028L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_POLICY_PARSE_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The policy manifest contains one or more syntax errors.
				// '                    ' ''
				// '                    ''const ERROR_SXS_POLICY_PARSE_ERROR     14029L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_XML_E_MISSINGQUOTE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Manifest Parse Error : A string literal was expected, but no opening quote character was found.
				// '                    ' ''
				// '                    ''const ERROR_SXS_XML_E_MISSINGQUOTE     14030L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_XML_E_COMMENTSYNTAX
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Manifest Parse Error : Incorrect syntax was used in a comment.
				// '                    ' ''
				// '                    ''const ERROR_SXS_XML_E_COMMENTSYNTAX    14031L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_XML_E_BADSTARTNAMECHAR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Manifest Parse Error : A name was started with an invalid character.
				// '                    ' ''
				// '                    ''const ERROR_SXS_XML_E_BADSTARTNAMECHAR 14032L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_XML_E_BADNAMECHAR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Manifest Parse Error : A name contained an invalid character.
				// '                    ' ''
				// '                    ''const ERROR_SXS_XML_E_BADNAMECHAR      14033L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_XML_E_BADCHARINSTRING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Manifest Parse Error : A string literal contained an invalid character.
				// '                    ' ''
				// '                    ''const ERROR_SXS_XML_E_BADCHARINSTRING  14034L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_XML_E_XMLDECLSYNTAX
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Manifest Parse Error : Invalid syntax for an xml declaration.
				// '                    ' ''
				// '                    ''const ERROR_SXS_XML_E_XMLDECLSYNTAX    14035L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_XML_E_BADCHARDATA
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Manifest Parse Error : An Invalid character was found in text content.
				// '                    ' ''
				// '                    ''const ERROR_SXS_XML_E_BADCHARDATA      14036L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_XML_E_MISSINGWHITESPACE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Manifest Parse Error : Required white space was missing.
				// '                    ' ''
				// '                    ''const ERROR_SXS_XML_E_MISSINGWHITESPACE 14037L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_XML_E_EXPECTINGTAGEND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Manifest Parse Error : The character '>' was expected.
				// '                    ' ''
				// '                    ''const ERROR_SXS_XML_E_EXPECTINGTAGEND  14038L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_XML_E_MISSINGSEMICOLON
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Manifest Parse Error : A semi colon character was expected.
				// '                    ' ''
				// '                    ''const ERROR_SXS_XML_E_MISSINGSEMICOLON 14039L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_XML_E_UNBALANCEDPAREN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Manifest Parse Error : Unbalanced parentheses.
				// '                    ' ''
				// '                    ''const ERROR_SXS_XML_E_UNBALANCEDPAREN  14040L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_XML_E_INTERNALERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Manifest Parse Error : Internal error.
				// '                    ' ''
				// '                    ''const ERROR_SXS_XML_E_INTERNALERROR    14041L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_XML_E_UNEXPECTED_WHITESPACE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Manifest Parse Error : Whitespace is not allowed at this location.
				// '                    ' ''
				// '                    ''const ERROR_SXS_XML_E_UNEXPECTED_WHITESPACE 14042L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_XML_E_INCOMPLETE_ENCODING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Manifest Parse Error : End of file reached in invalid state for current encoding.
				// '                    ' ''
				// '                    ''const ERROR_SXS_XML_E_INCOMPLETE_ENCODING 14043L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_XML_E_MISSING_PAREN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Manifest Parse Error : Missing parenthesis.
				// '                    ' ''
				// '                    ''const ERROR_SXS_XML_E_MISSING_PAREN    14044L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_XML_E_EXPECTINGCLOSEQUOTE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Manifest Parse Error : A single or double closing quote character (\' or \") is missing.
				// '                    ' ''
				// '                    ''const ERROR_SXS_XML_E_EXPECTINGCLOSEQUOTE 14045L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_XML_E_MULTIPLE_COLONS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Manifest Parse Error : Multiple colons are not allowed in a name.
				// '                    ' ''
				// '                    ''const ERROR_SXS_XML_E_MULTIPLE_COLONS  14046L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_XML_E_INVALID_DECIMAL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Manifest Parse Error : Invalid character for decimal digit.
				// '                    ' ''
				// '                    ''const ERROR_SXS_XML_E_INVALID_DECIMAL  14047L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_XML_E_INVALID_HEXIDECIMAL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Manifest Parse Error : Invalid character for hexidecimal digit.
				// '                    ' ''
				// '                    ''const ERROR_SXS_XML_E_INVALID_HEXIDECIMAL 14048L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_XML_E_INVALID_UNICODE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Manifest Parse Error : Invalid unicode character value for this platform.
				// '                    ' ''
				// '                    ''const ERROR_SXS_XML_E_INVALID_UNICODE  14049L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_XML_E_WHITESPACEORQUESTIONMARK
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Manifest Parse Error : Expecting whitespace or '?'.
				// '                    ' ''
				// '                    ''const ERROR_SXS_XML_E_WHITESPACEORQUESTIONMARK 14050L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_XML_E_UNEXPECTEDENDTAG
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Manifest Parse Error : End tag was not expected at this location.
				// '                    ' ''
				// '                    ''const ERROR_SXS_XML_E_UNEXPECTEDENDTAG 14051L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_XML_E_UNCLOSEDTAG
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Manifest Parse Error : The following tags were not closed: %1.
				// '                    ' ''
				// '                    ''const ERROR_SXS_XML_E_UNCLOSEDTAG      14052L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_XML_E_DUPLICATEATTRIBUTE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Manifest Parse Error : Duplicate attribute.
				// '                    ' ''
				// '                    ''const ERROR_SXS_XML_E_DUPLICATEATTRIBUTE 14053L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_XML_E_MULTIPLEROOTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Manifest Parse Error : Only one top level element is allowed in an XML document.
				// '                    ' ''
				// '                    ''const ERROR_SXS_XML_E_MULTIPLEROOTS    14054L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_XML_E_INVALIDATROOTLEVEL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Manifest Parse Error : Invalid at the top level of the document.
				// '                    ' ''
				// '                    ''const ERROR_SXS_XML_E_INVALIDATROOTLEVEL 14055L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_XML_E_BADXMLDECL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Manifest Parse Error : Invalid xml declaration.
				// '                    ' ''
				// '                    ''const ERROR_SXS_XML_E_BADXMLDECL       14056L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_XML_E_MISSINGROOT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Manifest Parse Error : XML document must have a top level element.
				// '                    ' ''
				// '                    ''const ERROR_SXS_XML_E_MISSINGROOT      14057L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_XML_E_UNEXPECTEDEOF
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Manifest Parse Error : Unexpected end of file.
				// '                    ' ''
				// '                    ''const ERROR_SXS_XML_E_UNEXPECTEDEOF    14058L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_XML_E_BADPEREFINSUBSET
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Manifest Parse Error : Parameter entities cannot be used inside markup declarations in an internal subset.
				// '                    ' ''
				// '                    ''const ERROR_SXS_XML_E_BADPEREFINSUBSET 14059L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_XML_E_UNCLOSEDSTARTTAG
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Manifest Parse Error : Element was not closed.
				// '                    ' ''
				// '                    ''const ERROR_SXS_XML_E_UNCLOSEDSTARTTAG 14060L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_XML_E_UNCLOSEDENDTAG
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Manifest Parse Error : End element was missing the character '>'.
				// '                    ' ''
				// '                    ''const ERROR_SXS_XML_E_UNCLOSEDENDTAG   14061L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_XML_E_UNCLOSEDSTRING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Manifest Parse Error : A string literal was not closed.
				// '                    ' ''
				// '                    ''const ERROR_SXS_XML_E_UNCLOSEDSTRING   14062L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_XML_E_UNCLOSEDCOMMENT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Manifest Parse Error : A comment was not closed.
				// '                    ' ''
				// '                    ''const ERROR_SXS_XML_E_UNCLOSEDCOMMENT  14063L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_XML_E_UNCLOSEDDECL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Manifest Parse Error : A declaration was not closed.
				// '                    ' ''
				// '                    ''const ERROR_SXS_XML_E_UNCLOSEDDECL     14064L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_XML_E_UNCLOSEDCDATA
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Manifest Parse Error : A CDATA section was not closed.
				// '                    ' ''
				// '                    ''const ERROR_SXS_XML_E_UNCLOSEDCDATA    14065L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_XML_E_RESERVEDNAMESPACE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Manifest Parse Error : The namespace prefix is not allowed to start with the reserved string "xml".
				// '                    ' ''
				// '                    ''const ERROR_SXS_XML_E_RESERVEDNAMESPACE 14066L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_XML_E_INVALIDENCODING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Manifest Parse Error : System does not support the specified encoding.
				// '                    ' ''
				// '                    ''const ERROR_SXS_XML_E_INVALIDENCODING  14067L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_XML_E_INVALIDSWITCH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Manifest Parse Error : Switch from current encoding to specified encoding not supported.
				// '                    ' ''
				// '                    ''const ERROR_SXS_XML_E_INVALIDSWITCH    14068L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_XML_E_BADXMLCASE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Manifest Parse Error : The name 'xml' is reserved and must be lower case.
				// '                    ' ''
				// '                    ''const ERROR_SXS_XML_E_BADXMLCASE       14069L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_XML_E_INVALID_STANDALONE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Manifest Parse Error : The standalone attribute must have the value 'yes' or 'no'.
				// '                    ' ''
				// '                    ''const ERROR_SXS_XML_E_INVALID_STANDALONE 14070L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_XML_E_UNEXPECTED_STANDALONE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Manifest Parse Error : The standalone attribute cannot be used in external entities.
				// '                    ' ''
				// '                    ''const ERROR_SXS_XML_E_UNEXPECTED_STANDALONE 14071L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_XML_E_INVALID_VERSION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Manifest Parse Error : Invalid version number.
				// '                    ' ''
				// '                    ''const ERROR_SXS_XML_E_INVALID_VERSION  14072L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_XML_E_MISSINGEQUALS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Manifest Parse Error : Missing equals sign between attribute and attribute value.
				// '                    ' ''
				// '                    ''const ERROR_SXS_XML_E_MISSINGEQUALS    14073L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_PROTECTION_RECOVERY_FAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Assembly Protection Error : Unable to recover the specified assembly.
				// '                    ' ''
				// '                    ''const ERROR_SXS_PROTECTION_RECOVERY_FAILED 14074L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_PROTECTION_PUBLIC_KEY_TOO_SHORT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Assembly Protection Error : The public key for an assembly was too short to be allowed.
				// '                    ' ''
				// '                    ''const ERROR_SXS_PROTECTION_PUBLIC_KEY_TOO_SHORT 14075L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_PROTECTION_CATALOG_NOT_VALID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Assembly Protection Error : The catalog for an assembly is not valid, or does not match the assembly's manifest.
				// '                    ' ''
				// '                    ''const ERROR_SXS_PROTECTION_CATALOG_NOT_VALID 14076L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_UNTRANSLATABLE_HRESULT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An HRESULT could not be translated to a corresponding Win32 error code.
				// '                    ' ''
				// '                    ''const ERROR_SXS_UNTRANSLATABLE_HRESULT 14077L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_PROTECTION_CATALOG_FILE_MISSING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Assembly Protection Error : The catalog for an assembly is missing.
				// '                    ' ''
				// '                    ''const ERROR_SXS_PROTECTION_CATALOG_FILE_MISSING 14078L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_MISSING_ASSEMBLY_IDENTITY_ATTRIBUTE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The supplied assembly identity is missing one or more attributes which must be present in this context.
				// '                    ' ''
				// '                    ''const ERROR_SXS_MISSING_ASSEMBLY_IDENTITY_ATTRIBUTE 14079L

				// '                    ' ''
				// '                    ''MessageId: ERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE_NAME
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The supplied assembly identity has one or more attribute names that contain characters not permitted in XML names.
				// '                    ' ''
				// '                    ''const ERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE_NAME 14080L


				// '                    '''''''''''''''''''''''''''/
				// '                    ''                                              '
				// '                    ''          End of Side By Side Error Codes     '
				// '                    ''                                              '
				// '                    ''                14000 to 14999                '
				// '                    '''''''''''''''''''''''''''/



				// '                    '''''''''''''''''''''''''''/
				// '                    ''                                              '
				// '                    ''          Start of IPSec Error codes          '
				// '                    ''                                              '
				// '                    ''                13000 to 13999                '
				// '                    '''''''''''''''''''''''''''/


				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_QM_POLICY_EXISTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified quick mode policy already exists.
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_QM_POLICY_EXISTS     13000L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_QM_POLICY_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified quick mode policy was not found.
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_QM_POLICY_NOT_FOUND  13001L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_QM_POLICY_IN_USE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified quick mode policy is being used.
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_QM_POLICY_IN_USE     13002L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_MM_POLICY_EXISTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified main mode policy already exists.
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_MM_POLICY_EXISTS     13003L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_MM_POLICY_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified main mode policy was not found
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_MM_POLICY_NOT_FOUND  13004L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_MM_POLICY_IN_USE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified main mode policy is being used.
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_MM_POLICY_IN_USE     13005L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_MM_FILTER_EXISTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified main mode filter already exists.
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_MM_FILTER_EXISTS     13006L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_MM_FILTER_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified main mode filter was not found.
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_MM_FILTER_NOT_FOUND  13007L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_TRANSPORT_FILTER_EXISTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified transport mode filter already exists.
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_TRANSPORT_FILTER_EXISTS 13008L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_TRANSPORT_FILTER_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified transport mode filter does not exist.
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_TRANSPORT_FILTER_NOT_FOUND 13009L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_MM_AUTH_EXISTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified main mode authentication list exists.
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_MM_AUTH_EXISTS       13010L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_MM_AUTH_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified main mode authentication list was not found.
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_MM_AUTH_NOT_FOUND    13011L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_MM_AUTH_IN_USE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified quick mode policy is being used.
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_MM_AUTH_IN_USE       13012L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_DEFAULT_MM_POLICY_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified main mode policy was not found.
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_DEFAULT_MM_POLICY_NOT_FOUND 13013L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_DEFAULT_MM_AUTH_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified quick mode policy was not found
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_DEFAULT_MM_AUTH_NOT_FOUND 13014L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_DEFAULT_QM_POLICY_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The manifest file contains one or more syntax errors.
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_DEFAULT_QM_POLICY_NOT_FOUND 13015L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_TUNNEL_FILTER_EXISTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The application attempted to activate a disabled activation context.
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_TUNNEL_FILTER_EXISTS 13016L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_TUNNEL_FILTER_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested lookup key was not found in any active activation context.
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_TUNNEL_FILTER_NOT_FOUND 13017L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_MM_FILTER_PENDING_DELETION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The Main Mode filter is pending deletion.
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_MM_FILTER_PENDING_DELETION 13018L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_TRANSPORT_FILTER_PENDING_DELETION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The transport filter is pending deletion.
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_TRANSPORT_FILTER_PENDING_DELETION 13019L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_TUNNEL_FILTER_PENDING_DELETION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The tunnel filter is pending deletion.
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_TUNNEL_FILTER_PENDING_DELETION 13020L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_MM_POLICY_PENDING_DELETION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The Main Mode policy is pending deletion.
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_MM_POLICY_PENDING_DELETION 13021L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_MM_AUTH_PENDING_DELETION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The Main Mode authentication bundle is pending deletion.
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_MM_AUTH_PENDING_DELETION 13022L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_QM_POLICY_PENDING_DELETION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The Quick Mode policy is pending deletion.
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_QM_POLICY_PENDING_DELETION 13023L

				// '                    ' ''
				// '                    ''MessageId: WARNING_IPSEC_MM_POLICY_PRUNED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The Main Mode policy was successfully added, but some of the requested offers are not supported.
				// '                    ' ''
				// '                    ''const WARNING_IPSEC_MM_POLICY_PRUNED   13024L

				// '                    ' ''
				// '                    ''MessageId: WARNING_IPSEC_QM_POLICY_PRUNED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The Quick Mode policy was successfully added, but some of the requested offers are not supported.
				// '                    ' ''
				// '                    ''const WARNING_IPSEC_QM_POLICY_PRUNED   13025L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_NEG_STATUS_BEGIN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' ERROR_IPSEC_IKE_NEG_STATUS_BEGIN
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_NEG_STATUS_BEGIN 13800L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_AUTH_FAIL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' IKE authentication credentials are unacceptable
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_AUTH_FAIL        13801L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_ATTRIB_FAIL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' IKE security attributes are unacceptable
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_ATTRIB_FAIL      13802L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_NEGOTIATION_PENDING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' IKE Negotiation in progress
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_NEGOTIATION_PENDING 13803L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_GENERAL_PROCESSING_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' General processing error
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_GENERAL_PROCESSING_ERROR 13804L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_TIMED_OUT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Negotiation timed out
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_TIMED_OUT        13805L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_NO_CERT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' IKE failed to find valid machine certificate
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_NO_CERT          13806L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_SA_DELETED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' IKE SA deleted by peer before establishment completed
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_SA_DELETED       13807L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_SA_REAPED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' IKE SA deleted before establishment completed
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_SA_REAPED        13808L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_MM_ACQUIRE_DROP
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Negotiation request sat in Queue too long
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_MM_ACQUIRE_DROP  13809L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_QM_ACQUIRE_DROP
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Negotiation request sat in Queue too long
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_QM_ACQUIRE_DROP  13810L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_QUEUE_DROP_MM
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Negotiation request sat in Queue too long
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_QUEUE_DROP_MM    13811L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_QUEUE_DROP_NO_MM
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Negotiation request sat in Queue too long
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_QUEUE_DROP_NO_MM 13812L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_DROP_NO_RESPONSE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' No response from peer
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_DROP_NO_RESPONSE 13813L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_MM_DELAY_DROP
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Negotiation took too long
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_MM_DELAY_DROP    13814L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_QM_DELAY_DROP
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Negotiation took too long
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_QM_DELAY_DROP    13815L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unknown error occurred
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_ERROR            13816L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_CRL_FAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Certificate Revocation Check failed
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_CRL_FAILED       13817L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_INVALID_KEY_USAGE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid certificate key usage
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_INVALID_KEY_USAGE 13818L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_INVALID_CERT_TYPE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid certificate type
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_INVALID_CERT_TYPE 13819L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_NO_PRIVATE_KEY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' No private key associated with machine certificate
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_NO_PRIVATE_KEY   13820L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_DH_FAIL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Failure in Diffie-Helman computation
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_DH_FAIL          13822L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_INVALID_HEADER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid header
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_INVALID_HEADER   13824L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_NO_POLICY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' No policy configured
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_NO_POLICY        13825L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_INVALID_SIGNATURE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Failed to verify signature
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_INVALID_SIGNATURE 13826L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_KERBEROS_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Failed to authenticate using kerberos
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_KERBEROS_ERROR   13827L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_NO_PUBLIC_KEY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Peer's certificate did not have a public key
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_NO_PUBLIC_KEY    13828L

				// '                    ''These must stay as a unit.
				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_PROCESS_ERR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Error processing error payload
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_PROCESS_ERR      13829L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_PROCESS_ERR_SA
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Error processing SA payload
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_PROCESS_ERR_SA   13830L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_PROCESS_ERR_PROP
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Error processing Proposal payload
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_PROCESS_ERR_PROP 13831L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_PROCESS_ERR_TRANS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Error processing Transform payload
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_PROCESS_ERR_TRANS 13832L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_PROCESS_ERR_KE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Error processing KE payload
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_PROCESS_ERR_KE   13833L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_PROCESS_ERR_ID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Error processing ID payload
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_PROCESS_ERR_ID   13834L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_PROCESS_ERR_CERT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Error processing Cert payload
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_PROCESS_ERR_CERT 13835L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_PROCESS_ERR_CERT_REQ
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Error processing Certificate Request payload
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_PROCESS_ERR_CERT_REQ 13836L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_PROCESS_ERR_HASH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Error processing Hash payload
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_PROCESS_ERR_HASH 13837L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_PROCESS_ERR_SIG
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Error processing Signature payload
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_PROCESS_ERR_SIG  13838L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_PROCESS_ERR_NONCE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Error processing Nonce payload
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_PROCESS_ERR_NONCE 13839L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_PROCESS_ERR_NOTIFY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Error processing Notify payload
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_PROCESS_ERR_NOTIFY 13840L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_PROCESS_ERR_DELETE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Error processing Delete Payload
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_PROCESS_ERR_DELETE 13841L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_PROCESS_ERR_VENDOR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Error processing VendorId payload
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_PROCESS_ERR_VENDOR 13842L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_INVALID_PAYLOAD
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid payload received
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_INVALID_PAYLOAD  13843L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_LOAD_SOFT_SA
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Soft SA loaded
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_LOAD_SOFT_SA     13844L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_SOFT_SA_TORN_DOWN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Soft SA torn down
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_SOFT_SA_TORN_DOWN 13845L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_INVALID_COOKIE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid cookie received.
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_INVALID_COOKIE   13846L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_NO_PEER_CERT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Peer failed to send valid machine certificate
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_NO_PEER_CERT     13847L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_PEER_CRL_FAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Certification Revocation check of peer's certificate failed
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_PEER_CRL_FAILED  13848L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_POLICY_CHANGE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' New policy invalidated SAs formed with old policy
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_POLICY_CHANGE    13849L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_NO_MM_POLICY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' There is no available Main Mode IKE policy.
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_NO_MM_POLICY     13850L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_NOTCBPRIV
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Failed to enabled TCB privilege.
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_NOTCBPRIV        13851L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_SECLOADFAIL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Failed to load SECURITY.DLL.
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_SECLOADFAIL      13852L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_FAILSSPINIT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Failed to obtain security function table dispatch address from SSPI.
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_FAILSSPINIT      13853L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_FAILQUERYSSP
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Failed to query Kerberos package to obtain max token size.
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_FAILQUERYSSP     13854L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_SRVACQFAIL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Failed to obtain Kerberos server credentials for ISAKMP/ERROR_IPSEC_IKE service.  Kerberos authentication will not function.  The most likely reason for this is lack of domain membership.  This is normal if your computer is a member of a workgroup.
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_SRVACQFAIL       13855L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_SRVQUERYCRED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Failed to determine SSPI principal name for ISAKMP/ERROR_IPSEC_IKE service (QueryCredentialsAttributes).
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_SRVQUERYCRED     13856L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_GETSPIFAIL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Failed to obtain new SPI for the inbound SA from Ipsec driver.  The most common cause for this is that the driver does not have the correct filter.  Check your policy to verify the filters.
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_GETSPIFAIL       13857L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_INVALID_FILTER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Given filter is invalid
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_INVALID_FILTER   13858L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_OUT_OF_MEMORY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Memory allocation failed.
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_OUT_OF_MEMORY    13859L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_ADD_UPDATE_KEY_FAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Failed to add Security Association to IPSec Driver.  The most common cause for this is if the IKE negotiation took too long to complete.  If the problem persists, reduce the load on the faulting machine.
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_ADD_UPDATE_KEY_FAILED 13860L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_INVALID_POLICY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid policy
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_INVALID_POLICY   13861L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_UNKNOWN_DOI
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid DOI
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_UNKNOWN_DOI      13862L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_INVALID_SITUATION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid situation
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_INVALID_SITUATION 13863L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_DH_FAILURE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Diffie-Hellman failure
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_DH_FAILURE       13864L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_INVALID_GROUP
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid Diffie-Hellman group
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_INVALID_GROUP    13865L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_ENCRYPT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Error encrypting payload
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_ENCRYPT          13866L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_DECRYPT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Error decrypting payload
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_DECRYPT          13867L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_POLICY_MATCH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Policy match error
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_POLICY_MATCH     13868L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_UNSUPPORTED_ID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unsupported ID
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_UNSUPPORTED_ID   13869L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_INVALID_HASH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Hash verification failed
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_INVALID_HASH     13870L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_INVALID_HASH_ALG
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid hash algorithm
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_INVALID_HASH_ALG 13871L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_INVALID_HASH_SIZE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid hash size
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_INVALID_HASH_SIZE 13872L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_INVALID_ENCRYPT_ALG
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid encryption algorithm
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_INVALID_ENCRYPT_ALG 13873L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_INVALID_AUTH_ALG
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid authentication algorithm
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_INVALID_AUTH_ALG 13874L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_INVALID_SIG
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid certificate signature
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_INVALID_SIG      13875L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_LOAD_FAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Load failed
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_LOAD_FAILED      13876L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_RPC_DELETE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Deleted via RPC call
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_RPC_DELETE       13877L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_BENIGN_REINIT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Temporary state created to perform reinit. This is not a real failure.
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_BENIGN_REINIT    13878L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_INVALID_RESPONDER_LIFETIME_NOTIFY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The lifetime value received in the Responder Lifetime Notify is below the Windows 2000 configured minimum value.  Please fix the policy on the peer machine.
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_INVALID_RESPONDER_LIFETIME_NOTIFY 13879L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_INVALID_CERT_KEYLEN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Key length in certificate is too small for configured security requirements.
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_INVALID_CERT_KEYLEN 13881L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_MM_LIMIT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Max number of established MM SAs to peer exceeded.
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_MM_LIMIT         13882L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_NEGOTIATION_DISABLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' IKE received a policy that disables negotiation.
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_NEGOTIATION_DISABLED 13883L

				// '                    ' ''
				// '                    ''MessageId: ERROR_IPSEC_IKE_NEG_STATUS_END
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' ERROR_IPSEC_IKE_NEG_STATUS_END
				// '                    ' ''
				// '                    ''const ERROR_IPSEC_IKE_NEG_STATUS_END   13884L

				// '                    ''''''''''''''''''''
				// '                    ''                               '
				// '                    ''    COM Error Codes            '
				// '                    ''                               '
				// '                    ''''''''''''''''''''

				// '                    ' ''
				// '                    ''The return value of COM functions and methods is an HRESULT.
				// '                    ''This is not a handle to anything, but is merely a 32-bit value
				// '                    ''with several fields encoded in the value.  The parts of an
				// '                    ''HRESULT are shown below.
				// '                    ' ''
				// '                    ''Many of the macros and functions below were orginally defined to
				// '                    ''operate on SCODEs.  SCODEs are no longer used.  The macros are
				// '                    ''still present for compatibility and easy porting of Win16 code.
				// '                    ''Newly written code should use the HRESULT macros and functions.
				// '                    ' ''

				// '                    ' ''
				// '                    '' HRESULTs are 32 bit values layed [Out ] as follows:
				// '                    ' ''
				// '                    ''  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
				// '                    ''  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
				// '                    '' +-+-+-+-+-+---------------------+-------------------------------+
				// '                    '' |S|R|C|N|r|    Facility         |               Code            |
				// '                    '' +-+-+-+-+-+---------------------+-------------------------------+
				// '                    ' ''
				// '                    '' where
				// '                    ' ''
				// '                    ''     S - Severity - indicates success/fail
				// '                    ' ''
				// '                    ''         0 - Success
				// '                    ''         1 - Fail (COERROR)
				// '                    ' ''
				// '                    ''     R - reserved portion of the facility code, corresponds to NT's
				// '                    ''             second severity bit.
				// '                    ' ''
				// '                    ''     C - reserved portion of the facility code, corresponds to NT's
				// '                    ''             C field.
				// '                    ' ''
				// '                    ''     N - reserved portion of the facility code. Used to indicate a
				// '                    ''             mapped NT status value.
				// '                    ' ''
				// '                    ''     r - reserved portion of the facility code. Reserved for internal
				// '                    ''             use. Used to indicate HRESULT values that are not status
				// '                    ''             values, but are instead message ids for display strings.
				// '                    ' ''
				// '                    ''     Facility - is the facility code
				// '                    ' ''
				// '                    ''     Code - is the facility's status code
				// '                    ' ''

				// '                    ' ''
				// '                    ''Severity values
				// '                    ' ''

				// '                    ''const SEVERITY_SUCCESS    0
				// '                    ''const SEVERITY_ERROR      1


				// '                    ' ''
				// '                    ''Generic test for success on any status value (non-negative numbers
				// '                    ''indicate success).
				// '                    ' ''

				// '                    ''const SUCCEEDED(Status) ((HRESULT)(Status) >= 0)

				// '                    ' ''
				// '                    ''and the inverse
				// '                    ' ''

				// '                    ''const FAILED(Status) ((HRESULT)(Status)<0)


				// '                    ' ''
				// '                    ''Generic test for error on any status value.
				// '                    ' ''

				// '                    ''const IS_ERROR(Status) ((unsigned long)(Status) >> 31 == SEVERITY_ERROR)

				// '                    ' ''
				// '                    ''Return the code
				// '                    ' ''

				// '                    ''const HRESULT_CODE(hr)    ((hr) & = &hFFFF)
				// '                    ''const SCODE_CODE(sc)      ((sc) & = &hFFFF)

				// '                    ' ''
				// '                    '' Return the facility
				// '                    ' ''

				// '                    ''const HRESULT_FACILITY(hr)  (((hr) >> 16) & = &h1fff)
				// '                    ''const SCODE_FACILITY(sc)    (((sc) >> 16) & = &h1fff)

				// '                    ' ''
				// '                    '' Return the severity
				// '                    ' ''

				// '                    ''const HRESULT_SEVERITY(hr)  (((hr) >> 31) & = &h1)
				// '                    ''const SCODE_SEVERITY(sc)    (((sc) >> 31) & = &h1)

				// '                    ' ''
				// '                    ''Create an HRESULT value from component pieces
				// '                    ' ''

				// '                    ''const MAKE_HRESULT(sev,fac,code) \
				// '                    ''    ((HRESULT) (((unsigned long)(sev)<<31) | ((unsigned long)(fac)<<16) | ((unsigned long)(code))) )
				// '                    ''const MAKE_SCODE(sev,fac,code) \
				// '                    ''    ((SCODE) (((unsigned long)(sev)<<31) | ((unsigned long)(fac)<<16) | ((unsigned long)(code))) )


				// '                    ' ''
				// '                    ''Map a WIN32 error value into a HRESULT
				// '                    ''Note: This assumes that WIN32 errors fall in the range -32k to 32k.
				// '                    ' ''
				// '                    ''Define bits here so macros are guaranteed to work

				// '                    ''const FACILITY_NT_BIT                 = &h10000000

				// '                    ''__HRESULT_FROM_WIN32 will always be a macro.
				// '                    ''The goal will be to enable INLINE_HRESULT_FROM_WIN32 all the time,
				// '                    ''but there's too much code to change to do that at this time.

				// '                    ''const __HRESULT_FROM_WIN32(x) ((HRESULT)(x) <= 0 ? ((HRESULT)(x)) : ((HRESULT) (((x) & = &h0000FFFF) | (FACILITY_WIN32 << 16) | = &h80000000)))

				// '                    ''#ifdef INLINE_HRESULT_FROM_WIN32
				// '                    ''#ifndef _HRESULT_DEFINED
				// '                    ''const _HRESULT_DEFINED
				// '                    ''typedef long HRESULT;
				// '                    ''#endif
				// '                    ''#ifndef __midl
				// '                    ''__inline HRESULT HRESULT_FROM_WIN32(long x) { return x <= 0 ? (HRESULT)x : (HRESULT) (((x) & = &h0000FFFF) | (FACILITY_WIN32 << 16) | = &h80000000);}
				// '                    ''#else
				// '                    ''const HRESULT_FROM_WIN32(x) __HRESULT_FROM_WIN32(x)
				// '                    ''#endif
				// '                    ''#else
				// '                    ''const HRESULT_FROM_WIN32(x) __HRESULT_FROM_WIN32(x)
				// '                    ''#endif

				// '                    ' ''
				// '                    ''Map an NT status value into a HRESULT
				// '                    ' ''

				// '                    ''const HRESULT_FROM_NT(x)      ((HRESULT) ((x) | FACILITY_NT_BIT))


				// '                    ''****** OBSOLETE functions

				// '                    ''HRESULT functions
				// '                    ''As noted above, these functions are obsolete and should not be used.


				// '                    ''Extract the SCODE from a HRESULT

				// '                    ''const GetScode(hr) ((SCODE) (hr))

				// '                    ''Convert an SCODE into an HRESULT.

				// '                    ''const ResultFromScode(sc) ((HRESULT) (sc))


				// '                    ''PropagateResult is a noop
				// '                    ''const PropagateResult(hrPrevious, scBase) ((HRESULT) scBase)


				// '                    ''****** End of OBSOLETE functions.


				// '                    ''---------------------- HRESULT value definitions -----------------
				// '                    ' ''
				// '                    ''HRESULT definitions
				// '                    ' ''

				// '                    ''#ifdef RC_INVOKED
				// '                    ''const _HRESULT_TYPEDEF_(_sc) _sc
				// '                    ''#else ' RC_INVOKED
				// '                    ''const _HRESULT_TYPEDEF_(_sc) ((HRESULT)_sc)
				// '                    ''#endif ' RC_INVOKED

				// '                    ''const NOERROR             0

				// '                    ' ''
				// '                    ''Error definitions follow
				// '                    ' ''

				// '                    ' ''
				// '                    ''Codes = &h4000-= &h40ff are reserved for OLE
				// '                    ' ''
				// '                    ' ''
				// '                    ''Error codes
				// '                    ' ''
				// '                    ' ''
				// '                    ''MessageId: E_UNEXPECTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Catastrophic failure
				// '                    ' ''
				// '                    ''const E_UNEXPECTED                     _HRESULT_TYPEDEF_(= &h8000FFFFL)

				// '                    ''#if defined(_WIN32) && !defined(_MAC)
				// '                    ' ''
				// '                    ''MessageId: E_NOTIMPL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Not implemented
				// '                    ' ''
				// '                    ''const E_NOTIMPL                        _HRESULT_TYPEDEF_(= &h80004001L)

				// '                    ' ''
				// '                    ''MessageId: E_OUTOFMEMORY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Ran [Out ] of memory
				// '                    ' ''
				// '                    ''const E_OUTOFMEMORY                    _HRESULT_TYPEDEF_(= &h8007000EL)

				// '                    ' ''
				// '                    ''MessageId: E_INVALIDARG
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' One or more arguments are invalid
				// '                    ' ''
				// '                    ''const E_INVALIDARG                     _HRESULT_TYPEDEF_(= &h80070057L)

				// '                    ' ''
				// '                    ''MessageId: E_NOINTERFACE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' No such interface supported
				// '                    ' ''
				// '                    ''const E_NOINTERFACE                    _HRESULT_TYPEDEF_(= &h80004002L)

				// '                    ' ''
				// '                    ''MessageId: E_POINTER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid pointer
				// '                    ' ''
				// '                    ''const E_POINTER                        _HRESULT_TYPEDEF_(= &h80004003L)

				// '                    ' ''
				// '                    ''MessageId: E_HANDLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid handle
				// '                    ' ''
				// '                    ''const E_HANDLE                         _HRESULT_TYPEDEF_(= &h80070006L)

				// '                    ' ''
				// '                    ''MessageId: E_ABORT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Operation aborted
				// '                    ' ''
				// '                    ''const E_ABORT                          _HRESULT_TYPEDEF_(= &h80004004L)

				// '                    ' ''
				// '                    ''MessageId: E_FAIL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unspecified error
				// '                    ' ''
				// '                    ''const E_FAIL                           _HRESULT_TYPEDEF_(= &h80004005L)

				// '                    ' ''
				// '                    ''MessageId: E_ACCESSDENIED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' General access denied error
				// '                    ' ''
				// '                    ''const E_ACCESSDENIED                   _HRESULT_TYPEDEF_(= &h80070005L)

				// '                    ''#else
				// '                    ' ''
				// '                    ''MessageId: E_NOTIMPL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Not implemented
				// '                    ' ''
				// '                    ''const E_NOTIMPL                        _HRESULT_TYPEDEF_(= &h80000001L)

				// '                    ' ''
				// '                    ''MessageId: E_OUTOFMEMORY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Ran [Out ] of memory
				// '                    ' ''
				// '                    ''const E_OUTOFMEMORY                    _HRESULT_TYPEDEF_(= &h80000002L)

				// '                    ' ''
				// '                    ''MessageId: E_INVALIDARG
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' One or more arguments are invalid
				// '                    ' ''
				// '                    ''const E_INVALIDARG                     _HRESULT_TYPEDEF_(= &h80000003L)

				// '                    ' ''
				// '                    ''MessageId: E_NOINTERFACE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' No such interface supported
				// '                    ' ''
				// '                    ''const E_NOINTERFACE                    _HRESULT_TYPEDEF_(= &h80000004L)

				// '                    ' ''
				// '                    ''MessageId: E_POINTER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid pointer
				// '                    ' ''
				// '                    ''const E_POINTER                        _HRESULT_TYPEDEF_(= &h80000005L)

				// '                    ' ''
				// '                    ''MessageId: E_HANDLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid handle
				// '                    ' ''
				// '                    ''const E_HANDLE                         _HRESULT_TYPEDEF_(= &h80000006L)

				// '                    ' ''
				// '                    ''MessageId: E_ABORT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Operation aborted
				// '                    ' ''
				// '                    ''const E_ABORT                          _HRESULT_TYPEDEF_(= &h80000007L)

				// '                    ' ''
				// '                    ''MessageId: E_FAIL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unspecified error
				// '                    ' ''
				// '                    ''const E_FAIL                           _HRESULT_TYPEDEF_(= &h80000008L)

				// '                    ' ''
				// '                    ''MessageId: E_ACCESSDENIED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' General access denied error
				// '                    ' ''
				// '                    ''const E_ACCESSDENIED                   _HRESULT_TYPEDEF_(= &h80000009L)

				// '                    ''#endif 'WIN32
				// '                    ' ''
				// '                    ''MessageId: E_PENDING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The data necessary to complete this operation is not yet available.
				// '                    ' ''
				// '                    ''const E_PENDING                        _HRESULT_TYPEDEF_(= &h8000000AL)

				// '                    ' ''
				// '                    ''MessageId: CO_E_INIT_TLS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Thread local storage failure
				// '                    ' ''
				// '                    ''const CO_E_INIT_TLS                    _HRESULT_TYPEDEF_(= &h80004006L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_INIT_SHARED_ALLOCATOR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Get shared memory allocator failure
				// '                    ' ''
				// '                    ''const CO_E_INIT_SHARED_ALLOCATOR       _HRESULT_TYPEDEF_(= &h80004007L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_INIT_MEMORY_ALLOCATOR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Get memory allocator failure
				// '                    ' ''
				// '                    ''const CO_E_INIT_MEMORY_ALLOCATOR       _HRESULT_TYPEDEF_(= &h80004008L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_INIT_CLASS_CACHE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unable to initialize class cache
				// '                    ' ''
				// '                    ''const CO_E_INIT_CLASS_CACHE            _HRESULT_TYPEDEF_(= &h80004009L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_INIT_RPC_CHANNEL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unable to initialize RPC services
				// '                    ' ''
				// '                    ''const CO_E_INIT_RPC_CHANNEL            _HRESULT_TYPEDEF_(= &h8000400AL)

				// '                    ' ''
				// '                    ''MessageId: CO_E_INIT_TLS_SET_CHANNEL_CONTROL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Cannot set thread local storage channel control
				// '                    ' ''
				// '                    ''const CO_E_INIT_TLS_SET_CHANNEL_CONTROL _HRESULT_TYPEDEF_(= &h8000400BL)

				// '                    ' ''
				// '                    ''MessageId: CO_E_INIT_TLS_CHANNEL_CONTROL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Could not allocate thread local storage channel control
				// '                    ' ''
				// '                    ''const CO_E_INIT_TLS_CHANNEL_CONTROL    _HRESULT_TYPEDEF_(= &h8000400CL)

				// '                    ' ''
				// '                    ''MessageId: CO_E_INIT_UNACCEPTED_USER_ALLOCATOR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The user supplied memory allocator is unacceptable
				// '                    ' ''
				// '                    ''const CO_E_INIT_UNACCEPTED_USER_ALLOCATOR _HRESULT_TYPEDEF_(= &h8000400DL)

				// '                    ' ''
				// '                    ''MessageId: CO_E_INIT_SCM_MUTEX_EXISTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The OLE service mutex already exists
				// '                    ' ''
				// '                    ''const CO_E_INIT_SCM_MUTEX_EXISTS       _HRESULT_TYPEDEF_(= &h8000400EL)

				// '                    ' ''
				// '                    ''MessageId: CO_E_INIT_SCM_FILE_MAPPING_EXISTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The OLE service file mapping already exists
				// '                    ' ''
				// '                    ''const CO_E_INIT_SCM_FILE_MAPPING_EXISTS _HRESULT_TYPEDEF_(= &h8000400FL)

				// '                    ' ''
				// '                    ''MessageId: CO_E_INIT_SCM_MAP_VIEW_OF_FILE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unable to map view of file for OLE service
				// '                    ' ''
				// '                    ''const CO_E_INIT_SCM_MAP_VIEW_OF_FILE   _HRESULT_TYPEDEF_(= &h80004010L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_INIT_SCM_EXEC_FAILURE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Failure attempting to launch OLE service
				// '                    ' ''
				// '                    ''const CO_E_INIT_SCM_EXEC_FAILURE       _HRESULT_TYPEDEF_(= &h80004011L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_INIT_ONLY_SINGLE_THREADED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' There was an attempt to call CoInitialize a second time while single threaded
				// '                    ' ''
				// '                    ''const CO_E_INIT_ONLY_SINGLE_THREADED   _HRESULT_TYPEDEF_(= &h80004012L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_CANT_REMOTE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A Remote activation was necessary but was not allowed
				// '                    ' ''
				// '                    ''const CO_E_CANT_REMOTE                 _HRESULT_TYPEDEF_(= &h80004013L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_BAD_SERVER_NAME
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A Remote activation was necessary but the server name provided was invalid
				// '                    ' ''
				// '                    ''const CO_E_BAD_SERVER_NAME             _HRESULT_TYPEDEF_(= &h80004014L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_WRONG_SERVER_IDENTITY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The class is configured to run as a security id different from the caller
				// '                    ' ''
				// '                    ''const CO_E_WRONG_SERVER_IDENTITY       _HRESULT_TYPEDEF_(= &h80004015L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_OLE1DDE_DISABLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Use of Ole1 services requiring DDE windows is disabled
				// '                    ' ''
				// '                    ''const CO_E_OLE1DDE_DISABLED            _HRESULT_TYPEDEF_(= &h80004016L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_RUNAS_SYNTAX
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A RunAs specification must be <domain name>\<user name> or simply <user name>
				// '                    ' ''
				// '                    ''const CO_E_RUNAS_SYNTAX                _HRESULT_TYPEDEF_(= &h80004017L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_CREATEPROCESS_FAILURE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The server process could not be started.  The pathname may be incorrect.
				// '                    ' ''
				// '                    ''const CO_E_CREATEPROCESS_FAILURE       _HRESULT_TYPEDEF_(= &h80004018L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_RUNAS_CREATEPROCESS_FAILURE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The server process could not be started as the configured identity.  The pathname may be incorrect or unavailable.
				// '                    ' ''
				// '                    ''const CO_E_RUNAS_CREATEPROCESS_FAILURE _HRESULT_TYPEDEF_(= &h80004019L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_RUNAS_LOGON_FAILURE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The server process could not be started because the configured identity is incorrect.  Check the username and password.
				// '                    ' ''
				// '                    ''const CO_E_RUNAS_LOGON_FAILURE         _HRESULT_TYPEDEF_(= &h8000401AL)

				// '                    ' ''
				// '                    ''MessageId: CO_E_LAUNCH_PERMSSION_DENIED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The client is not allowed to launch this server.
				// '                    ' ''
				// '                    ''const CO_E_LAUNCH_PERMSSION_DENIED     _HRESULT_TYPEDEF_(= &h8000401BL)

				// '                    ' ''
				// '                    ''MessageId: CO_E_START_SERVICE_FAILURE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The service providing this server could not be started.
				// '                    ' ''
				// '                    ''const CO_E_START_SERVICE_FAILURE       _HRESULT_TYPEDEF_(= &h8000401CL)

				// '                    ' ''
				// '                    ''MessageId: CO_E_REMOTE_COMMUNICATION_FAILURE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' This computer was unable to communicate with the computer providing the server.
				// '                    ' ''
				// '                    ''const CO_E_REMOTE_COMMUNICATION_FAILURE _HRESULT_TYPEDEF_(= &h8000401DL)

				// '                    ' ''
				// '                    ''MessageId: CO_E_SERVER_START_TIMEOUT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The server did not respond after being launched.
				// '                    ' ''
				// '                    ''const CO_E_SERVER_START_TIMEOUT        _HRESULT_TYPEDEF_(= &h8000401EL)

				// '                    ' ''
				// '                    ''MessageId: CO_E_CLSREG_INCONSISTENT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The registration information for this server is inconsistent or incomplete.
				// '                    ' ''
				// '                    ''const CO_E_CLSREG_INCONSISTENT         _HRESULT_TYPEDEF_(= &h8000401FL)

				// '                    ' ''
				// '                    ''MessageId: CO_E_IIDREG_INCONSISTENT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The registration information for this interface is inconsistent or incomplete.
				// '                    ' ''
				// '                    ''const CO_E_IIDREG_INCONSISTENT         _HRESULT_TYPEDEF_(= &h80004020L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_NOT_SUPPORTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The operation attempted is not supported.
				// '                    ' ''
				// '                    ''const CO_E_NOT_SUPPORTED               _HRESULT_TYPEDEF_(= &h80004021L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_RELOAD_DLL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A dll must be loaded.
				// '                    ' ''
				// '                    ''const CO_E_RELOAD_DLL                  _HRESULT_TYPEDEF_(= &h80004022L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_MSI_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A Microsoft Software Installer error was encountered.
				// '                    ' ''
				// '                    ''const CO_E_MSI_ERROR                   _HRESULT_TYPEDEF_(= &h80004023L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_ATTEMPT_TO_CREATE_OUTSIDE_CLIENT_CONTEXT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified activation could not occur in the client context as specified.
				// '                    ' ''
				// '                    ''const CO_E_ATTEMPT_TO_CREATE_OUTSIDE_CLIENT_CONTEXT _HRESULT_TYPEDEF_(= &h80004024L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_SERVER_PAUSED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Activations on the server are paused.
				// '                    ' ''
				// '                    ''const CO_E_SERVER_PAUSED               _HRESULT_TYPEDEF_(= &h80004025L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_SERVER_NOT_PAUSED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Activations on the server are not paused.
				// '                    ' ''
				// '                    ''const CO_E_SERVER_NOT_PAUSED           _HRESULT_TYPEDEF_(= &h80004026L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_CLASS_DISABLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The component or application containing the component has been disabled.
				// '                    ' ''
				// '                    ''const CO_E_CLASS_DISABLED              _HRESULT_TYPEDEF_(= &h80004027L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_CLRNOTAVAILABLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The common language runtime is not available
				// '                    ' ''
				// '                    ''const CO_E_CLRNOTAVAILABLE             _HRESULT_TYPEDEF_(= &h80004028L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_ASYNC_WORK_REJECTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The thread-pool rejected the submitted asynchronous work.
				// '                    ' ''
				// '                    ''const CO_E_ASYNC_WORK_REJECTED         _HRESULT_TYPEDEF_(= &h80004029L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_SERVER_INIT_TIMEOUT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The server started, but did not finish initializing in a timely fashion.
				// '                    ' ''
				// '                    ''const CO_E_SERVER_INIT_TIMEOUT         _HRESULT_TYPEDEF_(= &h8000402AL)

				// '                    ' ''
				// '                    ''MessageId: CO_E_NO_SECCTX_IN_ACTIVATE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unable to complete the call since there is no COM+ security context inside IObjectControl.Activate.
				// '                    ' ''
				// '                    ''const CO_E_NO_SECCTX_IN_ACTIVATE       _HRESULT_TYPEDEF_(= &h8000402BL)

				// '                    ' ''
				// '                    ''MessageId: CO_E_TRACKER_CONFIG
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The provided tracker configuration is invalid
				// '                    ' ''
				// '                    ''const CO_E_TRACKER_CONFIG              _HRESULT_TYPEDEF_(= &h80004030L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_THREADPOOL_CONFIG
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The provided thread pool configuration is invalid
				// '                    ' ''
				// '                    ''const CO_E_THREADPOOL_CONFIG           _HRESULT_TYPEDEF_(= &h80004031L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_SXS_CONFIG
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The provided side-by-side configuration is invalid
				// '                    ' ''
				// '                    ''const CO_E_SXS_CONFIG                  _HRESULT_TYPEDEF_(= &h80004032L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_MALFORMED_SPN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The server principal name (SPN) obtained during security negotiation is malformed.
				// '                    ' ''
				// '                    ''const CO_E_MALFORMED_SPN               _HRESULT_TYPEDEF_(= &h80004033L)


				// '                    ' ''
				// '                    ''Success codes
				// '                    ' ''

				// '                    ''******************
				// '                    ''FACILITY_ITF
				// '                    ''******************

				// '                    ' ''
				// '                    ''Codes = &h0-= &h01ff are reserved for the OLE group of
				// '                    ''interfaces.
				// '                    ' ''


				// '                    ' ''
				// '                    ''Generic OLE errors that may be returned by many inerfaces
				// '                    ' ''

				// '                    ''const OLE_E_FIRST ((HRESULT)= &h80040000L)
				// '                    ''const OLE_E_LAST  ((HRESULT)= &h800400FFL)
				// '                    ''const OLE_S_FIRST ((HRESULT)= &h00040000L)
				// '                    ''const OLE_S_LAST  ((HRESULT)= &h000400FFL)

				// '                    ' ''
				// '                    ''Old OLE errors
				// '                    ' ''
				// '                    ' ''
				// '                    ''MessageId: OLE_E_OLEVERB
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid OLEVERB structure
				// '                    ' ''
				// '                    ''const OLE_E_OLEVERB                    _HRESULT_TYPEDEF_(= &h80040000L)

				// '                    ' ''
				// '                    ''MessageId: OLE_E_ADVF
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid advise flags
				// '                    ' ''
				// '                    ''const OLE_E_ADVF                       _HRESULT_TYPEDEF_(= &h80040001L)

				// '                    ' ''
				// '                    ''MessageId: OLE_E_ENUM_NOMORE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Can't enumerate any more, because the associated data is missing
				// '                    ' ''
				// '                    ''const OLE_E_ENUM_NOMORE                _HRESULT_TYPEDEF_(= &h80040002L)

				// '                    ' ''
				// '                    ''MessageId: OLE_E_ADVISENOTSUPPORTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' This implementation doesn't take advises
				// '                    ' ''
				// '                    ''const OLE_E_ADVISENOTSUPPORTED         _HRESULT_TYPEDEF_(= &h80040003L)

				// '                    ' ''
				// '                    ''MessageId: OLE_E_NOCONNECTION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' There is no connection for this connection ID
				// '                    ' ''
				// '                    ''const OLE_E_NOCONNECTION               _HRESULT_TYPEDEF_(= &h80040004L)

				// '                    ' ''
				// '                    ''MessageId: OLE_E_NOTRUNNING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Need to run the object to perform this operation
				// '                    ' ''
				// '                    ''const OLE_E_NOTRUNNING                 _HRESULT_TYPEDEF_(= &h80040005L)

				// '                    ' ''
				// '                    ''MessageId: OLE_E_NOCACHE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' There is no cache to operate on
				// '                    ' ''
				// '                    ''const OLE_E_NOCACHE                    _HRESULT_TYPEDEF_(= &h80040006L)

				// '                    ' ''
				// '                    ''MessageId: OLE_E_BLANK
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Uninitialized object
				// '                    ' ''
				// '                    ''const OLE_E_BLANK                      _HRESULT_TYPEDEF_(= &h80040007L)

				// '                    ' ''
				// '                    ''MessageId: OLE_E_CLASSDIFF
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Linked object's source class has changed
				// '                    ' ''
				// '                    ''const OLE_E_CLASSDIFF                  _HRESULT_TYPEDEF_(= &h80040008L)

				// '                    ' ''
				// '                    ''MessageId: OLE_E_CANT_GETMONIKER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Not able to get the moniker of the object
				// '                    ' ''
				// '                    ''const OLE_E_CANT_GETMONIKER            _HRESULT_TYPEDEF_(= &h80040009L)

				// '                    ' ''
				// '                    ''MessageId: OLE_E_CANT_BINDTOSOURCE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Not able to bind to the source
				// '                    ' ''
				// '                    ''const OLE_E_CANT_BINDTOSOURCE          _HRESULT_TYPEDEF_(= &h8004000AL)

				// '                    ' ''
				// '                    ''MessageId: OLE_E_STATIC
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Object is static; operation not allowed
				// '                    ' ''
				// '                    ''const OLE_E_STATIC                     _HRESULT_TYPEDEF_(= &h8004000BL)

				// '                    ' ''
				// '                    ''MessageId: OLE_E_PROMPTSAVECANCELLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' User canceled [Out ] of save dialog
				// '                    ' ''
				// '                    ''const OLE_E_PROMPTSAVECANCELLED        _HRESULT_TYPEDEF_(= &h8004000CL)

				// '                    ' ''
				// '                    ''MessageId: OLE_E_INVALIDRECT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid rectangle
				// '                    ' ''
				// '                    ''const OLE_E_INVALIDRECT                _HRESULT_TYPEDEF_(= &h8004000DL)

				// '                    ' ''
				// '                    ''MessageId: OLE_E_WRONGCOMPOBJ
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' compobj.dll is too old for the ole2.dll initialized
				// '                    ' ''
				// '                    ''const OLE_E_WRONGCOMPOBJ               _HRESULT_TYPEDEF_(= &h8004000EL)

				// '                    ' ''
				// '                    ''MessageId: OLE_E_INVALIDHWND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid window handle
				// '                    ' ''
				// '                    ''const OLE_E_INVALIDHWND                _HRESULT_TYPEDEF_(= &h8004000FL)

				// '                    ' ''
				// '                    ''MessageId: OLE_E_NOT_INPLACEACTIVE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Object is not in any of the inplace active states
				// '                    ' ''
				// '                    ''const OLE_E_NOT_INPLACEACTIVE          _HRESULT_TYPEDEF_(= &h80040010L)

				// '                    ' ''
				// '                    ''MessageId: OLE_E_CANTCONVERT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Not able to convert object
				// '                    ' ''
				// '                    ''const OLE_E_CANTCONVERT                _HRESULT_TYPEDEF_(= &h80040011L)

				// '                    ' ''
				// '                    ''MessageId: OLE_E_NOSTORAGE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Not able to perform the operation because object is not given storage yet
				// '                    ' ''
				// '                    ''const OLE_E_NOSTORAGE                  _HRESULT_TYPEDEF_(= &h80040012L)

				// '                    ' ''
				// '                    ''MessageId: DV_E_FORMATETC
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid FORMATETC structure
				// '                    ' ''
				// '                    ''const DV_E_FORMATETC                   _HRESULT_TYPEDEF_(= &h80040064L)

				// '                    ' ''
				// '                    ''MessageId: DV_E_DVTARGETDEVICE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid DVTARGETDEVICE structure
				// '                    ' ''
				// '                    ''const DV_E_DVTARGETDEVICE              _HRESULT_TYPEDEF_(= &h80040065L)

				// '                    ' ''
				// '                    ''MessageId: DV_E_STGMEDIUM
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid STDGMEDIUM structure
				// '                    ' ''
				// '                    ''const DV_E_STGMEDIUM                   _HRESULT_TYPEDEF_(= &h80040066L)

				// '                    ' ''
				// '                    ''MessageId: DV_E_STATDATA
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid STATDATA structure
				// '                    ' ''
				// '                    ''const DV_E_STATDATA                    _HRESULT_TYPEDEF_(= &h80040067L)

				// '                    ' ''
				// '                    ''MessageId: DV_E_LINDEX
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid lindex
				// '                    ' ''
				// '                    ''const DV_E_LINDEX                      _HRESULT_TYPEDEF_(= &h80040068L)

				// '                    ' ''
				// '                    ''MessageId: DV_E_TYMED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid tymed
				// '                    ' ''
				// '                    ''const DV_E_TYMED                       _HRESULT_TYPEDEF_(= &h80040069L)

				// '                    ' ''
				// '                    ''MessageId: DV_E_CLIPFORMAT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid clipboard format
				// '                    ' ''
				// '                    ''const DV_E_CLIPFORMAT                  _HRESULT_TYPEDEF_(= &h8004006AL)

				// '                    ' ''
				// '                    ''MessageId: DV_E_DVASPECT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid aspect(s)
				// '                    ' ''
				// '                    ''const DV_E_DVASPECT                    _HRESULT_TYPEDEF_(= &h8004006BL)

				// '                    ' ''
				// '                    ''MessageId: DV_E_DVTARGETDEVICE_SIZE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' tdSize parameter of the DVTARGETDEVICE structure is invalid
				// '                    ' ''
				// '                    ''const DV_E_DVTARGETDEVICE_SIZE         _HRESULT_TYPEDEF_(= &h8004006CL)

				// '                    ' ''
				// '                    ''MessageId: DV_E_NOIVIEWOBJECT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Object doesn't support IViewObject interface
				// '                    ' ''
				// '                    ''const DV_E_NOIVIEWOBJECT               _HRESULT_TYPEDEF_(= &h8004006DL)

				// '                    ''const DRAGDROP_E_FIRST = &h80040100L
				// '                    ''const DRAGDROP_E_LAST  = &h8004010FL
				// '                    ''const DRAGDROP_S_FIRST = &h00040100L
				// '                    ''const DRAGDROP_S_LAST  = &h0004010FL
				// '                    ' ''
				// '                    ''MessageId: DRAGDROP_E_NOTREGISTERED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Trying to revoke a drop target that has not been registered
				// '                    ' ''
				// '                    ''const DRAGDROP_E_NOTREGISTERED         _HRESULT_TYPEDEF_(= &h80040100L)

				// '                    ' ''
				// '                    ''MessageId: DRAGDROP_E_ALREADYREGISTERED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' This window has already been registered as a drop target
				// '                    ' ''
				// '                    ''const DRAGDROP_E_ALREADYREGISTERED     _HRESULT_TYPEDEF_(= &h80040101L)

				// '                    ' ''
				// '                    ''MessageId: DRAGDROP_E_INVALIDHWND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid window handle
				// '                    ' ''
				// '                    ''const DRAGDROP_E_INVALIDHWND           _HRESULT_TYPEDEF_(= &h80040102L)

				// '                    ''const CLASSFACTORY_E_FIRST  = &h80040110L
				// '                    ''const CLASSFACTORY_E_LAST   = &h8004011FL
				// '                    ''const CLASSFACTORY_S_FIRST  = &h00040110L
				// '                    ''const CLASSFACTORY_S_LAST   = &h0004011FL
				// '                    ' ''
				// '                    ''MessageId: CLASS_E_NOAGGREGATION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Class does not support aggregation (or class object is remote)
				// '                    ' ''
				// '                    ''const CLASS_E_NOAGGREGATION            _HRESULT_TYPEDEF_(= &h80040110L)

				// '                    ' ''
				// '                    ''MessageId: CLASS_E_CLASSNOTAVAILABLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' ClassFactory cannot supply requested class
				// '                    ' ''
				// '                    ''const CLASS_E_CLASSNOTAVAILABLE        _HRESULT_TYPEDEF_(= &h80040111L)

				// '                    ' ''
				// '                    ''MessageId: CLASS_E_NOTLICENSED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Class is not licensed for use
				// '                    ' ''
				// '                    ''const CLASS_E_NOTLICENSED              _HRESULT_TYPEDEF_(= &h80040112L)

				// '                    ''const MARSHAL_E_FIRST  = &h80040120L
				// '                    ''const MARSHAL_E_LAST   = &h8004012FL
				// '                    ''const MARSHAL_S_FIRST  = &h00040120L
				// '                    ''const MARSHAL_S_LAST   = &h0004012FL
				// '                    ''const DATA_E_FIRST     = &h80040130L
				// '                    ''const DATA_E_LAST      = &h8004013FL
				// '                    ''const DATA_S_FIRST     = &h00040130L
				// '                    ''const DATA_S_LAST      = &h0004013FL
				// '                    ''const VIEW_E_FIRST     = &h80040140L
				// '                    ''const VIEW_E_LAST      = &h8004014FL
				// '                    ''const VIEW_S_FIRST     = &h00040140L
				// '                    ''const VIEW_S_LAST      = &h0004014FL
				// '                    ' ''
				// '                    ''MessageId: VIEW_E_DRAW
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Error drawing view
				// '                    ' ''
				// '                    ''const VIEW_E_DRAW                      _HRESULT_TYPEDEF_(= &h80040140L)

				// '                    ''const REGDB_E_FIRST     = &h80040150L
				// '                    ''const REGDB_E_LAST      = &h8004015FL
				// '                    ''const REGDB_S_FIRST     = &h00040150L
				// '                    ''const REGDB_S_LAST      = &h0004015FL
				// '                    ' ''
				// '                    ''MessageId: REGDB_E_READREGDB
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Could not read key from registry
				// '                    ' ''
				// '                    ''const REGDB_E_READREGDB                _HRESULT_TYPEDEF_(= &h80040150L)

				// '                    ' ''
				// '                    ''MessageId: REGDB_E_WRITEREGDB
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Could not write key to registry
				// '                    ' ''
				// '                    ''const REGDB_E_WRITEREGDB               _HRESULT_TYPEDEF_(= &h80040151L)

				// '                    ' ''
				// '                    ''MessageId: REGDB_E_KEYMISSING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Could not find the key in the registry
				// '                    ' ''
				// '                    ''const REGDB_E_KEYMISSING               _HRESULT_TYPEDEF_(= &h80040152L)

				// '                    ' ''
				// '                    ''MessageId: REGDB_E_INVALIDVALUE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid value for registry
				// '                    ' ''
				// '                    ''const REGDB_E_INVALIDVALUE             _HRESULT_TYPEDEF_(= &h80040153L)

				// '                    ' ''
				// '                    ''MessageId: REGDB_E_CLASSNOTREG
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Class not registered
				// '                    ' ''
				// '                    ''const REGDB_E_CLASSNOTREG              _HRESULT_TYPEDEF_(= &h80040154L)

				// '                    ' ''
				// '                    ''MessageId: REGDB_E_IIDNOTREG
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Interface not registered
				// '                    ' ''
				// '                    ''const REGDB_E_IIDNOTREG                _HRESULT_TYPEDEF_(= &h80040155L)

				// '                    ' ''
				// '                    ''MessageId: REGDB_E_BADTHREADINGMODEL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Threading model entry is not valid
				// '                    ' ''
				// '                    ''const REGDB_E_BADTHREADINGMODEL        _HRESULT_TYPEDEF_(= &h80040156L)

				// '                    ''const CAT_E_FIRST     = &h80040160L
				// '                    ''const CAT_E_LAST      = &h80040161L
				// '                    ' ''
				// '                    ''MessageId: CAT_E_CATIDNOEXIST
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' CATID does not exist
				// '                    ' ''
				// '                    ''const CAT_E_CATIDNOEXIST               _HRESULT_TYPEDEF_(= &h80040160L)

				// '                    ' ''
				// '                    ''MessageId: CAT_E_NODESCRIPTION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Description not found
				// '                    ' ''
				// '                    ''const CAT_E_NODESCRIPTION              _HRESULT_TYPEDEF_(= &h80040161L)

				// '                    ''''''''''''''''''''
				// '                    ''                               '
				// '                    ''    Class Store Error Codes    '
				// '                    ''                               '
				// '                    ''''''''''''''''''''
				// '                    ''const CS_E_FIRST     = &h80040164L
				// '                    ''const CS_E_LAST      = &h8004016FL
				// '                    ' ''
				// '                    ''MessageId: CS_E_PACKAGE_NOTFOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' No package in the software installation data in the Active Directory meets this criteria.
				// '                    ' ''
				// '                    ''const CS_E_PACKAGE_NOTFOUND            _HRESULT_TYPEDEF_(= &h80040164L)

				// '                    ' ''
				// '                    ''MessageId: CS_E_NOT_DELETABLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Deleting this will break the referential integrity of the software installation data in the Active Directory.
				// '                    ' ''
				// '                    ''const CS_E_NOT_DELETABLE               _HRESULT_TYPEDEF_(= &h80040165L)

				// '                    ' ''
				// '                    ''MessageId: CS_E_CLASS_NOTFOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The CLSID was not found in the software installation data in the Active Directory.
				// '                    ' ''
				// '                    ''const CS_E_CLASS_NOTFOUND              _HRESULT_TYPEDEF_(= &h80040166L)

				// '                    ' ''
				// '                    ''MessageId: CS_E_INVALID_VERSION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The software installation data in the Active Directory is corrupt.
				// '                    ' ''
				// '                    ''const CS_E_INVALID_VERSION             _HRESULT_TYPEDEF_(= &h80040167L)

				// '                    ' ''
				// '                    ''MessageId: CS_E_NO_CLASSSTORE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' There is no software installation data in the Active Directory.
				// '                    ' ''
				// '                    ''const CS_E_NO_CLASSSTORE               _HRESULT_TYPEDEF_(= &h80040168L)

				// '                    ' ''
				// '                    ''MessageId: CS_E_OBJECT_NOTFOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' There is no software installation data object in the Active Directory.
				// '                    ' ''
				// '                    ''const CS_E_OBJECT_NOTFOUND             _HRESULT_TYPEDEF_(= &h80040169L)

				// '                    ' ''
				// '                    ''MessageId: CS_E_OBJECT_ALREADY_EXISTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The software installation data object in the Active Directory already exists.
				// '                    ' ''
				// '                    ''const CS_E_OBJECT_ALREADY_EXISTS       _HRESULT_TYPEDEF_(= &h8004016AL)

				// '                    ' ''
				// '                    ''MessageId: CS_E_INVALID_PATH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The path to the software installation data in the Active Directory is not correct.
				// '                    ' ''
				// '                    ''const CS_E_INVALID_PATH                _HRESULT_TYPEDEF_(= &h8004016BL)

				// '                    ' ''
				// '                    ''MessageId: CS_E_NETWORK_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A network error interrupted the operation.
				// '                    ' ''
				// '                    ''const CS_E_NETWORK_ERROR               _HRESULT_TYPEDEF_(= &h8004016CL)

				// '                    ' ''
				// '                    ''MessageId: CS_E_ADMIN_LIMIT_EXCEEDED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The size of this object exceeds the maximum size set by the Administrator.
				// '                    ' ''
				// '                    ''const CS_E_ADMIN_LIMIT_EXCEEDED        _HRESULT_TYPEDEF_(= &h8004016DL)

				// '                    ' ''
				// '                    ''MessageId: CS_E_SCHEMA_MISMATCH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The schema for the software installation data in the Active Directory does not match the required schema.
				// '                    ' ''
				// '                    ''const CS_E_SCHEMA_MISMATCH             _HRESULT_TYPEDEF_(= &h8004016EL)

				// '                    ' ''
				// '                    ''MessageId: CS_E_INTERNAL_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An error occurred in the software installation data in the Active Directory.
				// '                    ' ''
				// '                    ''const CS_E_INTERNAL_ERROR              _HRESULT_TYPEDEF_(= &h8004016FL)

				// '                    ''const CACHE_E_FIRST     = &h80040170L
				// '                    ''const CACHE_E_LAST      = &h8004017FL
				// '                    ''const CACHE_S_FIRST     = &h00040170L
				// '                    ''const CACHE_S_LAST      = &h0004017FL
				// '                    ' ''
				// '                    ''MessageId: CACHE_E_NOCACHE_UPDATED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Cache not updated
				// '                    ' ''
				// '                    ''const CACHE_E_NOCACHE_UPDATED          _HRESULT_TYPEDEF_(= &h80040170L)

				// '                    ''const OLEOBJ_E_FIRST     = &h80040180L
				// '                    ''const OLEOBJ_E_LAST      = &h8004018FL
				// '                    ''const OLEOBJ_S_FIRST     = &h00040180L
				// '                    ''const OLEOBJ_S_LAST      = &h0004018FL
				// '                    ' ''
				// '                    ''MessageId: OLEOBJ_E_NOVERBS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' No verbs for OLE object
				// '                    ' ''
				// '                    ''const OLEOBJ_E_NOVERBS                 _HRESULT_TYPEDEF_(= &h80040180L)

				// '                    ' ''
				// '                    ''MessageId: OLEOBJ_E_INVALIDVERB
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid verb for OLE object
				// '                    ' ''
				// '                    ''const OLEOBJ_E_INVALIDVERB             _HRESULT_TYPEDEF_(= &h80040181L)

				// '                    ''const CLIENTSITE_E_FIRST     = &h80040190L
				// '                    ''const CLIENTSITE_E_LAST      = &h8004019FL
				// '                    ''const CLIENTSITE_S_FIRST     = &h00040190L
				// '                    ''const CLIENTSITE_S_LAST      = &h0004019FL
				// '                    ' ''
				// '                    ''MessageId: INPLACE_E_NOTUNDOABLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Undo is not available
				// '                    ' ''
				// '                    ''const INPLACE_E_NOTUNDOABLE            _HRESULT_TYPEDEF_(= &h800401A0L)

				// '                    ' ''
				// '                    ''MessageId: INPLACE_E_NOTOOLSPACE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Space for tools is not available
				// '                    ' ''
				// '                    ''const INPLACE_E_NOTOOLSPACE            _HRESULT_TYPEDEF_(= &h800401A1L)

				// '                    ''const INPLACE_E_FIRST     = &h800401A0L
				// '                    ''const INPLACE_E_LAST      = &h800401AFL
				// '                    ''const INPLACE_S_FIRST     = &h000401A0L
				// '                    ''const INPLACE_S_LAST      = &h000401AFL
				// '                    ''const ENUM_E_FIRST        = &h800401B0L
				// '                    ''const ENUM_E_LAST         = &h800401BFL
				// '                    ''const ENUM_S_FIRST        = &h000401B0L
				// '                    ''const ENUM_S_LAST         = &h000401BFL
				// '                    ''const CONVERT10_E_FIRST        = &h800401C0L
				// '                    ''const CONVERT10_E_LAST         = &h800401CFL
				// '                    ''const CONVERT10_S_FIRST        = &h000401C0L
				// '                    ''const CONVERT10_S_LAST         = &h000401CFL
				// '                    ' ''
				// '                    ''MessageId: CONVERT10_E_OLESTREAM_GET
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OLESTREAM Get method failed
				// '                    ' ''
				// '                    ''const CONVERT10_E_OLESTREAM_GET        _HRESULT_TYPEDEF_(= &h800401C0L)

				// '                    ' ''
				// '                    ''MessageId: CONVERT10_E_OLESTREAM_PUT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OLESTREAM Put method failed
				// '                    ' ''
				// '                    ''const CONVERT10_E_OLESTREAM_PUT        _HRESULT_TYPEDEF_(= &h800401C1L)

				// '                    ' ''
				// '                    ''MessageId: CONVERT10_E_OLESTREAM_FMT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Contents of the OLESTREAM not in correct format
				// '                    ' ''
				// '                    ''const CONVERT10_E_OLESTREAM_FMT        _HRESULT_TYPEDEF_(= &h800401C2L)

				// '                    ' ''
				// '                    ''MessageId: CONVERT10_E_OLESTREAM_BITMAP_TO_DIB
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' There was an error in a Windows GDI call while converting the bitmap to a DIB
				// '                    ' ''
				// '                    ''const CONVERT10_E_OLESTREAM_BITMAP_TO_DIB _HRESULT_TYPEDEF_(= &h800401C3L)

				// '                    ' ''
				// '                    ''MessageId: CONVERT10_E_STG_FMT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Contents of the IStorage not in correct format
				// '                    ' ''
				// '                    ''const CONVERT10_E_STG_FMT              _HRESULT_TYPEDEF_(= &h800401C4L)

				// '                    ' ''
				// '                    ''MessageId: CONVERT10_E_STG_NO_STD_STREAM
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Contents of IStorage is missing one of the standard streams
				// '                    ' ''
				// '                    ''const CONVERT10_E_STG_NO_STD_STREAM    _HRESULT_TYPEDEF_(= &h800401C5L)

				// '                    ' ''
				// '                    ''MessageId: CONVERT10_E_STG_DIB_TO_BITMAP
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' There was an error in a Windows GDI call while converting the DIB to a bitmap.
				// '                    '' 
				// '                    ' ''
				// '                    ''const CONVERT10_E_STG_DIB_TO_BITMAP    _HRESULT_TYPEDEF_(= &h800401C6L)

				// '                    ''const CLIPBRD_E_FIRST        = &h800401D0L
				// '                    ''const CLIPBRD_E_LAST         = &h800401DFL
				// '                    ''const CLIPBRD_S_FIRST        = &h000401D0L
				// '                    ''const CLIPBRD_S_LAST         = &h000401DFL
				// '                    ' ''
				// '                    ''MessageId: CLIPBRD_E_CANT_OPEN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OpenClipboard Failed
				// '                    ' ''
				// '                    ''const CLIPBRD_E_CANT_OPEN              _HRESULT_TYPEDEF_(= &h800401D0L)

				// '                    ' ''
				// '                    ''MessageId: CLIPBRD_E_CANT_EMPTY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' EmptyClipboard Failed
				// '                    ' ''
				// '                    ''const CLIPBRD_E_CANT_EMPTY             _HRESULT_TYPEDEF_(= &h800401D1L)

				// '                    ' ''
				// '                    ''MessageId: CLIPBRD_E_CANT_SET
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' SetClipboard Failed
				// '                    ' ''
				// '                    ''const CLIPBRD_E_CANT_SET               _HRESULT_TYPEDEF_(= &h800401D2L)

				// '                    ' ''
				// '                    ''MessageId: CLIPBRD_E_BAD_DATA
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Data on clipboard is invalid
				// '                    ' ''
				// '                    ''const CLIPBRD_E_BAD_DATA               _HRESULT_TYPEDEF_(= &h800401D3L)

				// '                    ' ''
				// '                    ''MessageId: CLIPBRD_E_CANT_CLOSE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' CloseClipboard Failed
				// '                    ' ''
				// '                    ''const CLIPBRD_E_CANT_CLOSE             _HRESULT_TYPEDEF_(= &h800401D4L)

				// '                    ''const MK_E_FIRST        = &h800401E0L
				// '                    ''const MK_E_LAST         = &h800401EFL
				// '                    ''const MK_S_FIRST        = &h000401E0L
				// '                    ''const MK_S_LAST         = &h000401EFL
				// '                    ' ''
				// '                    ''MessageId: MK_E_CONNECTMANUALLY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Moniker needs to be connected manually
				// '                    ' ''
				// '                    ''const MK_E_CONNECTMANUALLY             _HRESULT_TYPEDEF_(= &h800401E0L)

				// '                    ' ''
				// '                    ''MessageId: MK_E_EXCEEDEDDEADLINE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Operation exceeded deadline
				// '                    ' ''
				// '                    ''const MK_E_EXCEEDEDDEADLINE            _HRESULT_TYPEDEF_(= &h800401E1L)

				// '                    ' ''
				// '                    ''MessageId: MK_E_NEEDGENERIC
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Moniker needs to be generic
				// '                    ' ''
				// '                    ''const MK_E_NEEDGENERIC                 _HRESULT_TYPEDEF_(= &h800401E2L)

				// '                    ' ''
				// '                    ''MessageId: MK_E_UNAVAILABLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Operation unavailable
				// '                    ' ''
				// '                    ''const MK_E_UNAVAILABLE                 _HRESULT_TYPEDEF_(= &h800401E3L)

				// '                    ' ''
				// '                    ''MessageId: MK_E_SYNTAX
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid syntax
				// '                    ' ''
				// '                    ''const MK_E_SYNTAX                      _HRESULT_TYPEDEF_(= &h800401E4L)

				// '                    ' ''
				// '                    ''MessageId: MK_E_NOOBJECT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' No object for moniker
				// '                    ' ''
				// '                    ''const MK_E_NOOBJECT                    _HRESULT_TYPEDEF_(= &h800401E5L)

				// '                    ' ''
				// '                    ''MessageId: MK_E_INVALIDEXTENSION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Bad extension for file
				// '                    ' ''
				// '                    ''const MK_E_INVALIDEXTENSION            _HRESULT_TYPEDEF_(= &h800401E6L)

				// '                    ' ''
				// '                    ''MessageId: MK_E_INTERMEDIATEINTERFACENOTSUPPORTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Intermediate operation failed
				// '                    ' ''
				// '                    ''const MK_E_INTERMEDIATEINTERFACENOTSUPPORTED _HRESULT_TYPEDEF_(= &h800401E7L)

				// '                    ' ''
				// '                    ''MessageId: MK_E_NOTBINDABLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Moniker is not bindable
				// '                    ' ''
				// '                    ''const MK_E_NOTBINDABLE                 _HRESULT_TYPEDEF_(= &h800401E8L)

				// '                    ' ''
				// '                    ''MessageId: MK_E_NOTBOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Moniker is not bound
				// '                    ' ''
				// '                    ''const MK_E_NOTBOUND                    _HRESULT_TYPEDEF_(= &h800401E9L)

				// '                    ' ''
				// '                    ''MessageId: MK_E_CANTOPENFILE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Moniker cannot open file
				// '                    ' ''
				// '                    ''const MK_E_CANTOPENFILE                _HRESULT_TYPEDEF_(= &h800401EAL)

				// '                    ' ''
				// '                    ''MessageId: MK_E_MUSTBOTHERUSER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' User input required for operation to succeed
				// '                    ' ''
				// '                    ''const MK_E_MUSTBOTHERUSER              _HRESULT_TYPEDEF_(= &h800401EBL)

				// '                    ' ''
				// '                    ''MessageId: MK_E_NOINVERSE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Moniker class has no inverse
				// '                    ' ''
				// '                    ''const MK_E_NOINVERSE                   _HRESULT_TYPEDEF_(= &h800401ECL)

				// '                    ' ''
				// '                    ''MessageId: MK_E_NOSTORAGE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Moniker does not refer to storage
				// '                    ' ''
				// '                    ''const MK_E_NOSTORAGE                   _HRESULT_TYPEDEF_(= &h800401EDL)

				// '                    ' ''
				// '                    ''MessageId: MK_E_NOPREFIX
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' No common prefix
				// '                    ' ''
				// '                    ''const MK_E_NOPREFIX                    _HRESULT_TYPEDEF_(= &h800401EEL)

				// '                    ' ''
				// '                    ''MessageId: MK_E_ENUMERATION_FAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Moniker could not be enumerated
				// '                    ' ''
				// '                    ''const MK_E_ENUMERATION_FAILED          _HRESULT_TYPEDEF_(= &h800401EFL)

				// '                    ''const CO_E_FIRST        = &h800401F0L
				// '                    ''const CO_E_LAST         = &h800401FFL
				// '                    ''const CO_S_FIRST        = &h000401F0L
				// '                    ''const CO_S_LAST         = &h000401FFL
				// '                    ' ''
				// '                    ''MessageId: CO_E_NOTINITIALIZED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' CoInitialize has not been called.
				// '                    ' ''
				// '                    ''const CO_E_NOTINITIALIZED              _HRESULT_TYPEDEF_(= &h800401F0L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_ALREADYINITIALIZED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' CoInitialize has already been called.
				// '                    ' ''
				// '                    ''const CO_E_ALREADYINITIALIZED          _HRESULT_TYPEDEF_(= &h800401F1L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_CANTDETERMINECLASS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Class of object cannot be determined
				// '                    ' ''
				// '                    ''const CO_E_CANTDETERMINECLASS          _HRESULT_TYPEDEF_(= &h800401F2L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_CLASSSTRING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid class string
				// '                    ' ''
				// '                    ''const CO_E_CLASSSTRING                 _HRESULT_TYPEDEF_(= &h800401F3L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_IIDSTRING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid interface string
				// '                    ' ''
				// '                    ''const CO_E_IIDSTRING                   _HRESULT_TYPEDEF_(= &h800401F4L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_APPNOTFOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Application not found
				// '                    ' ''
				// '                    ''const CO_E_APPNOTFOUND                 _HRESULT_TYPEDEF_(= &h800401F5L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_APPSINGLEUSE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Application cannot be run more than once
				// '                    ' ''
				// '                    ''const CO_E_APPSINGLEUSE                _HRESULT_TYPEDEF_(= &h800401F6L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_ERRORINAPP
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Some error in application program
				// '                    ' ''
				// '                    ''const CO_E_ERRORINAPP                  _HRESULT_TYPEDEF_(= &h800401F7L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_DLLNOTFOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' DLL for class not found
				// '                    ' ''
				// '                    ''const CO_E_DLLNOTFOUND                 _HRESULT_TYPEDEF_(= &h800401F8L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_ERRORINDLL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Error in the DLL
				// '                    ' ''
				// '                    ''const CO_E_ERRORINDLL                  _HRESULT_TYPEDEF_(= &h800401F9L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_WRONGOSFORAPP
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Wrong OS or OS version for application
				// '                    ' ''
				// '                    ''const CO_E_WRONGOSFORAPP               _HRESULT_TYPEDEF_(= &h800401FAL)

				// '                    ' ''
				// '                    ''MessageId: CO_E_OBJNOTREG
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Object is not registered
				// '                    ' ''
				// '                    ''const CO_E_OBJNOTREG                   _HRESULT_TYPEDEF_(= &h800401FBL)

				// '                    ' ''
				// '                    ''MessageId: CO_E_OBJISREG
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Object is already registered
				// '                    ' ''
				// '                    ''const CO_E_OBJISREG                    _HRESULT_TYPEDEF_(= &h800401FCL)

				// '                    ' ''
				// '                    ''MessageId: CO_E_OBJNOTCONNECTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Object is not connected to server
				// '                    ' ''
				// '                    ''const CO_E_OBJNOTCONNECTED             _HRESULT_TYPEDEF_(= &h800401FDL)

				// '                    ' ''
				// '                    ''MessageId: CO_E_APPDIDNTREG
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Application was launched but it didn't register a class factory
				// '                    ' ''
				// '                    ''const CO_E_APPDIDNTREG                 _HRESULT_TYPEDEF_(= &h800401FEL)

				// '                    ' ''
				// '                    ''MessageId: CO_E_RELEASED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Object has been released
				// '                    ' ''
				// '                    ''const CO_E_RELEASED                    _HRESULT_TYPEDEF_(= &h800401FFL)

				// '                    ''const EVENT_E_FIRST        = &h80040200L
				// '                    ''const EVENT_E_LAST         = &h8004021FL
				// '                    ''const EVENT_S_FIRST        = &h00040200L
				// '                    ''const EVENT_S_LAST         = &h0004021FL
				// '                    ' ''
				// '                    ''MessageId: EVENT_S_SOME_SUBSCRIBERS_FAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An event was able to invoke some but not all of the subscribers
				// '                    ' ''
				// '                    ''const EVENT_S_SOME_SUBSCRIBERS_FAILED  _HRESULT_TYPEDEF_(= &h00040200L)

				// '                    ' ''
				// '                    ''MessageId: EVENT_E_ALL_SUBSCRIBERS_FAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An event was unable to invoke any of the subscribers
				// '                    ' ''
				// '                    ''const EVENT_E_ALL_SUBSCRIBERS_FAILED   _HRESULT_TYPEDEF_(= &h80040201L)

				// '                    ' ''
				// '                    ''MessageId: EVENT_S_NOSUBSCRIBERS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An event was delivered but there were no subscribers
				// '                    ' ''
				// '                    ''const EVENT_S_NOSUBSCRIBERS            _HRESULT_TYPEDEF_(= &h00040202L)

				// '                    ' ''
				// '                    ''MessageId: EVENT_E_QUERYSYNTAX
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A syntax error occurred trying to evaluate a query string
				// '                    ' ''
				// '                    ''const EVENT_E_QUERYSYNTAX              _HRESULT_TYPEDEF_(= &h80040203L)

				// '                    ' ''
				// '                    ''MessageId: EVENT_E_QUERYFIELD
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An invalid field name was used in a query string
				// '                    ' ''
				// '                    ''const EVENT_E_QUERYFIELD               _HRESULT_TYPEDEF_(= &h80040204L)

				// '                    ' ''
				// '                    ''MessageId: EVENT_E_INTERNALEXCEPTION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An unexpected exception was raised
				// '                    ' ''
				// '                    ''const EVENT_E_INTERNALEXCEPTION        _HRESULT_TYPEDEF_(= &h80040205L)

				// '                    ' ''
				// '                    ''MessageId: EVENT_E_INTERNALERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An unexpected internal error was detected
				// '                    ' ''
				// '                    ''const EVENT_E_INTERNALERROR            _HRESULT_TYPEDEF_(= &h80040206L)

				// '                    ' ''
				// '                    ''MessageId: EVENT_E_INVALID_PER_USER_SID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The owner SID on a per-user subscription doesn't exist
				// '                    ' ''
				// '                    ''const EVENT_E_INVALID_PER_USER_SID     _HRESULT_TYPEDEF_(= &h80040207L)

				// '                    ' ''
				// '                    ''MessageId: EVENT_E_USER_EXCEPTION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A user-supplied component or subscriber raised an exception
				// '                    ' ''
				// '                    ''const EVENT_E_USER_EXCEPTION           _HRESULT_TYPEDEF_(= &h80040208L)

				// '                    ' ''
				// '                    ''MessageId: EVENT_E_TOO_MANY_METHODS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An interface has too many methods to fire events from
				// '                    ' ''
				// '                    ''const EVENT_E_TOO_MANY_METHODS         _HRESULT_TYPEDEF_(= &h80040209L)

				// '                    ' ''
				// '                    ''MessageId: EVENT_E_MISSING_EVENTCLASS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A subscription cannot be stored unless its event class already exists
				// '                    ' ''
				// '                    ''const EVENT_E_MISSING_EVENTCLASS       _HRESULT_TYPEDEF_(= &h8004020AL)

				// '                    ' ''
				// '                    ''MessageId: EVENT_E_NOT_ALL_REMOVED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Not all the objects requested could be removed
				// '                    ' ''
				// '                    ''const EVENT_E_NOT_ALL_REMOVED          _HRESULT_TYPEDEF_(= &h8004020BL)

				// '                    ' ''
				// '                    ''MessageId: EVENT_E_COMPLUS_NOT_INSTALLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' COM+ is required for this operation, but is not installed
				// '                    ' ''
				// '                    ''const EVENT_E_COMPLUS_NOT_INSTALLED    _HRESULT_TYPEDEF_(= &h8004020CL)

				// '                    ' ''
				// '                    ''MessageId: EVENT_E_CANT_MODIFY_OR_DELETE_UNCONFIGURED_OBJECT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Cannot modify or delete an object that was not added using the COM+ Admin SDK
				// '                    ' ''
				// '                    ''const EVENT_E_CANT_MODIFY_OR_DELETE_UNCONFIGURED_OBJECT _HRESULT_TYPEDEF_(= &h8004020DL)

				// '                    ' ''
				// '                    ''MessageId: EVENT_E_CANT_MODIFY_OR_DELETE_CONFIGURED_OBJECT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Cannot modify or delete an object that was added using the COM+ Admin SDK
				// '                    ' ''
				// '                    ''const EVENT_E_CANT_MODIFY_OR_DELETE_CONFIGURED_OBJECT _HRESULT_TYPEDEF_(= &h8004020EL)

				// '                    ' ''
				// '                    ''MessageId: EVENT_E_INVALID_EVENT_CLASS_PARTITION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The event class for this subscription is in an invalid partition
				// '                    ' ''
				// '                    ''const EVENT_E_INVALID_EVENT_CLASS_PARTITION _HRESULT_TYPEDEF_(= &h8004020FL)

				// '                    ' ''
				// '                    ''MessageId: EVENT_E_PER_USER_SID_NOT_LOGGED_ON
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The owner of the PerUser subscription is not logged on to the system specified
				// '                    ' ''
				// '                    ''const EVENT_E_PER_USER_SID_NOT_LOGGED_ON _HRESULT_TYPEDEF_(= &h80040210L)

				// '                    ''const XACT_E_FIRST   = &h8004D000
				// '                    ''const XACT_E_LAST    = &h8004D029
				// '                    ''const XACT_S_FIRST   = &h0004D000
				// '                    ''const XACT_S_LAST    = &h0004D010
				// '                    ' ''
				// '                    ''MessageId: XACT_E_ALREADYOTHERSINGLEPHASE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Another single phase resource manager has already been enlisted in this transaction.
				// '                    ' ''
				// '                    ''const XACT_E_ALREADYOTHERSINGLEPHASE   _HRESULT_TYPEDEF_(= &h8004D000L)

				// '                    ' ''
				// '                    ''MessageId: XACT_E_CANTRETAIN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A retaining commit or abort is not supported
				// '                    ' ''
				// '                    ''const XACT_E_CANTRETAIN                _HRESULT_TYPEDEF_(= &h8004D001L)

				// '                    ' ''
				// '                    ''MessageId: XACT_E_COMMITFAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The transaction failed to commit for an unknown reason. The transaction was aborted.
				// '                    ' ''
				// '                    ''const XACT_E_COMMITFAILED              _HRESULT_TYPEDEF_(= &h8004D002L)

				// '                    ' ''
				// '                    ''MessageId: XACT_E_COMMITPREVENTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Cannot call commit on this transaction object because the calling application did not initiate the transaction.
				// '                    ' ''
				// '                    ''const XACT_E_COMMITPREVENTED           _HRESULT_TYPEDEF_(= &h8004D003L)

				// '                    ' ''
				// '                    ''MessageId: XACT_E_HEURISTICABORT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Instead of committing, the resource heuristically aborted.
				// '                    ' ''
				// '                    ''const XACT_E_HEURISTICABORT            _HRESULT_TYPEDEF_(= &h8004D004L)

				// '                    ' ''
				// '                    ''MessageId: XACT_E_HEURISTICCOMMIT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Instead of aborting, the resource heuristically committed.
				// '                    ' ''
				// '                    ''const XACT_E_HEURISTICCOMMIT           _HRESULT_TYPEDEF_(= &h8004D005L)

				// '                    ' ''
				// '                    ''MessageId: XACT_E_HEURISTICDAMAGE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Some of the states of the resource were committed while others were aborted, likely because of heuristic decisions.
				// '                    ' ''
				// '                    ''const XACT_E_HEURISTICDAMAGE           _HRESULT_TYPEDEF_(= &h8004D006L)

				// '                    ' ''
				// '                    ''MessageId: XACT_E_HEURISTICDANGER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Some of the states of the resource may have been committed while others may have been aborted, likely because of heuristic decisions.
				// '                    ' ''
				// '                    ''const XACT_E_HEURISTICDANGER           _HRESULT_TYPEDEF_(= &h8004D007L)

				// '                    ' ''
				// '                    ''MessageId: XACT_E_ISOLATIONLEVEL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested isolation level is not valid or supported.
				// '                    ' ''
				// '                    ''const XACT_E_ISOLATIONLEVEL            _HRESULT_TYPEDEF_(= &h8004D008L)

				// '                    ' ''
				// '                    ''MessageId: XACT_E_NOASYNC
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The transaction manager doesn't support an asynchronous operation for this method.
				// '                    ' ''
				// '                    ''const XACT_E_NOASYNC                   _HRESULT_TYPEDEF_(= &h8004D009L)

				// '                    ' ''
				// '                    ''MessageId: XACT_E_NOENLIST
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unable to enlist in the transaction.
				// '                    ' ''
				// '                    ''const XACT_E_NOENLIST                  _HRESULT_TYPEDEF_(= &h8004D00AL)

				// '                    ' ''
				// '                    ''MessageId: XACT_E_NOISORETAIN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested semantics of retention of isolation across retaining commit and abort boundaries cannot be supported by this transaction implementation, or isoFlags was not equal to zero.
				// '                    ' ''
				// '                    ''const XACT_E_NOISORETAIN               _HRESULT_TYPEDEF_(= &h8004D00BL)

				// '                    ' ''
				// '                    ''MessageId: XACT_E_NORESOURCE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' There is no resource presently associated with this enlistment
				// '                    ' ''
				// '                    ''const XACT_E_NORESOURCE                _HRESULT_TYPEDEF_(= &h8004D00CL)

				// '                    ' ''
				// '                    ''MessageId: XACT_E_NOTCURRENT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The transaction failed to commit due to the failure of optimistic concurrency control in at least one of the resource managers.
				// '                    ' ''
				// '                    ''const XACT_E_NOTCURRENT                _HRESULT_TYPEDEF_(= &h8004D00DL)

				// '                    ' ''
				// '                    ''MessageId: XACT_E_NOTRANSACTION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The transaction has already been implicitly or explicitly committed or aborted
				// '                    ' ''
				// '                    ''const XACT_E_NOTRANSACTION             _HRESULT_TYPEDEF_(= &h8004D00EL)

				// '                    ' ''
				// '                    ''MessageId: XACT_E_NOTSUPPORTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An invalid combination of flags was specified
				// '                    ' ''
				// '                    ''const XACT_E_NOTSUPPORTED              _HRESULT_TYPEDEF_(= &h8004D00FL)

				// '                    ' ''
				// '                    ''MessageId: XACT_E_UNKNOWNRMGRID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The resource manager id is not associated with this transaction or the transaction manager.
				// '                    ' ''
				// '                    ''const XACT_E_UNKNOWNRMGRID             _HRESULT_TYPEDEF_(= &h8004D010L)

				// '                    ' ''
				// '                    ''MessageId: XACT_E_WRONGSTATE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' This method was called in the wrong state
				// '                    ' ''
				// '                    ''const XACT_E_WRONGSTATE                _HRESULT_TYPEDEF_(= &h8004D011L)

				// '                    ' ''
				// '                    ''MessageId: XACT_E_WRONGUOW
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The indicated unit of work does not match the unit of work expected by the resource manager.
				// '                    ' ''
				// '                    ''const XACT_E_WRONGUOW                  _HRESULT_TYPEDEF_(= &h8004D012L)

				// '                    ' ''
				// '                    ''MessageId: XACT_E_XTIONEXISTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An enlistment in a transaction already exists.
				// '                    ' ''
				// '                    ''const XACT_E_XTIONEXISTS               _HRESULT_TYPEDEF_(= &h8004D013L)

				// '                    ' ''
				// '                    ''MessageId: XACT_E_NOIMPORTOBJECT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An import object for the transaction could not be found.
				// '                    ' ''
				// '                    ''const XACT_E_NOIMPORTOBJECT            _HRESULT_TYPEDEF_(= &h8004D014L)

				// '                    ' ''
				// '                    ''MessageId: XACT_E_INVALIDCOOKIE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The transaction cookie is invalid.
				// '                    ' ''
				// '                    ''const XACT_E_INVALIDCOOKIE             _HRESULT_TYPEDEF_(= &h8004D015L)

				// '                    ' ''
				// '                    ''MessageId: XACT_E_INDOUBT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The transaction status is in doubt. A communication failure occurred, or a transaction manager or resource manager has failed
				// '                    ' ''
				// '                    ''const XACT_E_INDOUBT                   _HRESULT_TYPEDEF_(= &h8004D016L)

				// '                    ' ''
				// '                    ''MessageId: XACT_E_NOTIMEOUT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A time-out was specified, but time-outs are not supported.
				// '                    ' ''
				// '                    ''const XACT_E_NOTIMEOUT                 _HRESULT_TYPEDEF_(= &h8004D017L)

				// '                    ' ''
				// '                    ''MessageId: XACT_E_ALREADYINPROGRESS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested operation is already in progress for the transaction.
				// '                    ' ''
				// '                    ''const XACT_E_ALREADYINPROGRESS         _HRESULT_TYPEDEF_(= &h8004D018L)

				// '                    ' ''
				// '                    ''MessageId: XACT_E_ABORTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The transaction has already been aborted.
				// '                    ' ''
				// '                    ''const XACT_E_ABORTED                   _HRESULT_TYPEDEF_(= &h8004D019L)

				// '                    ' ''
				// '                    ''MessageId: XACT_E_LOGFULL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The Transaction Manager returned a log full error.
				// '                    ' ''
				// '                    ''const XACT_E_LOGFULL                   _HRESULT_TYPEDEF_(= &h8004D01AL)

				// '                    ' ''
				// '                    ''MessageId: XACT_E_TMNOTAVAILABLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The Transaction Manager is not available.
				// '                    ' ''
				// '                    ''const XACT_E_TMNOTAVAILABLE            _HRESULT_TYPEDEF_(= &h8004D01BL)

				// '                    ' ''
				// '                    ''MessageId: XACT_E_CONNECTION_DOWN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A connection with the transaction manager was lost.
				// '                    ' ''
				// '                    ''const XACT_E_CONNECTION_DOWN           _HRESULT_TYPEDEF_(= &h8004D01CL)

				// '                    ' ''
				// '                    ''MessageId: XACT_E_CONNECTION_DENIED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A request to establish a connection with the transaction manager was denied.
				// '                    ' ''
				// '                    ''const XACT_E_CONNECTION_DENIED         _HRESULT_TYPEDEF_(= &h8004D01DL)

				// '                    ' ''
				// '                    ''MessageId: XACT_E_REENLISTTIMEOUT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Resource manager reenlistment to determine transaction status timed out.
				// '                    ' ''
				// '                    ''const XACT_E_REENLISTTIMEOUT           _HRESULT_TYPEDEF_(= &h8004D01EL)

				// '                    ' ''
				// '                    ''MessageId: XACT_E_TIP_CONNECT_FAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' This transaction manager failed to establish a connection with another TIP transaction manager.
				// '                    ' ''
				// '                    ''const XACT_E_TIP_CONNECT_FAILED        _HRESULT_TYPEDEF_(= &h8004D01FL)

				// '                    ' ''
				// '                    ''MessageId: XACT_E_TIP_PROTOCOL_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' This transaction manager encountered a protocol error with another TIP transaction manager.
				// '                    ' ''
				// '                    ''const XACT_E_TIP_PROTOCOL_ERROR        _HRESULT_TYPEDEF_(= &h8004D020L)

				// '                    ' ''
				// '                    ''MessageId: XACT_E_TIP_PULL_FAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' This transaction manager could not propagate a transaction from another TIP transaction manager.
				// '                    ' ''
				// '                    ''const XACT_E_TIP_PULL_FAILED           _HRESULT_TYPEDEF_(= &h8004D021L)

				// '                    ' ''
				// '                    ''MessageId: XACT_E_DEST_TMNOTAVAILABLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The Transaction Manager on the destination machine is not available.
				// '                    ' ''
				// '                    ''const XACT_E_DEST_TMNOTAVAILABLE       _HRESULT_TYPEDEF_(= &h8004D022L)

				// '                    ' ''
				// '                    ''MessageId: XACT_E_TIP_DISABLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The Transaction Manager has disabled its support for TIP.
				// '                    ' ''
				// '                    ''const XACT_E_TIP_DISABLED              _HRESULT_TYPEDEF_(= &h8004D023L)

				// '                    ' ''
				// '                    ''MessageId: XACT_E_NETWORK_TX_DISABLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The transaction manager has disabled its support for remote/network transactions.
				// '                    ' ''
				// '                    ''const XACT_E_NETWORK_TX_DISABLED       _HRESULT_TYPEDEF_(= &h8004D024L)

				// '                    ' ''
				// '                    ''MessageId: XACT_E_PARTNER_NETWORK_TX_DISABLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The partner transaction manager has disabled its support for remote/network transactions.
				// '                    ' ''
				// '                    ''const XACT_E_PARTNER_NETWORK_TX_DISABLED _HRESULT_TYPEDEF_(= &h8004D025L)

				// '                    ' ''
				// '                    ''MessageId: XACT_E_XA_TX_DISABLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The transaction manager has disabled its support for XA transactions.
				// '                    ' ''
				// '                    ''const XACT_E_XA_TX_DISABLED            _HRESULT_TYPEDEF_(= &h8004D026L)

				// '                    ' ''
				// '                    ''MessageId: XACT_E_UNABLE_TO_READ_DTC_CONFIG
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' MSDTC was unable to read its configuration information.
				// '                    ' ''
				// '                    ''const XACT_E_UNABLE_TO_READ_DTC_CONFIG _HRESULT_TYPEDEF_(= &h8004D027L)

				// '                    ' ''
				// '                    ''MessageId: XACT_E_UNABLE_TO_LOAD_DTC_PROXY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' MSDTC was unable to load the dtc proxy dll.
				// '                    ' ''
				// '                    ''const XACT_E_UNABLE_TO_LOAD_DTC_PROXY  _HRESULT_TYPEDEF_(= &h8004D028L)

				// '                    ' ''
				// '                    ''MessageId: XACT_E_ABORTING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The local transaction has aborted.
				// '                    ' ''
				// '                    ''const XACT_E_ABORTING                  _HRESULT_TYPEDEF_(= &h8004D029L)

				// '                    ' ''
				// '                    ''TXF & CRM errors start 4d080.
				// '                    ' ''
				// '                    ''MessageId: XACT_E_CLERKNOTFOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' XACT_E_CLERKNOTFOUND
				// '                    ' ''
				// '                    ''const XACT_E_CLERKNOTFOUND             _HRESULT_TYPEDEF_(= &h8004D080L)

				// '                    ' ''
				// '                    ''MessageId: XACT_E_CLERKEXISTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' XACT_E_CLERKEXISTS
				// '                    ' ''
				// '                    ''const XACT_E_CLERKEXISTS               _HRESULT_TYPEDEF_(= &h8004D081L)

				// '                    ' ''
				// '                    ''MessageId: XACT_E_RECOVERYINPROGRESS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' XACT_E_RECOVERYINPROGRESS
				// '                    ' ''
				// '                    ''const XACT_E_RECOVERYINPROGRESS        _HRESULT_TYPEDEF_(= &h8004D082L)

				// '                    ' ''
				// '                    ''MessageId: XACT_E_TRANSACTIONCLOSED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' XACT_E_TRANSACTIONCLOSED
				// '                    ' ''
				// '                    ''const XACT_E_TRANSACTIONCLOSED         _HRESULT_TYPEDEF_(= &h8004D083L)

				// '                    ' ''
				// '                    ''MessageId: XACT_E_INVALIDLSN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' XACT_E_INVALIDLSN
				// '                    ' ''
				// '                    ''const XACT_E_INVALIDLSN                _HRESULT_TYPEDEF_(= &h8004D084L)

				// '                    ' ''
				// '                    ''MessageId: XACT_E_REPLAYREQUEST
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' XACT_E_REPLAYREQUEST
				// '                    ' ''
				// '                    ''const XACT_E_REPLAYREQUEST             _HRESULT_TYPEDEF_(= &h8004D085L)

				// '                    ' ''
				// '                    ''OleTx Success codes.
				// '                    ' ''
				// '                    ' ''
				// '                    ''MessageId: XACT_S_ASYNC
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An asynchronous operation was specified. The operation has begun, but its outcome is not known yet.
				// '                    ' ''
				// '                    ''const XACT_S_ASYNC                     _HRESULT_TYPEDEF_(= &h0004D000L)

				// '                    ' ''
				// '                    ''MessageId: XACT_S_DEFECT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' XACT_S_DEFECT
				// '                    ' ''
				// '                    ''const XACT_S_DEFECT                    _HRESULT_TYPEDEF_(= &h0004D001L)

				// '                    ' ''
				// '                    ''MessageId: XACT_S_READONLY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The method call succeeded because the transaction was read-only.
				// '                    ' ''
				// '                    ''const XACT_S_READONLY                  _HRESULT_TYPEDEF_(= &h0004D002L)

				// '                    ' ''
				// '                    ''MessageId: XACT_S_SOMENORETAIN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The transaction was successfully aborted. However, this is a coordinated transaction, and some number of enlisted resources were aborted outright because they could not support abort-retaining semantics
				// '                    ' ''
				// '                    ''const XACT_S_SOMENORETAIN              _HRESULT_TYPEDEF_(= &h0004D003L)

				// '                    ' ''
				// '                    ''MessageId: XACT_S_OKINFORM
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' No changes were made during this call, but the sink wants another chance to look if any other sinks make further changes.
				// '                    ' ''
				// '                    ''const XACT_S_OKINFORM                  _HRESULT_TYPEDEF_(= &h0004D004L)

				// '                    ' ''
				// '                    ''MessageId: XACT_S_MADECHANGESCONTENT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The sink is content and wishes the transaction to proceed. Changes were made to one or more resources during this call.
				// '                    ' ''
				// '                    ''const XACT_S_MADECHANGESCONTENT        _HRESULT_TYPEDEF_(= &h0004D005L)

				// '                    ' ''
				// '                    ''MessageId: XACT_S_MADECHANGESINFORM
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The sink is for the moment and wishes the transaction to proceed, but if other changes are made following this return by other event sinks then this sink wants another chance to look
				// '                    ' ''
				// '                    ''const XACT_S_MADECHANGESINFORM         _HRESULT_TYPEDEF_(= &h0004D006L)

				// '                    ' ''
				// '                    ''MessageId: XACT_S_ALLNORETAIN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The transaction was successfully aborted. However, the abort was non-retaining.
				// '                    ' ''
				// '                    ''const XACT_S_ALLNORETAIN               _HRESULT_TYPEDEF_(= &h0004D007L)

				// '                    ' ''
				// '                    ''MessageId: XACT_S_ABORTING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An abort operation was already in progress.
				// '                    ' ''
				// '                    ''const XACT_S_ABORTING                  _HRESULT_TYPEDEF_(= &h0004D008L)

				// '                    ' ''
				// '                    ''MessageId: XACT_S_SINGLEPHASE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The resource manager has performed a single-phase commit of the transaction.
				// '                    ' ''
				// '                    ''const XACT_S_SINGLEPHASE               _HRESULT_TYPEDEF_(= &h0004D009L)

				// '                    ' ''
				// '                    ''MessageId: XACT_S_LOCALLY_OK
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The local transaction has not aborted.
				// '                    ' ''
				// '                    ''const XACT_S_LOCALLY_OK                _HRESULT_TYPEDEF_(= &h0004D00AL)

				// '                    ' ''
				// '                    ''MessageId: XACT_S_LASTRESOURCEMANAGER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The resource manager has requested to be the coordinator (last resource manager) for the transaction.
				// '                    ' ''
				// '                    ''const XACT_S_LASTRESOURCEMANAGER       _HRESULT_TYPEDEF_(= &h0004D010L)

				// '                    ''const CONTEXT_E_FIRST        = &h8004E000L
				// '                    ''const CONTEXT_E_LAST         = &h8004E02FL
				// '                    ''const CONTEXT_S_FIRST        = &h0004E000L
				// '                    ''const CONTEXT_S_LAST         = &h0004E02FL
				// '                    ' ''
				// '                    ''MessageId: CONTEXT_E_ABORTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The root transaction wanted to commit, but transaction aborted
				// '                    ' ''
				// '                    ''const CONTEXT_E_ABORTED                _HRESULT_TYPEDEF_(= &h8004E002L)

				// '                    ' ''
				// '                    ''MessageId: CONTEXT_E_ABORTING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' You made a method call on a COM+ component that has a transaction that has already aborted or in the process of aborting.
				// '                    ' ''
				// '                    ''const CONTEXT_E_ABORTING               _HRESULT_TYPEDEF_(= &h8004E003L)

				// '                    ' ''
				// '                    ''MessageId: CONTEXT_E_NOCONTEXT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' There is no MTS object context
				// '                    ' ''
				// '                    ''const CONTEXT_E_NOCONTEXT              _HRESULT_TYPEDEF_(= &h8004E004L)

				// '                    ' ''
				// '                    ''MessageId: CONTEXT_E_WOULD_DEADLOCK
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The component is configured to use synchronization and this method call would cause a deadlock to occur.
				// '                    ' ''
				// '                    ''const CONTEXT_E_WOULD_DEADLOCK         _HRESULT_TYPEDEF_(= &h8004E005L)

				// '                    ' ''
				// '                    ''MessageId: CONTEXT_E_SYNCH_TIMEOUT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The component is configured to use synchronization and a thread has timed [Out ] waiting to enter the context.
				// '                    ' ''
				// '                    ''const CONTEXT_E_SYNCH_TIMEOUT          _HRESULT_TYPEDEF_(= &h8004E006L)

				// '                    ' ''
				// '                    ''MessageId: CONTEXT_E_OLDREF
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' You made a method call on a COM+ component that has a transaction that has already committed or aborted.
				// '                    ' ''
				// '                    ''const CONTEXT_E_OLDREF                 _HRESULT_TYPEDEF_(= &h8004E007L)

				// '                    ' ''
				// '                    ''MessageId: CONTEXT_E_ROLENOTFOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified role was not configured for the application
				// '                    ' ''
				// '                    ''const CONTEXT_E_ROLENOTFOUND           _HRESULT_TYPEDEF_(= &h8004E00CL)

				// '                    ' ''
				// '                    ''MessageId: CONTEXT_E_TMNOTAVAILABLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' COM+ was unable to talk to the Microsoft Distributed Transaction Coordinator
				// '                    ' ''
				// '                    ''const CONTEXT_E_TMNOTAVAILABLE         _HRESULT_TYPEDEF_(= &h8004E00FL)

				// '                    ' ''
				// '                    ''MessageId: CO_E_ACTIVATIONFAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An unexpected error occurred during COM+ Activation.
				// '                    ' ''
				// '                    ''const CO_E_ACTIVATIONFAILED            _HRESULT_TYPEDEF_(= &h8004E021L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_ACTIVATIONFAILED_EVENTLOGGED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' COM+ Activation failed. Check the event log for more information
				// '                    ' ''
				// '                    ''const CO_E_ACTIVATIONFAILED_EVENTLOGGED _HRESULT_TYPEDEF_(= &h8004E022L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_ACTIVATIONFAILED_CATALOGERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' COM+ Activation failed due to a catalog or configuration error.
				// '                    ' ''
				// '                    ''const CO_E_ACTIVATIONFAILED_CATALOGERROR _HRESULT_TYPEDEF_(= &h8004E023L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_ACTIVATIONFAILED_TIMEOUT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' COM+ activation failed because the activation could not be completed in the specified amount of time.
				// '                    ' ''
				// '                    ''const CO_E_ACTIVATIONFAILED_TIMEOUT    _HRESULT_TYPEDEF_(= &h8004E024L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_INITIALIZATIONFAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' COM+ Activation failed because an initialization function failed.  Check the event log for more information.
				// '                    ' ''
				// '                    ''const CO_E_INITIALIZATIONFAILED        _HRESULT_TYPEDEF_(= &h8004E025L)

				// '                    ' ''
				// '                    ''MessageId: CONTEXT_E_NOJIT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested operation requires that JIT be in the current context and it is not
				// '                    ' ''
				// '                    ''const CONTEXT_E_NOJIT                  _HRESULT_TYPEDEF_(= &h8004E026L)

				// '                    ' ''
				// '                    ''MessageId: CONTEXT_E_NOTRANSACTION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested operation requires that the current context have a Transaction, and it does not
				// '                    ' ''
				// '                    ''const CONTEXT_E_NOTRANSACTION          _HRESULT_TYPEDEF_(= &h8004E027L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_THREADINGMODEL_CHANGED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The components threading model has changed after install into a COM+ System.Windows.Forms.Application.  Please re-install component.
				// '                    ' ''
				// '                    ''const CO_E_THREADINGMODEL_CHANGED      _HRESULT_TYPEDEF_(= &h8004E028L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_NOIISINTRINSICS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' IIS intrinsics not available.  Start your work with IIS.
				// '                    ' ''
				// '                    ''const CO_E_NOIISINTRINSICS             _HRESULT_TYPEDEF_(= &h8004E029L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_NOCOOKIES
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An attempt to write a cookie failed.
				// '                    ' ''
				// '                    ''const CO_E_NOCOOKIES                   _HRESULT_TYPEDEF_(= &h8004E02AL)

				// '                    ' ''
				// '                    ''MessageId: CO_E_DBERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An attempt to use a database generated a database specific error.
				// '                    ' ''
				// '                    ''const CO_E_DBERROR                     _HRESULT_TYPEDEF_(= &h8004E02BL)

				// '                    ' ''
				// '                    ''MessageId: CO_E_NOTPOOLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The COM+ component you created must use object pooling to work.
				// '                    ' ''
				// '                    ''const CO_E_NOTPOOLED                   _HRESULT_TYPEDEF_(= &h8004E02CL)

				// '                    ' ''
				// '                    ''MessageId: CO_E_NOTCONSTRUCTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The COM+ component you created must use object construction to work correctly.
				// '                    ' ''
				// '                    ''const CO_E_NOTCONSTRUCTED              _HRESULT_TYPEDEF_(= &h8004E02DL)

				// '                    ' ''
				// '                    ''MessageId: CO_E_NOSYNCHRONIZATION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The COM+ component requires synchronization, and it is not configured for it.
				// '                    ' ''
				// '                    ''const CO_E_NOSYNCHRONIZATION           _HRESULT_TYPEDEF_(= &h8004E02EL)

				// '                    ' ''
				// '                    ''MessageId: CO_E_ISOLEVELMISMATCH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The TxIsolation Level property for the COM+ component being created is stronger than the TxIsolationLevel for the "root" component for the transaction.  The creation failed.
				// '                    ' ''
				// '                    ''const CO_E_ISOLEVELMISMATCH            _HRESULT_TYPEDEF_(= &h8004E02FL)

				// '                    ' ''
				// '                    ''Old OLE Success Codes
				// '                    ' ''
				// '                    ' ''
				// '                    ''MessageId: OLE_S_USEREG
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Use the registry database to provide the requested information
				// '                    ' ''
				// '                    ''const OLE_S_USEREG                     _HRESULT_TYPEDEF_(= &h00040000L)

				// '                    ' ''
				// '                    ''MessageId: OLE_S_STATIC
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Success, but static
				// '                    ' ''
				// '                    ''const OLE_S_STATIC                     _HRESULT_TYPEDEF_(= &h00040001L)

				// '                    ' ''
				// '                    ''MessageId: OLE_S_MAC_CLIPFORMAT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Macintosh clipboard format
				// '                    ' ''
				// '                    ''const OLE_S_MAC_CLIPFORMAT             _HRESULT_TYPEDEF_(= &h00040002L)

				// '                    ' ''
				// '                    ''MessageId: DRAGDROP_S_DROP
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Successful drop took place
				// '                    ' ''
				// '                    ''const DRAGDROP_S_DROP                  _HRESULT_TYPEDEF_(= &h00040100L)

				// '                    ' ''
				// '                    ''MessageId: DRAGDROP_S_CANCEL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Drag-drop operation canceled
				// '                    ' ''
				// '                    ''const DRAGDROP_S_CANCEL                _HRESULT_TYPEDEF_(= &h00040101L)

				// '                    ' ''
				// '                    ''MessageId: DRAGDROP_S_USEDEFAULTCURSORS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Use the default cursor
				// '                    ' ''
				// '                    ''const DRAGDROP_S_USEDEFAULTCURSORS     _HRESULT_TYPEDEF_(= &h00040102L)

				// '                    ' ''
				// '                    ''MessageId: DATA_S_SAMEFORMATETC
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Data has same FORMATETC
				// '                    ' ''
				// '                    ''const DATA_S_SAMEFORMATETC             _HRESULT_TYPEDEF_(= &h00040130L)

				// '                    ' ''
				// '                    ''MessageId: VIEW_S_ALREADY_FROZEN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' View is already frozen
				// '                    ' ''
				// '                    ''const VIEW_S_ALREADY_FROZEN            _HRESULT_TYPEDEF_(= &h00040140L)

				// '                    ' ''
				// '                    ''MessageId: CACHE_S_FORMATETC_NOTSUPPORTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' FORMATETC not supported
				// '                    ' ''
				// '                    ''const CACHE_S_FORMATETC_NOTSUPPORTED   _HRESULT_TYPEDEF_(= &h00040170L)

				// '                    ' ''
				// '                    ''MessageId: CACHE_S_SAMECACHE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Same cache
				// '                    ' ''
				// '                    ''const CACHE_S_SAMECACHE                _HRESULT_TYPEDEF_(= &h00040171L)

				// '                    ' ''
				// '                    ''MessageId: CACHE_S_SOMECACHES_NOTUPDATED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Some cache(s) not updated
				// '                    ' ''
				// '                    ''const CACHE_S_SOMECACHES_NOTUPDATED    _HRESULT_TYPEDEF_(= &h00040172L)

				// '                    ' ''
				// '                    ''MessageId: OLEOBJ_S_INVALIDVERB
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid verb for OLE object
				// '                    ' ''
				// '                    ''const OLEOBJ_S_INVALIDVERB             _HRESULT_TYPEDEF_(= &h00040180L)

				// '                    ' ''
				// '                    ''MessageId: OLEOBJ_S_CANNOT_DOVERB_NOW
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Verb number is valid but verb cannot be done now
				// '                    ' ''
				// '                    ''const OLEOBJ_S_CANNOT_DOVERB_NOW       _HRESULT_TYPEDEF_(= &h00040181L)

				// '                    ' ''
				// '                    ''MessageId: OLEOBJ_S_INVALIDHWND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid window handle passed
				// '                    ' ''
				// '                    ''const OLEOBJ_S_INVALIDHWND             _HRESULT_TYPEDEF_(= &h00040182L)

				// '                    ' ''
				// '                    ''MessageId: INPLACE_S_TRUNCATED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Message is too long; some of it had to be truncated before displaying
				// '                    ' ''
				// '                    ''const INPLACE_S_TRUNCATED              _HRESULT_TYPEDEF_(= &h000401A0L)

				// '                    ' ''
				// '                    ''MessageId: CONVERT10_S_NO_PRESENTATION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unable to convert OLESTREAM to IStorage
				// '                    ' ''
				// '                    ''const CONVERT10_S_NO_PRESENTATION      _HRESULT_TYPEDEF_(= &h000401C0L)

				// '                    ' ''
				// '                    ''MessageId: MK_S_REDUCED_TO_SELF
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Moniker reduced to itself
				// '                    ' ''
				// '                    ''const MK_S_REDUCED_TO_SELF             _HRESULT_TYPEDEF_(= &h000401E2L)

				// '                    ' ''
				// '                    ''MessageId: MK_S_ME
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Common prefix is this moniker
				// '                    ' ''
				// '                    ''const MK_S_ME                          _HRESULT_TYPEDEF_(= &h000401E4L)

				// '                    ' ''
				// '                    ''MessageId: MK_S_HIM
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Common prefix is input moniker
				// '                    ' ''
				// '                    ''const MK_S_HIM                         _HRESULT_TYPEDEF_(= &h000401E5L)

				// '                    ' ''
				// '                    ''MessageId: MK_S_US
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Common prefix is both monikers
				// '                    ' ''
				// '                    ''const MK_S_US                          _HRESULT_TYPEDEF_(= &h000401E6L)

				// '                    ' ''
				// '                    ''MessageId: MK_S_MONIKERALREADYREGISTERED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Moniker is already registered in running object table
				// '                    ' ''
				// '                    ''const MK_S_MONIKERALREADYREGISTERED    _HRESULT_TYPEDEF_(= &h000401E7L)

				// '                    ' ''
				// '                    ''Task Scheduler errors
				// '                    ' ''
				// '                    ' ''
				// '                    ''MessageId: SCHED_S_TASK_READY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The task is ready to run at its next scheduled time.
				// '                    ' ''
				// '                    ''const SCHED_S_TASK_READY               _HRESULT_TYPEDEF_(= &h00041300L)

				// '                    ' ''
				// '                    ''MessageId: SCHED_S_TASK_RUNNING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The task is currently running.
				// '                    ' ''
				// '                    ''const SCHED_S_TASK_RUNNING             _HRESULT_TYPEDEF_(= &h00041301L)

				// '                    ' ''
				// '                    ''MessageId: SCHED_S_TASK_DISABLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The task will not run at the scheduled times because it has been disabled.
				// '                    ' ''
				// '                    ''const SCHED_S_TASK_DISABLED            _HRESULT_TYPEDEF_(= &h00041302L)

				// '                    ' ''
				// '                    ''MessageId: SCHED_S_TASK_HAS_NOT_RUN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The task has not yet run.
				// '                    ' ''
				// '                    ''const SCHED_S_TASK_HAS_NOT_RUN         _HRESULT_TYPEDEF_(= &h00041303L)

				// '                    ' ''
				// '                    ''MessageId: SCHED_S_TASK_NO_MORE_RUNS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' There are no more runs scheduled for this task.
				// '                    ' ''
				// '                    ''const SCHED_S_TASK_NO_MORE_RUNS        _HRESULT_TYPEDEF_(= &h00041304L)

				// '                    ' ''
				// '                    ''MessageId: SCHED_S_TASK_NOT_SCHEDULED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' One or more of the properties that are needed to run this task on a schedule have not been set.
				// '                    ' ''
				// '                    ''const SCHED_S_TASK_NOT_SCHEDULED       _HRESULT_TYPEDEF_(= &h00041305L)

				// '                    ' ''
				// '                    ''MessageId: SCHED_S_TASK_TERMINATED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The last run of the task was terminated by the user.
				// '                    ' ''
				// '                    ''const SCHED_S_TASK_TERMINATED          _HRESULT_TYPEDEF_(= &h00041306L)

				// '                    ' ''
				// '                    ''MessageId: SCHED_S_TASK_NO_VALID_TRIGGERS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Either the task has no triggers or the existing triggers are disabled or not set.
				// '                    ' ''
				// '                    ''const SCHED_S_TASK_NO_VALID_TRIGGERS   _HRESULT_TYPEDEF_(= &h00041307L)

				// '                    ' ''
				// '                    ''MessageId: SCHED_S_EVENT_TRIGGER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Event triggers don't have set run times.
				// '                    ' ''
				// '                    ''const SCHED_S_EVENT_TRIGGER            _HRESULT_TYPEDEF_(= &h00041308L)

				// '                    ' ''
				// '                    ''MessageId: SCHED_E_TRIGGER_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Trigger not found.
				// '                    ' ''
				// '                    ''const SCHED_E_TRIGGER_NOT_FOUND        _HRESULT_TYPEDEF_(= &h80041309L)

				// '                    ' ''
				// '                    ''MessageId: SCHED_E_TASK_NOT_READY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' One or more of the properties that are needed to run this task have not been set.
				// '                    ' ''
				// '                    ''const SCHED_E_TASK_NOT_READY           _HRESULT_TYPEDEF_(= &h8004130AL)

				// '                    ' ''
				// '                    ''MessageId: SCHED_E_TASK_NOT_RUNNING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' There is no running instance of the task to terminate.
				// '                    ' ''
				// '                    ''const SCHED_E_TASK_NOT_RUNNING         _HRESULT_TYPEDEF_(= &h8004130BL)

				// '                    ' ''
				// '                    ''MessageId: SCHED_E_SERVICE_NOT_INSTALLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The Task Scheduler Service is not installed on this computer.
				// '                    ' ''
				// '                    ''const SCHED_E_SERVICE_NOT_INSTALLED    _HRESULT_TYPEDEF_(= &h8004130CL)

				// '                    ' ''
				// '                    ''MessageId: SCHED_E_CANNOT_OPEN_TASK
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The task object could not be opened.
				// '                    ' ''
				// '                    ''const SCHED_E_CANNOT_OPEN_TASK         _HRESULT_TYPEDEF_(= &h8004130DL)

				// '                    ' ''
				// '                    ''MessageId: SCHED_E_INVALID_TASK
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The object is either an invalid task object or is not a task object.
				// '                    ' ''
				// '                    ''const SCHED_E_INVALID_TASK             _HRESULT_TYPEDEF_(= &h8004130EL)

				// '                    ' ''
				// '                    ''MessageId: SCHED_E_ACCOUNT_INFORMATION_NOT_SET
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' No account information could be found in the Task Scheduler security database for the task indicated.
				// '                    ' ''
				// '                    ''const SCHED_E_ACCOUNT_INFORMATION_NOT_SET _HRESULT_TYPEDEF_(= &h8004130FL)

				// '                    ' ''
				// '                    ''MessageId: SCHED_E_ACCOUNT_NAME_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unable to establish existence of the account specified.
				// '                    ' ''
				// '                    ''const SCHED_E_ACCOUNT_NAME_NOT_FOUND   _HRESULT_TYPEDEF_(= &h80041310L)

				// '                    ' ''
				// '                    ''MessageId: SCHED_E_ACCOUNT_DBASE_CORRUPT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Corruption was detected in the Task Scheduler security database; the database has been reset.
				// '                    ' ''
				// '                    ''const SCHED_E_ACCOUNT_DBASE_CORRUPT    _HRESULT_TYPEDEF_(= &h80041311L)

				// '                    ' ''
				// '                    ''MessageId: SCHED_E_NO_SECURITY_SERVICES
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Task Scheduler security services are available only on Windows NT.
				// '                    ' ''
				// '                    ''const SCHED_E_NO_SECURITY_SERVICES     _HRESULT_TYPEDEF_(= &h80041312L)

				// '                    ' ''
				// '                    ''MessageId: SCHED_E_UNKNOWN_OBJECT_VERSION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The task object version is either unsupported or invalid.
				// '                    ' ''
				// '                    ''const SCHED_E_UNKNOWN_OBJECT_VERSION   _HRESULT_TYPEDEF_(= &h80041313L)

				// '                    ' ''
				// '                    ''MessageId: SCHED_E_UNSUPPORTED_ACCOUNT_OPTION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The task has been configured with an unsupported combination of account settings and run time options.
				// '                    ' ''
				// '                    ''const SCHED_E_UNSUPPORTED_ACCOUNT_OPTION _HRESULT_TYPEDEF_(= &h80041314L)

				// '                    ' ''
				// '                    ''MessageId: SCHED_E_SERVICE_NOT_RUNNING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The Task Scheduler Service is not running.
				// '                    ' ''
				// '                    ''const SCHED_E_SERVICE_NOT_RUNNING      _HRESULT_TYPEDEF_(= &h80041315L)

				// '                    ''******************
				// '                    ''FACILITY_WINDOWS
				// '                    ''******************
				// '                    ' ''
				// '                    ''Codes = &h0-= &h01ff are reserved for the OLE group of
				// '                    ''interfaces.
				// '                    ' ''
				// '                    ' ''
				// '                    ''MessageId: CO_E_CLASS_CREATE_FAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Attempt to create a class object failed
				// '                    ' ''
				// '                    ''const CO_E_CLASS_CREATE_FAILED         _HRESULT_TYPEDEF_(= &h80080001L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_SCM_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OLE service could not bind object
				// '                    ' ''
				// '                    ''const CO_E_SCM_ERROR                   _HRESULT_TYPEDEF_(= &h80080002L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_SCM_RPC_FAILURE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' RPC communication failed with OLE service
				// '                    ' ''
				// '                    ''const CO_E_SCM_RPC_FAILURE             _HRESULT_TYPEDEF_(= &h80080003L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_BAD_PATH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Bad path to object
				// '                    ' ''
				// '                    ''const CO_E_BAD_PATH                    _HRESULT_TYPEDEF_(= &h80080004L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_SERVER_EXEC_FAILURE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Server e_runution failed
				// '                    ' ''
				// '                    ''const CO_E_SERVER_EXEC_FAILURE         _HRESULT_TYPEDEF_(= &h80080005L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_OBJSRV_RPC_FAILURE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OLE service could not communicate with the object server
				// '                    ' ''
				// '                    ''const CO_E_OBJSRV_RPC_FAILURE          _HRESULT_TYPEDEF_(= &h80080006L)

				// '                    ' ''
				// '                    ''MessageId: MK_E_NO_NORMALIZED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Moniker path could not be normalized
				// '                    ' ''
				// '                    ''const MK_E_NO_NORMALIZED               _HRESULT_TYPEDEF_(= &h80080007L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_SERVER_STOPPING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Object server is stopping when OLE service contacts it
				// '                    ' ''
				// '                    ''const CO_E_SERVER_STOPPING             _HRESULT_TYPEDEF_(= &h80080008L)

				// '                    ' ''
				// '                    ''MessageId: MEM_E_INVALID_ROOT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An invalid root block pointer was specified
				// '                    ' ''
				// '                    ''const MEM_E_INVALID_ROOT               _HRESULT_TYPEDEF_(= &h80080009L)

				// '                    ' ''
				// '                    ''MessageId: MEM_E_INVALID_LINK
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An allocation chain contained an invalid link pointer
				// '                    ' ''
				// '                    ''const MEM_E_INVALID_LINK               _HRESULT_TYPEDEF_(= &h80080010L)

				// '                    ' ''
				// '                    ''MessageId: MEM_E_INVALID_SIZE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested allocation size was too large
				// '                    ' ''
				// '                    ''const MEM_E_INVALID_SIZE               _HRESULT_TYPEDEF_(= &h80080011L)

				// '                    ' ''
				// '                    ''MessageId: CO_S_NOTALLINTERFACES
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Not all the requested interfaces were available
				// '                    ' ''
				// '                    ''const CO_S_NOTALLINTERFACES            _HRESULT_TYPEDEF_(= &h00080012L)

				// '                    ' ''
				// '                    ''MessageId: CO_S_MACHINENAMENOTFOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified machine name was not found in the cache.
				// '                    ' ''
				// '                    ''const CO_S_MACHINENAMENOTFOUND         _HRESULT_TYPEDEF_(= &h00080013L)

				// '                    ''******************
				// '                    ''FACILITY_DISPATCH
				// '                    ''******************
				// '                    ' ''
				// '                    ''MessageId: DISP_E_UNKNOWNINTERFACE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unknown interface.
				// '                    ' ''
				// '                    ''const DISP_E_UNKNOWNINTERFACE          _HRESULT_TYPEDEF_(= &h80020001L)

				// '                    ' ''
				// '                    ''MessageId: DISP_E_MEMBERNOTFOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Member not found.
				// '                    ' ''
				// '                    ''const DISP_E_MEMBERNOTFOUND            _HRESULT_TYPEDEF_(= &h80020003L)

				// '                    ' ''
				// '                    ''MessageId: DISP_E_PARAMNOTFOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Parameter not found.
				// '                    ' ''
				// '                    ''const DISP_E_PARAMNOTFOUND             _HRESULT_TYPEDEF_(= &h80020004L)

				// '                    ' ''
				// '                    ''MessageId: DISP_E_TYPEMISMATCH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Type mismatch.
				// '                    ' ''
				// '                    ''const DISP_E_TYPEMISMATCH              _HRESULT_TYPEDEF_(= &h80020005L)

				// '                    ' ''
				// '                    ''MessageId: DISP_E_UNKNOWNNAME
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unknown name.
				// '                    ' ''
				// '                    ''const DISP_E_UNKNOWNNAME               _HRESULT_TYPEDEF_(= &h80020006L)

				// '                    ' ''
				// '                    ''MessageId: DISP_E_NONAMEDARGS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' No named arguments.
				// '                    ' ''
				// '                    ''const DISP_E_NONAMEDARGS               _HRESULT_TYPEDEF_(= &h80020007L)

				// '                    ' ''
				// '                    ''MessageId: DISP_E_BADVARTYPE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Bad variable type.
				// '                    ' ''
				// '                    ''const DISP_E_BADVARTYPE                _HRESULT_TYPEDEF_(= &h80020008L)

				// '                    ' ''
				// '                    ''MessageId: DISP_E_EXCEPTION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Exception occurred.
				// '                    ' ''
				// '                    ''const DISP_E_EXCEPTION                 _HRESULT_TYPEDEF_(= &h80020009L)

				// '                    ' ''
				// '                    ''MessageId: DISP_E_OVERFLOW
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' [Out ] of present range.
				// '                    ' ''
				// '                    ''const DISP_E_OVERFLOW                  _HRESULT_TYPEDEF_(= &h8002000AL)

				// '                    ' ''
				// '                    ''MessageId: DISP_E_BADINDEX
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid index.
				// '                    ' ''
				// '                    ''const DISP_E_BADINDEX                  _HRESULT_TYPEDEF_(= &h8002000BL)

				// '                    ' ''
				// '                    ''MessageId: DISP_E_UNKNOWNLCID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unknown language.
				// '                    ' ''
				// '                    ''const DISP_E_UNKNOWNLCID               _HRESULT_TYPEDEF_(= &h8002000CL)

				// '                    ' ''
				// '                    ''MessageId: DISP_E_ARRAYISLOCKED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Memory is locked.
				// '                    ' ''
				// '                    ''const DISP_E_ARRAYISLOCKED             _HRESULT_TYPEDEF_(= &h8002000DL)

				// '                    ' ''
				// '                    ''MessageId: DISP_E_BADPARAMCOUNT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid number of parameters.
				// '                    ' ''
				// '                    ''const DISP_E_BADPARAMCOUNT             _HRESULT_TYPEDEF_(= &h8002000EL)

				// '                    ' ''
				// '                    ''MessageId: DISP_E_PARAMNOTOPTIONAL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Parameter not optional.
				// '                    ' ''
				// '                    ''const DISP_E_PARAMNOTOPTIONAL          _HRESULT_TYPEDEF_(= &h8002000FL)

				// '                    ' ''
				// '                    ''MessageId: DISP_E_BADCALLEE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid callee.
				// '                    ' ''
				// '                    ''const DISP_E_BADCALLEE                 _HRESULT_TYPEDEF_(= &h80020010L)

				// '                    ' ''
				// '                    ''MessageId: DISP_E_NOTACOLLECTION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Does not support a collection.
				// '                    ' ''
				// '                    ''const DISP_E_NOTACOLLECTION            _HRESULT_TYPEDEF_(= &h80020011L)

				// '                    ' ''
				// '                    ''MessageId: DISP_E_DIVBYZERO
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Division by zero.
				// '                    ' ''
				// '                    ''const DISP_E_DIVBYZERO                 _HRESULT_TYPEDEF_(= &h80020012L)

				// '                    ' ''
				// '                    ''MessageId: DISP_E_BUFFERTOOSMALL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Buffer too small
				// '                    ' ''
				// '                    ''const DISP_E_BUFFERTOOSMALL            _HRESULT_TYPEDEF_(= &h80020013L)

				// '                    ' ''
				// '                    ''MessageId: TYPE_E_BUFFERTOOSMALL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Buffer too small.
				// '                    ' ''
				// '                    ''const TYPE_E_BUFFERTOOSMALL            _HRESULT_TYPEDEF_(= &h80028016L)

				// '                    ' ''
				// '                    ''MessageId: TYPE_E_FIELDNOTFOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Field name not defined in the record.
				// '                    ' ''
				// '                    ''const TYPE_E_FIELDNOTFOUND             _HRESULT_TYPEDEF_(= &h80028017L)

				// '                    ' ''
				// '                    ''MessageId: TYPE_E_INVDATAREAD
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Old format or invalid type library.
				// '                    ' ''
				// '                    ''const TYPE_E_INVDATAREAD               _HRESULT_TYPEDEF_(= &h80028018L)

				// '                    ' ''
				// '                    ''MessageId: TYPE_E_UNSUPFORMAT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Old format or invalid type library.
				// '                    ' ''
				// '                    ''const TYPE_E_UNSUPFORMAT               _HRESULT_TYPEDEF_(= &h80028019L)

				// '                    ' ''
				// '                    ''MessageId: TYPE_E_REGISTRYACCESS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Error accessing the OLE registry.
				// '                    ' ''
				// '                    ''const TYPE_E_REGISTRYACCESS            _HRESULT_TYPEDEF_(= &h8002801CL)

				// '                    ' ''
				// '                    ''MessageId: TYPE_E_LIBNOTREGISTERED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Library not registered.
				// '                    ' ''
				// '                    ''const TYPE_E_LIBNOTREGISTERED          _HRESULT_TYPEDEF_(= &h8002801DL)

				// '                    ' ''
				// '                    ''MessageId: TYPE_E_UNDEFINEDTYPE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Bound to unknown type.
				// '                    ' ''
				// '                    ''const TYPE_E_UNDEFINEDTYPE             _HRESULT_TYPEDEF_(= &h80028027L)

				// '                    ' ''
				// '                    ''MessageId: TYPE_E_QUALIFIEDNAMEDISALLOWED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Qualified name disallowed.
				// '                    ' ''
				// '                    ''const TYPE_E_QUALIFIEDNAMEDISALLOWED   _HRESULT_TYPEDEF_(= &h80028028L)

				// '                    ' ''
				// '                    ''MessageId: TYPE_E_INVALIDSTATE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid forward reference, or reference to uncompiled type.
				// '                    ' ''
				// '                    ''const TYPE_E_INVALIDSTATE              _HRESULT_TYPEDEF_(= &h80028029L)

				// '                    ' ''
				// '                    ''MessageId: TYPE_E_WRONGTYPEKIND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Type mismatch.
				// '                    ' ''
				// '                    ''const TYPE_E_WRONGTYPEKIND             _HRESULT_TYPEDEF_(= &h8002802AL)

				// '                    ' ''
				// '                    ''MessageId: TYPE_E_ELEMENTNOTFOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Element not found.
				// '                    ' ''
				// '                    ''const TYPE_E_ELEMENTNOTFOUND           _HRESULT_TYPEDEF_(= &h8002802BL)

				// '                    ' ''
				// '                    ''MessageId: TYPE_E_AMBIGUOUSNAME
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Ambiguous name.
				// '                    ' ''
				// '                    ''const TYPE_E_AMBIGUOUSNAME             _HRESULT_TYPEDEF_(= &h8002802CL)

				// '                    ' ''
				// '                    ''MessageId: TYPE_E_NAMECONFLICT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Name already exists in the library.
				// '                    ' ''
				// '                    ''const TYPE_E_NAMECONFLICT              _HRESULT_TYPEDEF_(= &h8002802DL)

				// '                    ' ''
				// '                    ''MessageId: TYPE_E_UNKNOWNLCID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unknown LCID.
				// '                    ' ''
				// '                    ''const TYPE_E_UNKNOWNLCID               _HRESULT_TYPEDEF_(= &h8002802EL)

				// '                    ' ''
				// '                    ''MessageId: TYPE_E_DLLFUNCTIONNOTFOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Function not defined in specified DLL.
				// '                    ' ''
				// '                    ''const TYPE_E_DLLFUNCTIONNOTFOUND       _HRESULT_TYPEDEF_(= &h8002802FL)

				// '                    ' ''
				// '                    ''MessageId: TYPE_E_BADMODULEKIND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Wrong module kind for the operation.
				// '                    ' ''
				// '                    ''const TYPE_E_BADMODULEKIND             _HRESULT_TYPEDEF_(= &h800288BDL)

				// '                    ' ''
				// '                    ''MessageId: TYPE_E_SIZETOOBIG
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Size may not exceed 64K.
				// '                    ' ''
				// '                    ''const TYPE_E_SIZETOOBIG                _HRESULT_TYPEDEF_(= &h800288C5L)

				// '                    ' ''
				// '                    ''MessageId: TYPE_E_DUPLICATEID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Duplicate ID in inheritance hierarchy.
				// '                    ' ''
				// '                    ''const TYPE_E_DUPLICATEID               _HRESULT_TYPEDEF_(= &h800288C6L)

				// '                    ' ''
				// '                    ''MessageId: TYPE_E_INVALIDID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Incorrect inheritance depth in standard OLE hmember.
				// '                    ' ''
				// '                    ''const TYPE_E_INVALIDID                 _HRESULT_TYPEDEF_(= &h800288CFL)

				// '                    ' ''
				// '                    ''MessageId: TYPE_E_TYPEMISMATCH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Type mismatch.
				// '                    ' ''
				// '                    ''const TYPE_E_TYPEMISMATCH              _HRESULT_TYPEDEF_(= &h80028CA0L)

				// '                    ' ''
				// '                    ''MessageId: TYPE_E_OUTOFBOUNDS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid number of arguments.
				// '                    ' ''
				// '                    ''const TYPE_E_OUTOFBOUNDS               _HRESULT_TYPEDEF_(= &h80028CA1L)

				// '                    ' ''
				// '                    ''MessageId: TYPE_E_IOERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' I/O Error.
				// '                    ' ''
				// '                    ''const TYPE_E_IOERROR                   _HRESULT_TYPEDEF_(= &h80028CA2L)

				// '                    ' ''
				// '                    ''MessageId: TYPE_E_CANTCREATETMPFILE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Error creating unique tmp file.
				// '                    ' ''
				// '                    ''const TYPE_E_CANTCREATETMPFILE         _HRESULT_TYPEDEF_(= &h80028CA3L)

				// '                    ' ''
				// '                    ''MessageId: TYPE_E_CANTLOADLIBRARY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Error loading type library/DLL.
				// '                    ' ''
				// '                    ''const TYPE_E_CANTLOADLIBRARY           _HRESULT_TYPEDEF_(= &h80029C4AL)

				// '                    ' ''
				// '                    ''MessageId: TYPE_E_INCONSISTENTPROPFUNCS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Inconsistent property functions.
				// '                    ' ''
				// '                    ''const TYPE_E_INCONSISTENTPROPFUNCS     _HRESULT_TYPEDEF_(= &h80029C83L)

				// '                    ' ''
				// '                    ''MessageId: TYPE_E_CIRCULARTYPE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Circular dependency between types/modules.
				// '                    ' ''
				// '                    ''const TYPE_E_CIRCULARTYPE              _HRESULT_TYPEDEF_(= &h80029C84L)

				// '                    ''******************
				// '                    ''FACILITY_STORAGE
				// '                    ''******************
				// '                    ' ''
				// '                    ''MessageId: STG_E_INVALIDFUNCTION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unable to perform requested operation.
				// '                    ' ''
				// '                    ''const STG_E_INVALIDFUNCTION            _HRESULT_TYPEDEF_(= &h80030001L)

				// '                    ' ''
				// '                    ''MessageId: STG_E_FILENOTFOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' %1 could not be found.
				// '                    ' ''
				// '                    ''const STG_E_FILENOTFOUND               _HRESULT_TYPEDEF_(= &h80030002L)

				// '                    ' ''
				// '                    ''MessageId: STG_E_PATHNOTFOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The path %1 could not be found.
				// '                    ' ''
				// '                    ''const STG_E_PATHNOTFOUND               _HRESULT_TYPEDEF_(= &h80030003L)

				// '                    ' ''
				// '                    ''MessageId: STG_E_TOOMANYOPENFILES
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' There are insufficient resources to open another file.
				// '                    ' ''
				// '                    ''const STG_E_TOOMANYOPENFILES           _HRESULT_TYPEDEF_(= &h80030004L)

				// '                    ' ''
				// '                    ''MessageId: STG_E_ACCESSDENIED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Access Denied.
				// '                    ' ''
				// '                    ''const STG_E_ACCESSDENIED               _HRESULT_TYPEDEF_(= &h80030005L)

				// '                    ' ''
				// '                    ''MessageId: STG_E_INVALIDHANDLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Attempted an operation on an invalid object.
				// '                    ' ''
				// '                    ''const STG_E_INVALIDHANDLE              _HRESULT_TYPEDEF_(= &h80030006L)

				// '                    ' ''
				// '                    ''MessageId: STG_E_INSUFFICIENTMEMORY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' There is insufficient memory available to complete operation.
				// '                    ' ''
				// '                    ''const STG_E_INSUFFICIENTMEMORY         _HRESULT_TYPEDEF_(= &h80030008L)

				// '                    ' ''
				// '                    ''MessageId: STG_E_INVALIDPOINTER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid pointer error.
				// '                    ' ''
				// '                    ''const STG_E_INVALIDPOINTER             _HRESULT_TYPEDEF_(= &h80030009L)

				// '                    ' ''
				// '                    ''MessageId: STG_E_NOMOREFILES
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' There are no more entries to return.
				// '                    ' ''
				// '                    ''const STG_E_NOMOREFILES                _HRESULT_TYPEDEF_(= &h80030012L)

				// '                    ' ''
				// '                    ''MessageId: STG_E_DISKISWRITEPROTECTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Disk is write-protected.
				// '                    ' ''
				// '                    ''const STG_E_DISKISWRITEPROTECTED       _HRESULT_TYPEDEF_(= &h80030013L)

				// '                    ' ''
				// '                    ''MessageId: STG_E_SEEKERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An error occurred during a seek operation.
				// '                    ' ''
				// '                    ''const STG_E_SEEKERROR                  _HRESULT_TYPEDEF_(= &h80030019L)

				// '                    ' ''
				// '                    ''MessageId: STG_E_WRITEFAULT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A disk error occurred during a write operation.
				// '                    ' ''
				// '                    ''const STG_E_WRITEFAULT                 _HRESULT_TYPEDEF_(= &h8003001DL)

				// '                    ' ''
				// '                    ''MessageId: STG_E_READFAULT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A disk error occurred during a read operation.
				// '                    ' ''
				// '                    ''const STG_E_READFAULT                  _HRESULT_TYPEDEF_(= &h8003001EL)

				// '                    ' ''
				// '                    ''MessageId: STG_E_SHAREVIOLATION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A share violation has occurred.
				// '                    ' ''
				// '                    ''const STG_E_SHAREVIOLATION             _HRESULT_TYPEDEF_(= &h80030020L)

				// '                    ' ''
				// '                    ''MessageId: STG_E_LOCKVIOLATION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A lock violation has occurred.
				// '                    ' ''
				// '                    ''const STG_E_LOCKVIOLATION              _HRESULT_TYPEDEF_(= &h80030021L)

				// '                    ' ''
				// '                    ''MessageId: STG_E_FILEALREADYEXISTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' %1 already exists.
				// '                    ' ''
				// '                    ''const STG_E_FILEALREADYEXISTS          _HRESULT_TYPEDEF_(= &h80030050L)

				// '                    ' ''
				// '                    ''MessageId: STG_E_INVALIDPARAMETER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid parameter error.
				// '                    ' ''
				// '                    ''const STG_E_INVALIDPARAMETER           _HRESULT_TYPEDEF_(= &h80030057L)

				// '                    ' ''
				// '                    ''MessageId: STG_E_MEDIUMFULL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' There is insufficient disk space to complete operation.
				// '                    ' ''
				// '                    ''const STG_E_MEDIUMFULL                 _HRESULT_TYPEDEF_(= &h80030070L)

				// '                    ' ''
				// '                    ''MessageId: STG_E_PROPSETMISMATCHED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Illegal write of non-simple property to simple property set.
				// '                    ' ''
				// '                    ''const STG_E_PROPSETMISMATCHED          _HRESULT_TYPEDEF_(= &h800300F0L)

				// '                    ' ''
				// '                    ''MessageId: STG_E_ABNORMALAPIEXIT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An API call exited abnormally.
				// '                    ' ''
				// '                    ''const STG_E_ABNORMALAPIEXIT            _HRESULT_TYPEDEF_(= &h800300FAL)

				// '                    ' ''
				// '                    ''MessageId: STG_E_INVALIDHEADER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The file %1 is not a valid compound file.
				// '                    ' ''
				// '                    ''const STG_E_INVALIDHEADER              _HRESULT_TYPEDEF_(= &h800300FBL)

				// '                    ' ''
				// '                    ''MessageId: STG_E_INVALIDNAME
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The name %1 is not valid.
				// '                    ' ''
				// '                    ''const STG_E_INVALIDNAME                _HRESULT_TYPEDEF_(= &h800300FCL)

				// '                    ' ''
				// '                    ''MessageId: STG_E_UNKNOWN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An unexpected error occurred.
				// '                    ' ''
				// '                    ''const STG_E_UNKNOWN                    _HRESULT_TYPEDEF_(= &h800300FDL)

				// '                    ' ''
				// '                    ''MessageId: STG_E_UNIMPLEMENTEDFUNCTION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' That function is not implemented.
				// '                    ' ''
				// '                    ''const STG_E_UNIMPLEMENTEDFUNCTION      _HRESULT_TYPEDEF_(= &h800300FEL)

				// '                    ' ''
				// '                    ''MessageId: STG_E_INVALIDFLAG
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid flag error.
				// '                    ' ''
				// '                    ''const STG_E_INVALIDFLAG                _HRESULT_TYPEDEF_(= &h800300FFL)

				// '                    ' ''
				// '                    ''MessageId: STG_E_INUSE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Attempted to use an object that is busy.
				// '                    ' ''
				// '                    ''const STG_E_INUSE                      _HRESULT_TYPEDEF_(= &h80030100L)

				// '                    ' ''
				// '                    ''MessageId: STG_E_NOTCURRENT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The storage has been changed since the last commit.
				// '                    ' ''
				// '                    ''const STG_E_NOTCURRENT                 _HRESULT_TYPEDEF_(= &h80030101L)

				// '                    ' ''
				// '                    ''MessageId: STG_E_REVERTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Attempted to use an object that has ceased to exist.
				// '                    ' ''
				// '                    ''const STG_E_REVERTED                   _HRESULT_TYPEDEF_(= &h80030102L)

				// '                    ' ''
				// '                    ''MessageId: STG_E_CANTSAVE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Can't save.
				// '                    ' ''
				// '                    ''const STG_E_CANTSAVE                   _HRESULT_TYPEDEF_(= &h80030103L)

				// '                    ' ''
				// '                    ''MessageId: STG_E_OLDFORMAT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The compound file %1 was produced with an incompatible version of storage.
				// '                    ' ''
				// '                    ''const STG_E_OLDFORMAT                  _HRESULT_TYPEDEF_(= &h80030104L)

				// '                    ' ''
				// '                    ''MessageId: STG_E_OLDDLL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The compound file %1 was produced with a newer version of storage.
				// '                    ' ''
				// '                    ''const STG_E_OLDDLL                     _HRESULT_TYPEDEF_(= &h80030105L)

				// '                    ' ''
				// '                    ''MessageId: STG_E_SHAREREQUIRED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Share.exe or equivalent is required for operation.
				// '                    ' ''
				// '                    ''const STG_E_SHAREREQUIRED              _HRESULT_TYPEDEF_(= &h80030106L)

				// '                    ' ''
				// '                    ''MessageId: STG_E_NOTFILEBASEDSTORAGE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Illegal operation called on non-file based storage.
				// '                    ' ''
				// '                    ''const STG_E_NOTFILEBASEDSTORAGE        _HRESULT_TYPEDEF_(= &h80030107L)

				// '                    ' ''
				// '                    ''MessageId: STG_E_EXTANTMARSHALLINGS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Illegal operation called on object with extant marshallings.
				// '                    ' ''
				// '                    ''const STG_E_EXTANTMARSHALLINGS         _HRESULT_TYPEDEF_(= &h80030108L)

				// '                    ' ''
				// '                    ''MessageId: STG_E_DOCFILECORRUPT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The docfile has been corrupted.
				// '                    ' ''
				// '                    ''const STG_E_DOCFILECORRUPT             _HRESULT_TYPEDEF_(= &h80030109L)

				// '                    ' ''
				// '                    ''MessageId: STG_E_BADBASEADDRESS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OLE32.DLL has been loaded at the wrong address.
				// '                    ' ''
				// '                    ''const STG_E_BADBASEADDRESS             _HRESULT_TYPEDEF_(= &h80030110L)

				// '                    ' ''
				// '                    ''MessageId: STG_E_DOCFILETOOLARGE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The compound file is too large for the current implementation
				// '                    ' ''
				// '                    ''const STG_E_DOCFILETOOLARGE            _HRESULT_TYPEDEF_(= &h80030111L)

				// '                    ' ''
				// '                    ''MessageId: STG_E_NOTSIMPLEFORMAT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The compound file was not created with the STGM_SIMPLE flag
				// '                    ' ''
				// '                    ''const STG_E_NOTSIMPLEFORMAT            _HRESULT_TYPEDEF_(= &h80030112L)

				// '                    ' ''
				// '                    ''MessageId: STG_E_INCOMPLETE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The file download was aborted abnormally.  The file is incomplete.
				// '                    ' ''
				// '                    ''const STG_E_INCOMPLETE                 _HRESULT_TYPEDEF_(= &h80030201L)

				// '                    ' ''
				// '                    ''MessageId: STG_E_TERMINATED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The file download has been terminated.
				// '                    ' ''
				// '                    ''const STG_E_TERMINATED                 _HRESULT_TYPEDEF_(= &h80030202L)

				// '                    ' ''
				// '                    ''MessageId: STG_S_CONVERTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The underlying file was converted to compound file format.
				// '                    ' ''
				// '                    ''const STG_S_CONVERTED                  _HRESULT_TYPEDEF_(= &h00030200L)

				// '                    ' ''
				// '                    ''MessageId: STG_S_BLOCK
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The storage operation should block until more data is available.
				// '                    ' ''
				// '                    ''const STG_S_BLOCK                      _HRESULT_TYPEDEF_(= &h00030201L)

				// '                    ' ''
				// '                    ''MessageId: STG_S_RETRYNOW
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The storage operation should retry immediately.
				// '                    ' ''
				// '                    ''const STG_S_RETRYNOW                   _HRESULT_TYPEDEF_(= &h00030202L)

				// '                    ' ''
				// '                    ''MessageId: STG_S_MONITORING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The notified event sink will not influence the storage operation.
				// '                    ' ''
				// '                    ''const STG_S_MONITORING                 _HRESULT_TYPEDEF_(= &h00030203L)

				// '                    ' ''
				// '                    ''MessageId: STG_S_MULTIPLEOPENS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Multiple opens prevent consolidated. (commit succeeded).
				// '                    ' ''
				// '                    ''const STG_S_MULTIPLEOPENS              _HRESULT_TYPEDEF_(= &h00030204L)

				// '                    ' ''
				// '                    ''MessageId: STG_S_CONSOLIDATIONFAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Consolidation of the storage file failed. (commit succeeded).
				// '                    ' ''
				// '                    ''const STG_S_CONSOLIDATIONFAILED        _HRESULT_TYPEDEF_(= &h00030205L)

				// '                    ' ''
				// '                    ''MessageId: STG_S_CANNOTCONSOLIDATE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Consolidation of the storage file is inappropriate. (commit succeeded).
				// '                    ' ''
				// '                    ''const STG_S_CANNOTCONSOLIDATE          _HRESULT_TYPEDEF_(= &h00030206L)

				// '                    ''/*++

				// '                    '' MessageId's = &h0305 - = &h031f (inclusive) are reserved for **STORAGE**
				// '                    '' copy protection errors.

				// '                    ''--*/
				// '                    ' ''
				// '                    ''MessageId: STG_E_STATUS_COPY_PROTECTION_FAILURE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Generic Copy Protection Error.
				// '                    ' ''
				// '                    ''const STG_E_STATUS_COPY_PROTECTION_FAILURE _HRESULT_TYPEDEF_(= &h80030305L)

				// '                    ' ''
				// '                    ''MessageId: STG_E_CSS_AUTHENTICATION_FAILURE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Copy Protection Error - DVD CSS Authentication failed.
				// '                    ' ''
				// '                    ''const STG_E_CSS_AUTHENTICATION_FAILURE _HRESULT_TYPEDEF_(= &h80030306L)

				// '                    ' ''
				// '                    ''MessageId: STG_E_CSS_KEY_NOT_PRESENT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Copy Protection Error - The given sector does not have a valid CSS key.
				// '                    ' ''
				// '                    ''const STG_E_CSS_KEY_NOT_PRESENT        _HRESULT_TYPEDEF_(= &h80030307L)

				// '                    ' ''
				// '                    ''MessageId: STG_E_CSS_KEY_NOT_ESTABLISHED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Copy Protection Error - DVD session key not established.
				// '                    ' ''
				// '                    ''const STG_E_CSS_KEY_NOT_ESTABLISHED    _HRESULT_TYPEDEF_(= &h80030308L)

				// '                    ' ''
				// '                    ''MessageId: STG_E_CSS_SCRAMBLED_SECTOR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Copy Protection Error - The read failed because the sector is encrypted.
				// '                    ' ''
				// '                    ''const STG_E_CSS_SCRAMBLED_SECTOR       _HRESULT_TYPEDEF_(= &h80030309L)

				// '                    ' ''
				// '                    ''MessageId: STG_E_CSS_REGION_MISMATCH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Copy Protection Error - The current DVD's region does not correspond to the region setting of the drive.
				// '                    ' ''
				// '                    ''const STG_E_CSS_REGION_MISMATCH        _HRESULT_TYPEDEF_(= &h8003030AL)

				// '                    ' ''
				// '                    ''MessageId: STG_E_RESETS_EXHAUSTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Copy Protection Error - The drive's region setting may be permanent or the number of user resets has been exhausted.
				// '                    ' ''
				// '                    ''const STG_E_RESETS_EXHAUSTED           _HRESULT_TYPEDEF_(= &h8003030BL)

				// '                    ''/*++

				// '                    '' MessageId's = &h0305 - = &h031f (inclusive) are reserved for **STORAGE**
				// '                    '' copy protection errors.

				// '                    ''--*/
				// '                    ''******************
				// '                    ''FACILITY_RPC
				// '                    ''******************
				// '                    ' ''
				// '                    ''Codes = &h0-= &h11 are propagated from 16 bit OLE.
				// '                    ' ''
				// '                    ' ''
				// '                    ''MessageId: RPC_E_CALL_REJECTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Call was rejected by callee.
				// '                    ' ''
				// '                    ''const RPC_E_CALL_REJECTED              _HRESULT_TYPEDEF_(= &h80010001L)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_CALL_CANCELED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Call was canceled by the message filter.
				// '                    ' ''
				// '                    ''const RPC_E_CALL_CANCELED              _HRESULT_TYPEDEF_(= &h80010002L)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_CANTPOST_INSENDCALL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The caller is dispatching an intertask SendMessage call and cannot call [Out ] via PostMessage.
				// '                    ' ''
				// '                    ''const RPC_E_CANTPOST_INSENDCALL        _HRESULT_TYPEDEF_(= &h80010003L)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_CANTCALLOUT_INASYNCCALL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The caller is dispatching an asynchronous call and cannot make an outgoing call on behalf of this call.
				// '                    ' ''
				// '                    ''const RPC_E_CANTCALLOUT_INASYNCCALL    _HRESULT_TYPEDEF_(= &h80010004L)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_CANTCALLOUT_INEXTERNALCALL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' It is illegal to call [Out ] while inside message filter.
				// '                    ' ''
				// '                    ''const RPC_E_CANTCALLOUT_INEXTERNALCALL _HRESULT_TYPEDEF_(= &h80010005L)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_CONNECTION_TERMINATED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The connection terminated or is in a bogus state and cannot be used any more. Other connections are still valid.
				// '                    ' ''
				// '                    ''const RPC_E_CONNECTION_TERMINATED      _HRESULT_TYPEDEF_(= &h80010006L)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_SERVER_DIED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The callee (server [not server application]) is not available and disappeared; all connections are invalid. The call may have e_runuted.
				// '                    ' ''
				// '                    ''const RPC_E_SERVER_DIED                _HRESULT_TYPEDEF_(= &h80010007L)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_CLIENT_DIED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The caller (client) disappeared while the callee (server) was processing a call.
				// '                    ' ''
				// '                    ''const RPC_E_CLIENT_DIED                _HRESULT_TYPEDEF_(= &h80010008L)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_INVALID_DATAPACKET
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The data packet with the marshalled parameter data is incorrect.
				// '                    ' ''
				// '                    ''const RPC_E_INVALID_DATAPACKET         _HRESULT_TYPEDEF_(= &h80010009L)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_CANTTRANSMIT_CALL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The call was not transmitted properly; the message queue was full and was not emptied after yielding.
				// '                    ' ''
				// '                    ''const RPC_E_CANTTRANSMIT_CALL          _HRESULT_TYPEDEF_(= &h8001000AL)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_CLIENT_CANTMARSHAL_DATA
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The client (caller) cannot marshall the parameter data - low memory, etc.
				// '                    ' ''
				// '                    ''const RPC_E_CLIENT_CANTMARSHAL_DATA    _HRESULT_TYPEDEF_(= &h8001000BL)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_CLIENT_CANTUNMARSHAL_DATA
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The client (caller) cannot unmarshall the return data - low memory, etc.
				// '                    ' ''
				// '                    ''const RPC_E_CLIENT_CANTUNMARSHAL_DATA  _HRESULT_TYPEDEF_(= &h8001000CL)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_SERVER_CANTMARSHAL_DATA
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The server (callee) cannot marshall the return data - low memory, etc.
				// '                    ' ''
				// '                    ''const RPC_E_SERVER_CANTMARSHAL_DATA    _HRESULT_TYPEDEF_(= &h8001000DL)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_SERVER_CANTUNMARSHAL_DATA
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The server (callee) cannot unmarshall the parameter data - low memory, etc.
				// '                    ' ''
				// '                    ''const RPC_E_SERVER_CANTUNMARSHAL_DATA  _HRESULT_TYPEDEF_(= &h8001000EL)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_INVALID_DATA
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Received data is invalid; could be server or client data.
				// '                    ' ''
				// '                    ''const RPC_E_INVALID_DATA               _HRESULT_TYPEDEF_(= &h8001000FL)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_INVALID_PARAMETER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A particular parameter is invalid and cannot be (un)marshalled.
				// '                    ' ''
				// '                    ''const RPC_E_INVALID_PARAMETER          _HRESULT_TYPEDEF_(= &h80010010L)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_CANTCALLOUT_AGAIN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' There is no second outgoing call on same channel in DDE conversation.
				// '                    ' ''
				// '                    ''const RPC_E_CANTCALLOUT_AGAIN          _HRESULT_TYPEDEF_(= &h80010011L)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_SERVER_DIED_DNE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The callee (server [not server application]) is not available and disappeared; all connections are invalid. The call did not e_runute.
				// '                    ' ''
				// '                    ''const RPC_E_SERVER_DIED_DNE            _HRESULT_TYPEDEF_(= &h80010012L)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_SYS_CALL_FAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' System call failed.
				// '                    ' ''
				// '                    ''const RPC_E_SYS_CALL_FAILED            _HRESULT_TYPEDEF_(= &h80010100L)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_OUT_OF_RESOURCES
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Could not allocate some required resource (memory, events, ...)
				// '                    ' ''
				// '                    ''const RPC_E_OUT_OF_RESOURCES           _HRESULT_TYPEDEF_(= &h80010101L)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_ATTEMPTED_MULTITHREAD
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Attempted to make calls on more than one thread in single threaded mode.
				// '                    ' ''
				// '                    ''const RPC_E_ATTEMPTED_MULTITHREAD      _HRESULT_TYPEDEF_(= &h80010102L)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_NOT_REGISTERED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested interface is not registered on the server object.
				// '                    ' ''
				// '                    ''const RPC_E_NOT_REGISTERED             _HRESULT_TYPEDEF_(= &h80010103L)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_FAULT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' RPC could not call the server or could not return the results of calling the server.
				// '                    ' ''
				// '                    ''const RPC_E_FAULT                      _HRESULT_TYPEDEF_(= &h80010104L)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_SERVERFAULT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The server threw an exception.
				// '                    ' ''
				// '                    ''const RPC_E_SERVERFAULT                _HRESULT_TYPEDEF_(= &h80010105L)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_CHANGED_MODE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Cannot change thread mode after it is set.
				// '                    ' ''
				// '                    ''const RPC_E_CHANGED_MODE               _HRESULT_TYPEDEF_(= &h80010106L)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_INVALIDMETHOD
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The method called does not exist on the server.
				// '                    ' ''
				// '                    ''const RPC_E_INVALIDMETHOD              _HRESULT_TYPEDEF_(= &h80010107L)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_DISCONNECTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The object invoked has disconnected from its clients.
				// '                    ' ''
				// '                    ''const RPC_E_DISCONNECTED               _HRESULT_TYPEDEF_(= &h80010108L)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_RETRY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The object invoked chose not to process the call now.  Try again later.
				// '                    ' ''
				// '                    ''const RPC_E_RETRY                      _HRESULT_TYPEDEF_(= &h80010109L)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_SERVERCALL_RETRYLATER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The message filter indicated that the application is busy.
				// '                    ' ''
				// '                    ''const RPC_E_SERVERCALL_RETRYLATER      _HRESULT_TYPEDEF_(= &h8001010AL)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_SERVERCALL_REJECTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The message filter rejected the call.
				// '                    ' ''
				// '                    ''const RPC_E_SERVERCALL_REJECTED        _HRESULT_TYPEDEF_(= &h8001010BL)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_INVALID_CALLDATA
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A call control interfaces was called with invalid data.
				// '                    ' ''
				// '                    ''const RPC_E_INVALID_CALLDATA           _HRESULT_TYPEDEF_(= &h8001010CL)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_CANTCALLOUT_ININPUTSYNCCALL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An outgoing call cannot be made since the application is dispatching an input-synchronous call.
				// '                    ' ''
				// '                    ''const RPC_E_CANTCALLOUT_ININPUTSYNCCALL _HRESULT_TYPEDEF_(= &h8001010DL)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_WRONG_THREAD
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The application called an interface that was marshalled for a different thread.
				// '                    ' ''
				// '                    ''const RPC_E_WRONG_THREAD               _HRESULT_TYPEDEF_(= &h8001010EL)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_THREAD_NOT_INIT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' CoInitialize has not been called on the current thread.
				// '                    ' ''
				// '                    ''const RPC_E_THREAD_NOT_INIT            _HRESULT_TYPEDEF_(= &h8001010FL)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_VERSION_MISMATCH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The version of OLE on the client and server machines does not match.
				// '                    ' ''
				// '                    ''const RPC_E_VERSION_MISMATCH           _HRESULT_TYPEDEF_(= &h80010110L)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_INVALID_HEADER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OLE received a packet with an invalid header.
				// '                    ' ''
				// '                    ''const RPC_E_INVALID_HEADER             _HRESULT_TYPEDEF_(= &h80010111L)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_INVALID_EXTENSION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OLE received a packet with an invalid extension.
				// '                    ' ''
				// '                    ''const RPC_E_INVALID_EXTENSION          _HRESULT_TYPEDEF_(= &h80010112L)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_INVALID_IPID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested object or interface does not exist.
				// '                    ' ''
				// '                    ''const RPC_E_INVALID_IPID               _HRESULT_TYPEDEF_(= &h80010113L)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_INVALID_OBJECT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested object does not exist.
				// '                    ' ''
				// '                    ''const RPC_E_INVALID_OBJECT             _HRESULT_TYPEDEF_(= &h80010114L)

				// '                    ' ''
				// '                    ''MessageId: RPC_S_CALLPENDING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OLE has sent a request and is waiting for a reply.
				// '                    ' ''
				// '                    ''const RPC_S_CALLPENDING                _HRESULT_TYPEDEF_(= &h80010115L)

				// '                    ' ''
				// '                    ''MessageId: RPC_S_WAITONTIMER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OLE is waiting before retrying a request.
				// '                    ' ''
				// '                    ''const RPC_S_WAITONTIMER                _HRESULT_TYPEDEF_(= &h80010116L)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_CALL_COMPLETE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Call context cannot be accessed after call completed.
				// '                    ' ''
				// '                    ''const RPC_E_CALL_COMPLETE              _HRESULT_TYPEDEF_(= &h80010117L)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_UNSECURE_CALL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Impersonate on unsecure calls is not supported.
				// '                    ' ''
				// '                    ''const RPC_E_UNSECURE_CALL              _HRESULT_TYPEDEF_(= &h80010118L)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_TOO_LATE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Security must be initialized before any interfaces are marshalled or unmarshalled. It cannot be changed once initialized.
				// '                    ' ''
				// '                    ''const RPC_E_TOO_LATE                   _HRESULT_TYPEDEF_(= &h80010119L)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_NO_GOOD_SECURITY_PACKAGES
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' No security packages are installed on this machine or the user is not logged on or there are no compatible security packages between the client and server.
				// '                    ' ''
				// '                    ''const RPC_E_NO_GOOD_SECURITY_PACKAGES  _HRESULT_TYPEDEF_(= &h8001011AL)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_ACCESS_DENIED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Access is denied.
				// '                    ' ''
				// '                    ''const RPC_E_ACCESS_DENIED              _HRESULT_TYPEDEF_(= &h8001011BL)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_REMOTE_DISABLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Remote calls are not allowed for this process.
				// '                    ' ''
				// '                    ''const RPC_E_REMOTE_DISABLED            _HRESULT_TYPEDEF_(= &h8001011CL)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_INVALID_OBJREF
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The marshaled interface data packet (OBJREF) has an invalid or unknown format.
				// '                    ' ''
				// '                    ''const RPC_E_INVALID_OBJREF             _HRESULT_TYPEDEF_(= &h8001011DL)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_NO_CONTEXT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' No context is associated with this call. This happens for some custom marshalled calls and on the client side of the call.
				// '                    ' ''
				// '                    ''const RPC_E_NO_CONTEXT                 _HRESULT_TYPEDEF_(= &h8001011EL)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_TIMEOUT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' This operation returned because the timeout period expired.
				// '                    ' ''
				// '                    ''const RPC_E_TIMEOUT                    _HRESULT_TYPEDEF_(= &h8001011FL)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_NO_SYNC
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' There are no synchronize objects to wait on.
				// '                    ' ''
				// '                    ''const RPC_E_NO_SYNC                    _HRESULT_TYPEDEF_(= &h80010120L)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_FULLSIC_REQUIRED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Full subject issuer chain SSL principal name expected from the server.
				// '                    ' ''
				// '                    ''const RPC_E_FULLSIC_REQUIRED           _HRESULT_TYPEDEF_(= &h80010121L)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_INVALID_STD_NAME
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Principal name is not a valid MSSTD name.
				// '                    ' ''
				// '                    ''const RPC_E_INVALID_STD_NAME           _HRESULT_TYPEDEF_(= &h80010122L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_FAILEDTOIMPERSONATE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unable to impersonate DCOM client
				// '                    ' ''
				// '                    ''const CO_E_FAILEDTOIMPERSONATE         _HRESULT_TYPEDEF_(= &h80010123L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_FAILEDTOGETSECCTX
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unable to obtain server's security context
				// '                    ' ''
				// '                    ''const CO_E_FAILEDTOGETSECCTX           _HRESULT_TYPEDEF_(= &h80010124L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_FAILEDTOOPENTHREADTOKEN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unable to open the access token of the current thread
				// '                    ' ''
				// '                    ''const CO_E_FAILEDTOOPENTHREADTOKEN     _HRESULT_TYPEDEF_(= &h80010125L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_FAILEDTOGETTOKENINFO
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unable to obtain user info from an access token
				// '                    ' ''
				// '                    ''const CO_E_FAILEDTOGETTOKENINFO        _HRESULT_TYPEDEF_(= &h80010126L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_TRUSTEEDOESNTMATCHCLIENT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The client who called IAccessControl::IsAccessPermitted was not the trustee provided to the method
				// '                    ' ''
				// '                    ''const CO_E_TRUSTEEDOESNTMATCHCLIENT    _HRESULT_TYPEDEF_(= &h80010127L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_FAILEDTOQUERYCLIENTBLANKET
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unable to obtain the client's security blanket
				// '                    ' ''
				// '                    ''const CO_E_FAILEDTOQUERYCLIENTBLANKET  _HRESULT_TYPEDEF_(= &h80010128L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_FAILEDTOSETDACL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unable to set a discretionary ACL into a security descriptor
				// '                    ' ''
				// '                    ''const CO_E_FAILEDTOSETDACL             _HRESULT_TYPEDEF_(= &h80010129L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_ACCESSCHECKFAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The system function, AccessCheck, returned false
				// '                    ' ''
				// '                    ''const CO_E_ACCESSCHECKFAILED           _HRESULT_TYPEDEF_(= &h8001012AL)

				// '                    ' ''
				// '                    ''MessageId: CO_E_NETACCESSAPIFAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Either NetAccessDel or NetAccessAdd returned an error code.
				// '                    ' ''
				// '                    ''const CO_E_NETACCESSAPIFAILED          _HRESULT_TYPEDEF_(= &h8001012BL)

				// '                    ' ''
				// '                    ''MessageId: CO_E_WRONGTRUSTEENAMESYNTAX
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' One of the trustee strings provided by the user did not conform to the <Domain>\<Name> syntax and it was not the "*" string
				// '                    ' ''
				// '                    ''const CO_E_WRONGTRUSTEENAMESYNTAX      _HRESULT_TYPEDEF_(= &h8001012CL)

				// '                    ' ''
				// '                    ''MessageId: CO_E_INVALIDSID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' One of the security identifiers provided by the user was invalid
				// '                    ' ''
				// '                    ''const CO_E_INVALIDSID                  _HRESULT_TYPEDEF_(= &h8001012DL)

				// '                    ' ''
				// '                    ''MessageId: CO_E_CONVERSIONFAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unable to convert a wide character trustee string to a multibyte trustee string
				// '                    ' ''
				// '                    ''const CO_E_CONVERSIONFAILED            _HRESULT_TYPEDEF_(= &h8001012EL)

				// '                    ' ''
				// '                    ''MessageId: CO_E_NOMATCHINGSIDFOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unable to find a security identifier that corresponds to a trustee string provided by the user
				// '                    ' ''
				// '                    ''const CO_E_NOMATCHINGSIDFOUND          _HRESULT_TYPEDEF_(= &h8001012FL)

				// '                    ' ''
				// '                    ''MessageId: CO_E_LOOKUPACCSIDFAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The system function, LookupAccountSID, failed
				// '                    ' ''
				// '                    ''const CO_E_LOOKUPACCSIDFAILED          _HRESULT_TYPEDEF_(= &h80010130L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_NOMATCHINGNAMEFOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unable to find a trustee name that corresponds to a security identifier provided by the user
				// '                    ' ''
				// '                    ''const CO_E_NOMATCHINGNAMEFOUND         _HRESULT_TYPEDEF_(= &h80010131L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_LOOKUPACCNAMEFAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The system function, LookupAccountName, failed
				// '                    ' ''
				// '                    ''const CO_E_LOOKUPACCNAMEFAILED         _HRESULT_TYPEDEF_(= &h80010132L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_SETSERLHNDLFAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unable to set or reset a serialization handle
				// '                    ' ''
				// '                    ''const CO_E_SETSERLHNDLFAILED           _HRESULT_TYPEDEF_(= &h80010133L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_FAILEDTOGETWINDIR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unable to obtain the Windows directory
				// '                    ' ''
				// '                    ''const CO_E_FAILEDTOGETWINDIR           _HRESULT_TYPEDEF_(= &h80010134L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_PATHTOOLONG
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Path too long
				// '                    ' ''
				// '                    ''const CO_E_PATHTOOLONG                 _HRESULT_TYPEDEF_(= &h80010135L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_FAILEDTOGENUUID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unable to generate a uuid.
				// '                    ' ''
				// '                    ''const CO_E_FAILEDTOGENUUID             _HRESULT_TYPEDEF_(= &h80010136L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_FAILEDTOCREATEFILE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unable to create file
				// '                    ' ''
				// '                    ''const CO_E_FAILEDTOCREATEFILE          _HRESULT_TYPEDEF_(= &h80010137L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_FAILEDTOCLOSEHANDLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unable to close a serialization handle or a file handle.
				// '                    ' ''
				// '                    ''const CO_E_FAILEDTOCLOSEHANDLE         _HRESULT_TYPEDEF_(= &h80010138L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_EXCEEDSYSACLLIMIT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The number of ACEs in an ACL exceeds the system limit.
				// '                    ' ''
				// '                    ''const CO_E_EXCEEDSYSACLLIMIT           _HRESULT_TYPEDEF_(= &h80010139L)

				// '                    ' ''
				// '                    ''MessageId: CO_E_ACESINWRONGORDER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Not all the DENY_ACCESS ACEs are arranged in front of the GRANT_ACCESS ACEs in the stream.
				// '                    ' ''
				// '                    ''const CO_E_ACESINWRONGORDER            _HRESULT_TYPEDEF_(= &h8001013AL)

				// '                    ' ''
				// '                    ''MessageId: CO_E_INCOMPATIBLESTREAMVERSION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The version of ACL format in the stream is not supported by this implementation of IAccessControl
				// '                    ' ''
				// '                    ''const CO_E_INCOMPATIBLESTREAMVERSION   _HRESULT_TYPEDEF_(= &h8001013BL)

				// '                    ' ''
				// '                    ''MessageId: CO_E_FAILEDTOOPENPROCESSTOKEN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unable to open the access token of the server process
				// '                    ' ''
				// '                    ''const CO_E_FAILEDTOOPENPROCESSTOKEN    _HRESULT_TYPEDEF_(= &h8001013CL)

				// '                    ' ''
				// '                    ''MessageId: CO_E_DECODEFAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unable to decode the ACL in the stream provided by the user
				// '                    ' ''
				// '                    ''const CO_E_DECODEFAILED                _HRESULT_TYPEDEF_(= &h8001013DL)

				// '                    ' ''
				// '                    ''MessageId: CO_E_ACNOTINITIALIZED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The COM IAccessControl object is not initialized
				// '                    ' ''
				// '                    ''const CO_E_ACNOTINITIALIZED            _HRESULT_TYPEDEF_(= &h8001013FL)

				// '                    ' ''
				// '                    ''MessageId: CO_E_CANCEL_DISABLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Call Cancellation is disabled
				// '                    ' ''
				// '                    ''const CO_E_CANCEL_DISABLED             _HRESULT_TYPEDEF_(= &h80010140L)

				// '                    ' ''
				// '                    ''MessageId: RPC_E_UNEXPECTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An internal error occurred.
				// '                    ' ''
				// '                    ''const RPC_E_UNEXPECTED                 _HRESULT_TYPEDEF_(= &h8001FFFFL)



				// '                    '''''''''''''''''''''
				// '                    ''                                 '
				// '                    ''Additional Security Status Codes '
				// '                    ''                                 '
				// '                    ''Facility=Security                '
				// '                    ''                                 '
				// '                    '''''''''''''''''''''


				// '                    ' ''
				// '                    ''MessageId: ERROR_AUDITING_DISABLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified event is currently not being audited.
				// '                    ' ''
				// '                    ''const ERROR_AUDITING_DISABLED          _HRESULT_TYPEDEF_(= &hC0090001L)

				// '                    ' ''
				// '                    ''MessageId: ERROR_ALL_SIDS_FILTERED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The SID filtering operation removed all SIDs.
				// '                    ' ''
				// '                    ''const ERROR_ALL_SIDS_FILTERED          _HRESULT_TYPEDEF_(= &hC0090002L)



				// '                    ''''''''''''''''''''''''/
				// '                    ''                                        '
				// '                    ''end of Additional Security Status Codes '
				// '                    ''                                        '
				// '                    ''''''''''''''''''''''''/



				// '                    '' ''''''''/
				// '                    '' '
				// '                    '' '  FACILITY_SSPI
				// '                    '' '
				// '                    '' ''''''''/

				// '                    ' ''
				// '                    ''MessageId: NTE_BAD_UID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Bad UID.
				// '                    ' ''
				// '                    ''const NTE_BAD_UID                      _HRESULT_TYPEDEF_(= &h80090001L)

				// '                    ' ''
				// '                    ''MessageId: NTE_BAD_HASH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Bad Hash.
				// '                    ' ''
				// '                    ''const NTE_BAD_HASH                     _HRESULT_TYPEDEF_(= &h80090002L)

				// '                    ' ''
				// '                    ''MessageId: NTE_BAD_KEY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Bad Key.
				// '                    ' ''
				// '                    ''const NTE_BAD_KEY                      _HRESULT_TYPEDEF_(= &h80090003L)

				// '                    ' ''
				// '                    ''MessageId: NTE_BAD_LEN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Bad Length.
				// '                    ' ''
				// '                    ''const NTE_BAD_LEN                      _HRESULT_TYPEDEF_(= &h80090004L)

				// '                    ' ''
				// '                    ''MessageId: NTE_BAD_DATA
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Bad Data.
				// '                    ' ''
				// '                    ''const NTE_BAD_DATA                     _HRESULT_TYPEDEF_(= &h80090005L)

				// '                    ' ''
				// '                    ''MessageId: NTE_BAD_SIGNATURE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid Signature.
				// '                    ' ''
				// '                    ''const NTE_BAD_SIGNATURE                _HRESULT_TYPEDEF_(= &h80090006L)

				// '                    ' ''
				// '                    ''MessageId: NTE_BAD_VER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Bad Version of provider.
				// '                    ' ''
				// '                    ''const NTE_BAD_VER                      _HRESULT_TYPEDEF_(= &h80090007L)

				// '                    ' ''
				// '                    ''MessageId: NTE_BAD_ALGID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid algorithm specified.
				// '                    ' ''
				// '                    ''const NTE_BAD_ALGID                    _HRESULT_TYPEDEF_(= &h80090008L)

				// '                    ' ''
				// '                    ''MessageId: NTE_BAD_FLAGS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid flags specified.
				// '                    ' ''
				// '                    ''const NTE_BAD_FLAGS                    _HRESULT_TYPEDEF_(= &h80090009L)

				// '                    ' ''
				// '                    ''MessageId: NTE_BAD_TYPE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid type specified.
				// '                    ' ''
				// '                    ''const NTE_BAD_TYPE                     _HRESULT_TYPEDEF_(= &h8009000AL)

				// '                    ' ''
				// '                    ''MessageId: NTE_BAD_KEY_STATE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Key not valid for use in specified state.
				// '                    ' ''
				// '                    ''const NTE_BAD_KEY_STATE                _HRESULT_TYPEDEF_(= &h8009000BL)

				// '                    ' ''
				// '                    ''MessageId: NTE_BAD_HASH_STATE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Hash not valid for use in specified state.
				// '                    ' ''
				// '                    ''const NTE_BAD_HASH_STATE               _HRESULT_TYPEDEF_(= &h8009000CL)

				// '                    ' ''
				// '                    ''MessageId: NTE_NO_KEY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Key does not exist.
				// '                    ' ''
				// '                    ''const NTE_NO_KEY                       _HRESULT_TYPEDEF_(= &h8009000DL)

				// '                    ' ''
				// '                    ''MessageId: NTE_NO_MEMORY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Insufficient memory available for the operation.
				// '                    ' ''
				// '                    ''const NTE_NO_MEMORY                    _HRESULT_TYPEDEF_(= &h8009000EL)

				// '                    ' ''
				// '                    ''MessageId: NTE_EXISTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Object already exists.
				// '                    ' ''
				// '                    ''const NTE_EXISTS                       _HRESULT_TYPEDEF_(= &h8009000FL)

				// '                    ' ''
				// '                    ''MessageId: NTE_PERM
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Access denied.
				// '                    ' ''
				// '                    ''const NTE_PERM                         _HRESULT_TYPEDEF_(= &h80090010L)

				// '                    ' ''
				// '                    ''MessageId: NTE_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Object was not found.
				// '                    ' ''
				// '                    ''const NTE_NOT_FOUND                    _HRESULT_TYPEDEF_(= &h80090011L)

				// '                    ' ''
				// '                    ''MessageId: NTE_DOUBLE_ENCRYPT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Data already encrypted.
				// '                    ' ''
				// '                    ''const NTE_DOUBLE_ENCRYPT               _HRESULT_TYPEDEF_(= &h80090012L)

				// '                    ' ''
				// '                    ''MessageId: NTE_BAD_PROVIDER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid provider specified.
				// '                    ' ''
				// '                    ''const NTE_BAD_PROVIDER                 _HRESULT_TYPEDEF_(= &h80090013L)

				// '                    ' ''
				// '                    ''MessageId: NTE_BAD_PROV_TYPE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid provider type specified.
				// '                    ' ''
				// '                    ''const NTE_BAD_PROV_TYPE                _HRESULT_TYPEDEF_(= &h80090014L)

				// '                    ' ''
				// '                    ''MessageId: NTE_BAD_PUBLIC_KEY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Provider's public key is invalid.
				// '                    ' ''
				// '                    ''const NTE_BAD_PUBLIC_KEY               _HRESULT_TYPEDEF_(= &h80090015L)

				// '                    ' ''
				// '                    ''MessageId: NTE_BAD_KEYSET
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Keyset does not exist
				// '                    ' ''
				// '                    ''const NTE_BAD_KEYSET                   _HRESULT_TYPEDEF_(= &h80090016L)

				// '                    ' ''
				// '                    ''MessageId: NTE_PROV_TYPE_NOT_DEF
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Provider type not defined.
				// '                    ' ''
				// '                    ''const NTE_PROV_TYPE_NOT_DEF            _HRESULT_TYPEDEF_(= &h80090017L)

				// '                    ' ''
				// '                    ''MessageId: NTE_PROV_TYPE_ENTRY_BAD
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Provider type as registered is invalid.
				// '                    ' ''
				// '                    ''const NTE_PROV_TYPE_ENTRY_BAD          _HRESULT_TYPEDEF_(= &h80090018L)

				// '                    ' ''
				// '                    ''MessageId: NTE_KEYSET_NOT_DEF
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The keyset is not defined.
				// '                    ' ''
				// '                    ''const NTE_KEYSET_NOT_DEF               _HRESULT_TYPEDEF_(= &h80090019L)

				// '                    ' ''
				// '                    ''MessageId: NTE_KEYSET_ENTRY_BAD
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Keyset as registered is invalid.
				// '                    ' ''
				// '                    ''const NTE_KEYSET_ENTRY_BAD             _HRESULT_TYPEDEF_(= &h8009001AL)

				// '                    ' ''
				// '                    ''MessageId: NTE_PROV_TYPE_NO_MATCH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Provider type does not match registered value.
				// '                    ' ''
				// '                    ''const NTE_PROV_TYPE_NO_MATCH           _HRESULT_TYPEDEF_(= &h8009001BL)

				// '                    ' ''
				// '                    ''MessageId: NTE_SIGNATURE_FILE_BAD
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The digital signature file is corrupt.
				// '                    ' ''
				// '                    ''const NTE_SIGNATURE_FILE_BAD           _HRESULT_TYPEDEF_(= &h8009001CL)

				// '                    ' ''
				// '                    ''MessageId: NTE_PROVIDER_DLL_FAIL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Provider DLL failed to initialize correctly.
				// '                    ' ''
				// '                    ''const NTE_PROVIDER_DLL_FAIL            _HRESULT_TYPEDEF_(= &h8009001DL)

				// '                    ' ''
				// '                    ''MessageId: NTE_PROV_DLL_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Provider DLL could not be found.
				// '                    ' ''
				// '                    ''const NTE_PROV_DLL_NOT_FOUND           _HRESULT_TYPEDEF_(= &h8009001EL)

				// '                    ' ''
				// '                    ''MessageId: NTE_BAD_KEYSET_PARAM
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The Keyset parameter is invalid.
				// '                    ' ''
				// '                    ''const NTE_BAD_KEYSET_PARAM             _HRESULT_TYPEDEF_(= &h8009001FL)

				// '                    ' ''
				// '                    ''MessageId: NTE_FAIL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An internal error occurred.
				// '                    ' ''
				// '                    ''const NTE_FAIL                         _HRESULT_TYPEDEF_(= &h80090020L)

				// '                    ' ''
				// '                    ''MessageId: NTE_SYS_ERR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A base error occurred.
				// '                    ' ''
				// '                    ''const NTE_SYS_ERR                      _HRESULT_TYPEDEF_(= &h80090021L)

				// '                    ' ''
				// '                    ''MessageId: NTE_SILENT_CONTEXT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Provider could not perform the action since the context was acquired as silent.
				// '                    ' ''
				// '                    ''const NTE_SILENT_CONTEXT               _HRESULT_TYPEDEF_(= &h80090022L)

				// '                    ' ''
				// '                    ''MessageId: NTE_TOKEN_KEYSET_STORAGE_FULL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The security token does not have storage space available for an additional container.
				// '                    ' ''
				// '                    ''const NTE_TOKEN_KEYSET_STORAGE_FULL    _HRESULT_TYPEDEF_(= &h80090023L)

				// '                    ' ''
				// '                    ''MessageId: NTE_TEMPORARY_PROFILE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The profile for the user is a temporary profile.
				// '                    ' ''
				// '                    ''const NTE_TEMPORARY_PROFILE            _HRESULT_TYPEDEF_(= &h80090024L)

				// '                    ' ''
				// '                    ''MessageId: NTE_FIXEDPARAMETER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The key parameters could not be set because the CSP uses fixed parameters.
				// '                    ' ''
				// '                    ''const NTE_FIXEDPARAMETER               _HRESULT_TYPEDEF_(= &h80090025L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_INSUFFICIENT_MEMORY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Not enough memory is available to complete this request
				// '                    ' ''
				// '                    ''const SEC_E_INSUFFICIENT_MEMORY        _HRESULT_TYPEDEF_(= &h80090300L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_INVALID_HANDLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The handle specified is invalid
				// '                    ' ''
				// '                    ''const SEC_E_INVALID_HANDLE             _HRESULT_TYPEDEF_(= &h80090301L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_UNSUPPORTED_FUNCTION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The function requested is not supported
				// '                    ' ''
				// '                    ''const SEC_E_UNSUPPORTED_FUNCTION       _HRESULT_TYPEDEF_(= &h80090302L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_TARGET_UNKNOWN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified target is unknown or unreachable
				// '                    ' ''
				// '                    ''const SEC_E_TARGET_UNKNOWN             _HRESULT_TYPEDEF_(= &h80090303L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_INTERNAL_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The Local Security Authority cannot be contacted
				// '                    ' ''
				// '                    ''const SEC_E_INTERNAL_ERROR             _HRESULT_TYPEDEF_(= &h80090304L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_SECPKG_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested security package does not exist
				// '                    ' ''
				// '                    ''const SEC_E_SECPKG_NOT_FOUND           _HRESULT_TYPEDEF_(= &h80090305L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_NOT_OWNER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The caller is not the owner of the desired credentials
				// '                    ' ''
				// '                    ''const SEC_E_NOT_OWNER                  _HRESULT_TYPEDEF_(= &h80090306L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_CANNOT_INSTALL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The security package failed to initialize, and cannot be installed
				// '                    ' ''
				// '                    ''const SEC_E_CANNOT_INSTALL             _HRESULT_TYPEDEF_(= &h80090307L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_INVALID_TOKEN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The token supplied to the function is invalid
				// '                    ' ''
				// '                    ''const SEC_E_INVALID_TOKEN              _HRESULT_TYPEDEF_(= &h80090308L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_CANNOT_PACK
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The security package is not able to marshall the logon buffer, so the logon attempt has failed
				// '                    ' ''
				// '                    ''const SEC_E_CANNOT_PACK                _HRESULT_TYPEDEF_(= &h80090309L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_QOP_NOT_SUPPORTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The per-message Quality of Protection is not supported by the security package
				// '                    ' ''
				// '                    ''const SEC_E_QOP_NOT_SUPPORTED          _HRESULT_TYPEDEF_(= &h8009030AL)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_NO_IMPERSONATION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The security context does not allow impersonation of the client
				// '                    ' ''
				// '                    ''const SEC_E_NO_IMPERSONATION           _HRESULT_TYPEDEF_(= &h8009030BL)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_LOGON_DENIED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The logon attempt failed
				// '                    ' ''
				// '                    ''const SEC_E_LOGON_DENIED               _HRESULT_TYPEDEF_(= &h8009030CL)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_UNKNOWN_CREDENTIALS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The credentials supplied to the package were not recognized
				// '                    ' ''
				// '                    ''const SEC_E_UNKNOWN_CREDENTIALS        _HRESULT_TYPEDEF_(= &h8009030DL)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_NO_CREDENTIALS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' No credentials are available in the security package
				// '                    ' ''
				// '                    ''const SEC_E_NO_CREDENTIALS             _HRESULT_TYPEDEF_(= &h8009030EL)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_MESSAGE_ALTERED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The message or signature supplied for verification has been altered
				// '                    ' ''
				// '                    ''const SEC_E_MESSAGE_ALTERED            _HRESULT_TYPEDEF_(= &h8009030FL)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_OUT_OF_SEQUENCE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The message supplied for verification is [Out ] of sequence
				// '                    ' ''
				// '                    ''const SEC_E_OUT_OF_SEQUENCE            _HRESULT_TYPEDEF_(= &h80090310L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_NO_AUTHENTICATING_AUTHORITY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' No authority could be contacted for authentication.
				// '                    ' ''
				// '                    ''const SEC_E_NO_AUTHENTICATING_AUTHORITY _HRESULT_TYPEDEF_(= &h80090311L)

				// '                    ' ''
				// '                    ''MessageId: SEC_I_CONTINUE_NEEDED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The function completed successfully, but must be called again to complete the context
				// '                    ' ''
				// '                    ''const SEC_I_CONTINUE_NEEDED            _HRESULT_TYPEDEF_(= &h00090312L)

				// '                    ' ''
				// '                    ''MessageId: SEC_I_COMPLETE_NEEDED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The function completed successfully, but CompleteToken must be called
				// '                    ' ''
				// '                    ''const SEC_I_COMPLETE_NEEDED            _HRESULT_TYPEDEF_(= &h00090313L)

				// '                    ' ''
				// '                    ''MessageId: SEC_I_COMPLETE_AND_CONTINUE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The function completed successfully, but both CompleteToken and this function must be called to complete the context
				// '                    ' ''
				// '                    ''const SEC_I_COMPLETE_AND_CONTINUE      _HRESULT_TYPEDEF_(= &h00090314L)

				// '                    ' ''
				// '                    ''MessageId: SEC_I_LOCAL_LOGON
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The logon was completed, but no network authority was available. The logon was made using locally known information
				// '                    ' ''
				// '                    ''const SEC_I_LOCAL_LOGON                _HRESULT_TYPEDEF_(= &h00090315L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_BAD_PKGID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested security package does not exist
				// '                    ' ''
				// '                    ''const SEC_E_BAD_PKGID                  _HRESULT_TYPEDEF_(= &h80090316L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_CONTEXT_EXPIRED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The context has expired and can no longer be used.
				// '                    ' ''
				// '                    ''const SEC_E_CONTEXT_EXPIRED            _HRESULT_TYPEDEF_(= &h80090317L)

				// '                    ' ''
				// '                    ''MessageId: SEC_I_CONTEXT_EXPIRED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The context has expired and can no longer be used.
				// '                    ' ''
				// '                    ''const SEC_I_CONTEXT_EXPIRED            _HRESULT_TYPEDEF_(= &h00090317L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_INCOMPLETE_MESSAGE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The supplied message is incomplete.  The signature was not verified.
				// '                    ' ''
				// '                    ''const SEC_E_INCOMPLETE_MESSAGE         _HRESULT_TYPEDEF_(= &h80090318L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_INCOMPLETE_CREDENTIALS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The credentials supplied were not complete, and could not be verified. The context could not be initialized.
				// '                    ' ''
				// '                    ''const SEC_E_INCOMPLETE_CREDENTIALS     _HRESULT_TYPEDEF_(= &h80090320L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_BUFFER_TOO_SMALL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The buffers supplied to a function was too small.
				// '                    ' ''
				// '                    ''const SEC_E_BUFFER_TOO_SMALL           _HRESULT_TYPEDEF_(= &h80090321L)

				// '                    ' ''
				// '                    ''MessageId: SEC_I_INCOMPLETE_CREDENTIALS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The credentials supplied were not complete, and could not be verified. Additional information can be returned from the context.
				// '                    ' ''
				// '                    ''const SEC_I_INCOMPLETE_CREDENTIALS     _HRESULT_TYPEDEF_(= &h00090320L)

				// '                    ' ''
				// '                    ''MessageId: SEC_I_RENEGOTIATE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The context data must be renegotiated with the peer.
				// '                    ' ''
				// '                    ''const SEC_I_RENEGOTIATE                _HRESULT_TYPEDEF_(= &h00090321L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_WRONG_PRINCIPAL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The target principal name is incorrect.
				// '                    ' ''
				// '                    ''const SEC_E_WRONG_PRINCIPAL            _HRESULT_TYPEDEF_(= &h80090322L)

				// '                    ' ''
				// '                    ''MessageId: SEC_I_NO_LSA_CONTEXT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' There is no LSA mode context associated with this context.
				// '                    ' ''
				// '                    ''const SEC_I_NO_LSA_CONTEXT             _HRESULT_TYPEDEF_(= &h00090323L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_TIME_SKEW
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The clocks on the client and server machines are skewed.
				// '                    ' ''
				// '                    ''const SEC_E_TIME_SKEW                  _HRESULT_TYPEDEF_(= &h80090324L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_UNTRUSTED_ROOT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The certificate chain was issued by an authority that is not trusted.
				// '                    ' ''
				// '                    ''const SEC_E_UNTRUSTED_ROOT             _HRESULT_TYPEDEF_(= &h80090325L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_ILLEGAL_MESSAGE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The message received was unexpected or badly formatted.
				// '                    ' ''
				// '                    ''const SEC_E_ILLEGAL_MESSAGE            _HRESULT_TYPEDEF_(= &h80090326L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_CERT_UNKNOWN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An unknown error occurred while processing the certificate.
				// '                    ' ''
				// '                    ''const SEC_E_CERT_UNKNOWN               _HRESULT_TYPEDEF_(= &h80090327L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_CERT_EXPIRED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The received certificate has expired.
				// '                    ' ''
				// '                    ''const SEC_E_CERT_EXPIRED               _HRESULT_TYPEDEF_(= &h80090328L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_ENCRYPT_FAILURE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified data could not be encrypted.
				// '                    ' ''
				// '                    ''const SEC_E_ENCRYPT_FAILURE            _HRESULT_TYPEDEF_(= &h80090329L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_DECRYPT_FAILURE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified data could not be decrypted.
				// '                    '' 
				// '                    ' ''
				// '                    ''const SEC_E_DECRYPT_FAILURE            _HRESULT_TYPEDEF_(= &h80090330L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_ALGORITHM_MISMATCH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The client and server cannot communicate, because they do not possess a common algorithm.
				// '                    ' ''
				// '                    ''const SEC_E_ALGORITHM_MISMATCH         _HRESULT_TYPEDEF_(= &h80090331L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_SECURITY_QOS_FAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The security context could not be established due to a failure in the requested quality of service (e.g. mutual authentication or delegation).
				// '                    ' ''
				// '                    ''const SEC_E_SECURITY_QOS_FAILED        _HRESULT_TYPEDEF_(= &h80090332L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_UNFINISHED_CONTEXT_DELETED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A security context was deleted before the context was completed.  This is considered a logon failure.
				// '                    ' ''
				// '                    ''const SEC_E_UNFINISHED_CONTEXT_DELETED _HRESULT_TYPEDEF_(= &h80090333L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_NO_TGT_REPLY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The client is trying to negotiate a context and the server requires user-to-user but didn't send a TGT reply.
				// '                    ' ''
				// '                    ''const SEC_E_NO_TGT_REPLY               _HRESULT_TYPEDEF_(= &h80090334L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_NO_IP_ADDRESSES
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unable to accomplish the requested task because the local machine does not have any IP addresses.
				// '                    ' ''
				// '                    ''const SEC_E_NO_IP_ADDRESSES            _HRESULT_TYPEDEF_(= &h80090335L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_WRONG_CREDENTIAL_HANDLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The supplied credential handle does not match the credential associated with the security context.
				// '                    ' ''
				// '                    ''const SEC_E_WRONG_CREDENTIAL_HANDLE    _HRESULT_TYPEDEF_(= &h80090336L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_CRYPTO_SYSTEM_INVALID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The crypto system or checksum function is invalid because a required function is unavailable.
				// '                    ' ''
				// '                    ''const SEC_E_CRYPTO_SYSTEM_INVALID      _HRESULT_TYPEDEF_(= &h80090337L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_MAX_REFERRALS_EXCEEDED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The number of maximum ticket referrals has been exceeded.
				// '                    ' ''
				// '                    ''const SEC_E_MAX_REFERRALS_EXCEEDED     _HRESULT_TYPEDEF_(= &h80090338L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_MUST_BE_KDC
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The local machine must be a Kerberos KDC (domain controller) and it is not.
				// '                    ' ''
				// '                    ''const SEC_E_MUST_BE_KDC                _HRESULT_TYPEDEF_(= &h80090339L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_STRONG_CRYPTO_NOT_SUPPORTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The other end of the security negotiation is requires strong crypto but it is not supported on the local machine.
				// '                    ' ''
				// '                    ''const SEC_E_STRONG_CRYPTO_NOT_SUPPORTED _HRESULT_TYPEDEF_(= &h8009033AL)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_TOO_MANY_PRINCIPALS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The KDC reply contained more than one principal name.
				// '                    ' ''
				// '                    ''const SEC_E_TOO_MANY_PRINCIPALS        _HRESULT_TYPEDEF_(= &h8009033BL)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_NO_PA_DATA
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Expected to find PA data for a hint of what etype to use, but it was not found.
				// '                    ' ''
				// '                    ''const SEC_E_NO_PA_DATA                 _HRESULT_TYPEDEF_(= &h8009033CL)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_PKINIT_NAME_MISMATCH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The client certificate does not contain a valid UPN, or does not match the client name 
				// '                    '' in the logon request.  Please contact your administrator.
				// '                    ' ''
				// '                    ''const SEC_E_PKINIT_NAME_MISMATCH       _HRESULT_TYPEDEF_(= &h8009033DL)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_SMARTCARD_LOGON_REQUIRED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Smartcard logon is required and was not used.
				// '                    ' ''
				// '                    ''const SEC_E_SMARTCARD_LOGON_REQUIRED   _HRESULT_TYPEDEF_(= &h8009033EL)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_SHUTDOWN_IN_PROGRESS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A system shutdown is in progress.
				// '                    ' ''
				// '                    ''const SEC_E_SHUTDOWN_IN_PROGRESS       _HRESULT_TYPEDEF_(= &h8009033FL)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_KDC_INVALID_REQUEST
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An invalid request was sent to the KDC.
				// '                    ' ''
				// '                    ''const SEC_E_KDC_INVALID_REQUEST        _HRESULT_TYPEDEF_(= &h80090340L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_KDC_UNABLE_TO_REFER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The KDC was unable to generate a referral for the service requested.
				// '                    ' ''
				// '                    ''const SEC_E_KDC_UNABLE_TO_REFER        _HRESULT_TYPEDEF_(= &h80090341L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_KDC_UNKNOWN_ETYPE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The encryption type requested is not supported by the KDC.
				// '                    ' ''
				// '                    ''const SEC_E_KDC_UNKNOWN_ETYPE          _HRESULT_TYPEDEF_(= &h80090342L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_UNSUPPORTED_PREAUTH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An unsupported preauthentication mechanism was presented to the kerberos package.
				// '                    ' ''
				// '                    ''const SEC_E_UNSUPPORTED_PREAUTH        _HRESULT_TYPEDEF_(= &h80090343L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_DELEGATION_REQUIRED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested operation cannot be completed.  The computer must be trusted for delegation and the current user account must be configured to allow delegation.
				// '                    ' ''
				// '                    ''const SEC_E_DELEGATION_REQUIRED        _HRESULT_TYPEDEF_(= &h80090345L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_BAD_BINDINGS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Client's supplied SSPI channel bindings were incorrect.
				// '                    ' ''
				// '                    ''const SEC_E_BAD_BINDINGS               _HRESULT_TYPEDEF_(= &h80090346L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_MULTIPLE_ACCOUNTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The received certificate was mapped to multiple accounts.
				// '                    ' ''
				// '                    ''const SEC_E_MULTIPLE_ACCOUNTS          _HRESULT_TYPEDEF_(= &h80090347L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_NO_KERB_KEY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' SEC_E_NO_KERB_KEY
				// '                    ' ''
				// '                    ''const SEC_E_NO_KERB_KEY                _HRESULT_TYPEDEF_(= &h80090348L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_CERT_WRONG_USAGE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The certificate is not valid for the requested usage.
				// '                    ' ''
				// '                    ''const SEC_E_CERT_WRONG_USAGE           _HRESULT_TYPEDEF_(= &h80090349L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_DOWNGRADE_DETECTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The system detected a possible attempt to compromise security.  Please ensure that you can contact the server that authenticated you.
				// '                    ' ''
				// '                    ''const SEC_E_DOWNGRADE_DETECTED         _HRESULT_TYPEDEF_(= &h80090350L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_SMARTCARD_CERT_REVOKED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The smartcard certificate used for authentication has been revoked.
				// '                    '' Please contact your system administrator.  There may be additional information in the
				// '                    '' event log.
				// '                    ' ''
				// '                    ''const SEC_E_SMARTCARD_CERT_REVOKED     _HRESULT_TYPEDEF_(= &h80090351L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_ISSUING_CA_UNTRUSTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An untrusted certificate authority was detected While processing the
				// '                    '' smartcard certificate used for authentication.  Please contact your system
				// '                    '' administrator.
				// '                    ' ''
				// '                    ''const SEC_E_ISSUING_CA_UNTRUSTED       _HRESULT_TYPEDEF_(= &h80090352L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_REVOCATION_OFFLINE_C
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The revocation status of the smartcard certificate used for
				// '                    '' authentication could not be determined. Please contact your system administrator.
				// '                    ' ''
				// '                    ''const SEC_E_REVOCATION_OFFLINE_C       _HRESULT_TYPEDEF_(= &h80090353L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_PKINIT_CLIENT_FAILURE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The smartcard certificate used for authentication was not trusted.  Please
				// '                    '' contact your system administrator.
				// '                    ' ''
				// '                    ''const SEC_E_PKINIT_CLIENT_FAILURE      _HRESULT_TYPEDEF_(= &h80090354L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_SMARTCARD_CERT_EXPIRED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The smartcard certificate used for authentication has expired.  Please
				// '                    '' contact your system administrator.
				// '                    ' ''
				// '                    ''const SEC_E_SMARTCARD_CERT_EXPIRED     _HRESULT_TYPEDEF_(= &h80090355L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_NO_S4U_PROT_SUPPORT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The Kerberos subsystem encountered an error.  A service for user protocol request was made 
				// '                    '' against a domain controller which does not support service for user.
				// '                    ' ''
				// '                    ''const SEC_E_NO_S4U_PROT_SUPPORT        _HRESULT_TYPEDEF_(= &h80090356L)

				// '                    ' ''
				// '                    ''MessageId: SEC_E_CROSSREALM_DELEGATION_FAILURE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An attempt was made by this server to make a Kerberos constrained delegation request for a target
				// '                    '' outside of the server's realm.  This is not supported, and indicates a misconfiguration on this
				// '                    '' server's allowed to delegate to list.  Please contact your administrator.
				// '                    ' ''
				// '                    ''const SEC_E_CROSSREALM_DELEGATION_FAILURE _HRESULT_TYPEDEF_(= &h80090357L)

				// '                    ' ''
				// '                    ''Provided for backwards compatibility
				// '                    ' ''

				// '                    ''const SEC_E_NO_SPM SEC_E_INTERNAL_ERROR
				// '                    ''const SEC_E_NOT_SUPPORTED SEC_E_UNSUPPORTED_FUNCTION

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_MSG_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An error occurred while performing an operation on a cryptographic message.
				// '                    ' ''
				// '                    ''const CRYPT_E_MSG_ERROR                _HRESULT_TYPEDEF_(= &h80091001L)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_UNKNOWN_ALGO
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unknown cryptographic algorithm.
				// '                    ' ''
				// '                    ''const CRYPT_E_UNKNOWN_ALGO             _HRESULT_TYPEDEF_(= &h80091002L)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_OID_FORMAT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The object identifier is poorly formatted.
				// '                    ' ''
				// '                    ''const CRYPT_E_OID_FORMAT               _HRESULT_TYPEDEF_(= &h80091003L)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_INVALID_MSG_TYPE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid cryptographic message type.
				// '                    ' ''
				// '                    ''const CRYPT_E_INVALID_MSG_TYPE         _HRESULT_TYPEDEF_(= &h80091004L)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_UNEXPECTED_ENCODING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unexpected cryptographic message encoding.
				// '                    ' ''
				// '                    ''const CRYPT_E_UNEXPECTED_ENCODING      _HRESULT_TYPEDEF_(= &h80091005L)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_AUTH_ATTR_MISSING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cryptographic message does not contain an expected authenticated attribute.
				// '                    ' ''
				// '                    ''const CRYPT_E_AUTH_ATTR_MISSING        _HRESULT_TYPEDEF_(= &h80091006L)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_HASH_VALUE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The hash value is not correct.
				// '                    ' ''
				// '                    ''const CRYPT_E_HASH_VALUE               _HRESULT_TYPEDEF_(= &h80091007L)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_INVALID_INDEX
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The index value is not valid.
				// '                    ' ''
				// '                    ''const CRYPT_E_INVALID_INDEX            _HRESULT_TYPEDEF_(= &h80091008L)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_ALREADY_DECRYPTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The content of the cryptographic message has already been decrypted.
				// '                    ' ''
				// '                    ''const CRYPT_E_ALREADY_DECRYPTED        _HRESULT_TYPEDEF_(= &h80091009L)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_NOT_DECRYPTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The content of the cryptographic message has not been decrypted yet.
				// '                    ' ''
				// '                    ''const CRYPT_E_NOT_DECRYPTED            _HRESULT_TYPEDEF_(= &h8009100AL)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_RECIPIENT_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The enveloped-data message does not contain the specified recipient.
				// '                    ' ''
				// '                    ''const CRYPT_E_RECIPIENT_NOT_FOUND      _HRESULT_TYPEDEF_(= &h8009100BL)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_CONTROL_TYPE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid control type.
				// '                    ' ''
				// '                    ''const CRYPT_E_CONTROL_TYPE             _HRESULT_TYPEDEF_(= &h8009100CL)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_ISSUER_SERIALNUMBER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid issuer and/or serial number.
				// '                    ' ''
				// '                    ''const CRYPT_E_ISSUER_SERIALNUMBER      _HRESULT_TYPEDEF_(= &h8009100DL)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_SIGNER_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Cannot find the original signer.
				// '                    ' ''
				// '                    ''const CRYPT_E_SIGNER_NOT_FOUND         _HRESULT_TYPEDEF_(= &h8009100EL)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_ATTRIBUTES_MISSING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cryptographic message does not contain all of the requested attributes.
				// '                    ' ''
				// '                    ''const CRYPT_E_ATTRIBUTES_MISSING       _HRESULT_TYPEDEF_(= &h8009100FL)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_STREAM_MSG_NOT_READY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The streamed cryptographic message is not ready to return data.
				// '                    ' ''
				// '                    ''const CRYPT_E_STREAM_MSG_NOT_READY     _HRESULT_TYPEDEF_(= &h80091010L)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_STREAM_INSUFFICIENT_DATA
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The streamed cryptographic message requires more data to complete the decode operation.
				// '                    ' ''
				// '                    ''const CRYPT_E_STREAM_INSUFFICIENT_DATA _HRESULT_TYPEDEF_(= &h80091011L)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_I_NEW_PROTECTION_REQUIRED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The protected data needs to be re-protected.
				// '                    ' ''
				// '                    ''const CRYPT_I_NEW_PROTECTION_REQUIRED  _HRESULT_TYPEDEF_(= &h00091012L)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_BAD_LEN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The length specified for the output data was insufficient.
				// '                    ' ''
				// '                    ''const CRYPT_E_BAD_LEN                  _HRESULT_TYPEDEF_(= &h80092001L)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_BAD_ENCODE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An error occurred during encode or decode operation.
				// '                    ' ''
				// '                    ''const CRYPT_E_BAD_ENCODE               _HRESULT_TYPEDEF_(= &h80092002L)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_FILE_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An error occurred while reading or writing to a file.
				// '                    ' ''
				// '                    ''const CRYPT_E_FILE_ERROR               _HRESULT_TYPEDEF_(= &h80092003L)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Cannot find object or property.
				// '                    ' ''
				// '                    ''const CRYPT_E_NOT_FOUND                _HRESULT_TYPEDEF_(= &h80092004L)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_EXISTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The object or property already exists.
				// '                    ' ''
				// '                    ''const CRYPT_E_EXISTS                   _HRESULT_TYPEDEF_(= &h80092005L)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_NO_PROVIDER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' No provider was specified for the store or object.
				// '                    ' ''
				// '                    ''const CRYPT_E_NO_PROVIDER              _HRESULT_TYPEDEF_(= &h80092006L)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_SELF_SIGNED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified certificate is self signed.
				// '                    ' ''
				// '                    ''const CRYPT_E_SELF_SIGNED              _HRESULT_TYPEDEF_(= &h80092007L)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_DELETED_PREV
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The previous certificate or CRL context was deleted.
				// '                    ' ''
				// '                    ''const CRYPT_E_DELETED_PREV             _HRESULT_TYPEDEF_(= &h80092008L)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_NO_MATCH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Cannot find the requested object.
				// '                    ' ''
				// '                    ''const CRYPT_E_NO_MATCH                 _HRESULT_TYPEDEF_(= &h80092009L)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_UNEXPECTED_MSG_TYPE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The certificate does not have a property that references a private key.
				// '                    ' ''
				// '                    ''const CRYPT_E_UNEXPECTED_MSG_TYPE      _HRESULT_TYPEDEF_(= &h8009200AL)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_NO_KEY_PROPERTY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Cannot find the certificate and private key for decryption.
				// '                    ' ''
				// '                    ''const CRYPT_E_NO_KEY_PROPERTY          _HRESULT_TYPEDEF_(= &h8009200BL)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_NO_DECRYPT_CERT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Cannot find the certificate and private key to use for decryption.
				// '                    ' ''
				// '                    ''const CRYPT_E_NO_DECRYPT_CERT          _HRESULT_TYPEDEF_(= &h8009200CL)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_BAD_MSG
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Not a cryptographic message or the cryptographic message is not formatted correctly.
				// '                    ' ''
				// '                    ''const CRYPT_E_BAD_MSG                  _HRESULT_TYPEDEF_(= &h8009200DL)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_NO_SIGNER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The signed cryptographic message does not have a signer for the specified signer index.
				// '                    ' ''
				// '                    ''const CRYPT_E_NO_SIGNER                _HRESULT_TYPEDEF_(= &h8009200EL)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_PENDING_CLOSE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Final closure is pending until additional frees or closes.
				// '                    ' ''
				// '                    ''const CRYPT_E_PENDING_CLOSE            _HRESULT_TYPEDEF_(= &h8009200FL)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_REVOKED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The certificate is revoked.
				// '                    ' ''
				// '                    ''const CRYPT_E_REVOKED                  _HRESULT_TYPEDEF_(= &h80092010L)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_NO_REVOCATION_DLL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' No Dll or exported function was found to verify revocation.
				// '                    ' ''
				// '                    ''const CRYPT_E_NO_REVOCATION_DLL        _HRESULT_TYPEDEF_(= &h80092011L)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_NO_REVOCATION_CHECK
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The revocation function was unable to check revocation for the certificate.
				// '                    ' ''
				// '                    ''const CRYPT_E_NO_REVOCATION_CHECK      _HRESULT_TYPEDEF_(= &h80092012L)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_REVOCATION_OFFLINE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The revocation function was unable to check revocation because the revocation server was offline.
				// '                    ' ''
				// '                    ''const CRYPT_E_REVOCATION_OFFLINE       _HRESULT_TYPEDEF_(= &h80092013L)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_NOT_IN_REVOCATION_DATABASE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The certificate is not in the revocation server's database.
				// '                    ' ''
				// '                    ''const CRYPT_E_NOT_IN_REVOCATION_DATABASE _HRESULT_TYPEDEF_(= &h80092014L)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_INVALID_NUMERIC_STRING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The string contains a non-numeric character.
				// '                    ' ''
				// '                    ''const CRYPT_E_INVALID_NUMERIC_STRING   _HRESULT_TYPEDEF_(= &h80092020L)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_INVALID_PRINTABLE_STRING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The string contains a non-printable character.
				// '                    ' ''
				// '                    ''const CRYPT_E_INVALID_PRINTABLE_STRING _HRESULT_TYPEDEF_(= &h80092021L)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_INVALID_IA5_STRING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The string contains a character not in the 7 bit ASCII character set.
				// '                    ' ''
				// '                    ''const CRYPT_E_INVALID_IA5_STRING       _HRESULT_TYPEDEF_(= &h80092022L)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_INVALID_X500_STRING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The string contains an invalid X500 name attribute key, oid, value or delimiter.
				// '                    ' ''
				// '                    ''const CRYPT_E_INVALID_X500_STRING      _HRESULT_TYPEDEF_(= &h80092023L)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_NOT_CHAR_STRING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The dwValueType for the CERT_NAME_VALUE is not one of the character strings.  Most likely it is either a CERT_RDN_ENCODED_BLOB or CERT_TDN_OCTED_STRING.
				// '                    ' ''
				// '                    ''const CRYPT_E_NOT_CHAR_STRING          _HRESULT_TYPEDEF_(= &h80092024L)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_FILERESIZED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The Put operation can not continue.  The file needs to be resized.  However, there is already a signature present.  A complete signing operation must be done.
				// '                    ' ''
				// '                    ''const CRYPT_E_FILERESIZED              _HRESULT_TYPEDEF_(= &h80092025L)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_SECURITY_SETTINGS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The cryptographic operation failed due to a local security option setting.
				// '                    ' ''
				// '                    ''const CRYPT_E_SECURITY_SETTINGS        _HRESULT_TYPEDEF_(= &h80092026L)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_NO_VERIFY_USAGE_DLL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' No DLL or exported function was found to verify subject usage.
				// '                    ' ''
				// '                    ''const CRYPT_E_NO_VERIFY_USAGE_DLL      _HRESULT_TYPEDEF_(= &h80092027L)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_NO_VERIFY_USAGE_CHECK
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The called function was unable to do a usage check on the subject.
				// '                    ' ''
				// '                    ''const CRYPT_E_NO_VERIFY_USAGE_CHECK    _HRESULT_TYPEDEF_(= &h80092028L)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_VERIFY_USAGE_OFFLINE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Since the server was offline, the called function was unable to complete the usage check.
				// '                    ' ''
				// '                    ''const CRYPT_E_VERIFY_USAGE_OFFLINE     _HRESULT_TYPEDEF_(= &h80092029L)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_NOT_IN_CTL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The subject was not found in a Certificate Trust List (CTL).
				// '                    ' ''
				// '                    ''const CRYPT_E_NOT_IN_CTL               _HRESULT_TYPEDEF_(= &h8009202AL)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_NO_TRUSTED_SIGNER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' None of the signers of the cryptographic message or certificate trust list is trusted.
				// '                    ' ''
				// '                    ''const CRYPT_E_NO_TRUSTED_SIGNER        _HRESULT_TYPEDEF_(= &h8009202BL)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_MISSING_PUBKEY_PARA
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The public key's algorithm parameters are missing.
				// '                    ' ''
				// '                    ''const CRYPT_E_MISSING_PUBKEY_PARA      _HRESULT_TYPEDEF_(= &h8009202CL)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_OSS_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OSS Certificate encode/decode error code base
				// '                    '' 
				// '                    '' See asn1code.h for a definition of the OSS runtime errors. The OSS
				// '                    '' error values are offset by CRYPT_E_OSS_ERROR.
				// '                    ' ''
				// '                    ''const CRYPT_E_OSS_ERROR                _HRESULT_TYPEDEF_(= &h80093000L)

				// '                    ' ''
				// '                    ''MessageId: OSS_MORE_BUF
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OSS ASN.1 Error: Output Buffer is too small.
				// '                    ' ''
				// '                    ''const OSS_MORE_BUF                     _HRESULT_TYPEDEF_(= &h80093001L)

				// '                    ' ''
				// '                    ''MessageId: OSS_NEGATIVE_UINTEGER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OSS ASN.1 Error: Signed integer is encoded as a unsigned integer.
				// '                    ' ''
				// '                    ''const OSS_NEGATIVE_UINTEGER            _HRESULT_TYPEDEF_(= &h80093002L)

				// '                    ' ''
				// '                    ''MessageId: OSS_PDU_RANGE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OSS ASN.1 Error: Unknown ASN.1 data type.
				// '                    ' ''
				// '                    ''const OSS_PDU_RANGE                    _HRESULT_TYPEDEF_(= &h80093003L)

				// '                    ' ''
				// '                    ''MessageId: OSS_MORE_INPUT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OSS ASN.1 Error: Output buffer is too small, the decoded data has been truncated.
				// '                    ' ''
				// '                    ''const OSS_MORE_INPUT                   _HRESULT_TYPEDEF_(= &h80093004L)

				// '                    ' ''
				// '                    ''MessageId: OSS_DATA_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OSS ASN.1 Error: Invalid data.
				// '                    ' ''
				// '                    ''const OSS_DATA_ERROR                   _HRESULT_TYPEDEF_(= &h80093005L)

				// '                    ' ''
				// '                    ''MessageId: OSS_BAD_ARG
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OSS ASN.1 Error: Invalid argument.
				// '                    ' ''
				// '                    ''const OSS_BAD_ARG                      _HRESULT_TYPEDEF_(= &h80093006L)

				// '                    ' ''
				// '                    ''MessageId: OSS_BAD_VERSION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OSS ASN.1 Error: Encode/Decode version mismatch.
				// '                    ' ''
				// '                    ''const OSS_BAD_VERSION                  _HRESULT_TYPEDEF_(= &h80093007L)

				// '                    ' ''
				// '                    ''MessageId: OSS_OUT_MEMORY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OSS ASN.1 Error: [Out ] of memory.
				// '                    ' ''
				// '                    ''const OSS_OUT_MEMORY                   _HRESULT_TYPEDEF_(= &h80093008L)

				// '                    ' ''
				// '                    ''MessageId: OSS_PDU_MISMATCH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OSS ASN.1 Error: Encode/Decode Error.
				// '                    ' ''
				// '                    ''const OSS_PDU_MISMATCH                 _HRESULT_TYPEDEF_(= &h80093009L)

				// '                    ' ''
				// '                    ''MessageId: OSS_LIMITED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OSS ASN.1 Error: Internal Error.
				// '                    ' ''
				// '                    ''const OSS_LIMITED                      _HRESULT_TYPEDEF_(= &h8009300AL)

				// '                    ' ''
				// '                    ''MessageId: OSS_BAD_PTR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OSS ASN.1 Error: Invalid data.
				// '                    ' ''
				// '                    ''const OSS_BAD_PTR                      _HRESULT_TYPEDEF_(= &h8009300BL)

				// '                    ' ''
				// '                    ''MessageId: OSS_BAD_TIME
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OSS ASN.1 Error: Invalid data.
				// '                    ' ''
				// '                    ''const OSS_BAD_TIME                     _HRESULT_TYPEDEF_(= &h8009300CL)

				// '                    ' ''
				// '                    ''MessageId: OSS_INDEFINITE_NOT_SUPPORTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OSS ASN.1 Error: Unsupported BER indefinite-length encoding.
				// '                    ' ''
				// '                    ''const OSS_INDEFINITE_NOT_SUPPORTED     _HRESULT_TYPEDEF_(= &h8009300DL)

				// '                    ' ''
				// '                    ''MessageId: OSS_MEM_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OSS ASN.1 Error: Access violation.
				// '                    ' ''
				// '                    ''const OSS_MEM_ERROR                    _HRESULT_TYPEDEF_(= &h8009300EL)

				// '                    ' ''
				// '                    ''MessageId: OSS_BAD_TABLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OSS ASN.1 Error: Invalid data.
				// '                    ' ''
				// '                    ''const OSS_BAD_TABLE                    _HRESULT_TYPEDEF_(= &h8009300FL)

				// '                    ' ''
				// '                    ''MessageId: OSS_TOO_LONG
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OSS ASN.1 Error: Invalid data.
				// '                    ' ''
				// '                    ''const OSS_TOO_LONG                     _HRESULT_TYPEDEF_(= &h80093010L)

				// '                    ' ''
				// '                    ''MessageId: OSS_CONSTRAINT_VIOLATED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OSS ASN.1 Error: Invalid data.
				// '                    ' ''
				// '                    ''const OSS_CONSTRAINT_VIOLATED          _HRESULT_TYPEDEF_(= &h80093011L)

				// '                    ' ''
				// '                    ''MessageId: OSS_FATAL_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OSS ASN.1 Error: Internal Error.
				// '                    ' ''
				// '                    ''const OSS_FATAL_ERROR                  _HRESULT_TYPEDEF_(= &h80093012L)

				// '                    ' ''
				// '                    ''MessageId: OSS_ACCESS_SERIALIZATION_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OSS ASN.1 Error: Multi-threading conflict.
				// '                    ' ''
				// '                    ''const OSS_ACCESS_SERIALIZATION_ERROR   _HRESULT_TYPEDEF_(= &h80093013L)

				// '                    ' ''
				// '                    ''MessageId: OSS_NULL_TBL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OSS ASN.1 Error: Invalid data.
				// '                    ' ''
				// '                    ''const OSS_NULL_TBL                     _HRESULT_TYPEDEF_(= &h80093014L)

				// '                    ' ''
				// '                    ''MessageId: OSS_NULL_FCN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OSS ASN.1 Error: Invalid data.
				// '                    ' ''
				// '                    ''const OSS_NULL_FCN                     _HRESULT_TYPEDEF_(= &h80093015L)

				// '                    ' ''
				// '                    ''MessageId: OSS_BAD_ENCRULES
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OSS ASN.1 Error: Invalid data.
				// '                    ' ''
				// '                    ''const OSS_BAD_ENCRULES                 _HRESULT_TYPEDEF_(= &h80093016L)

				// '                    ' ''
				// '                    ''MessageId: OSS_UNAVAIL_ENCRULES
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OSS ASN.1 Error: Encode/Decode function not implemented.
				// '                    ' ''
				// '                    ''const OSS_UNAVAIL_ENCRULES             _HRESULT_TYPEDEF_(= &h80093017L)

				// '                    ' ''
				// '                    ''MessageId: OSS_CANT_OPEN_TRACE_WINDOW
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OSS ASN.1 Error: Trace file error.
				// '                    ' ''
				// '                    ''const OSS_CANT_OPEN_TRACE_WINDOW       _HRESULT_TYPEDEF_(= &h80093018L)

				// '                    ' ''
				// '                    ''MessageId: OSS_UNIMPLEMENTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OSS ASN.1 Error: Function not implemented.
				// '                    ' ''
				// '                    ''const OSS_UNIMPLEMENTED                _HRESULT_TYPEDEF_(= &h80093019L)

				// '                    ' ''
				// '                    ''MessageId: OSS_OID_DLL_NOT_LINKED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OSS ASN.1 Error: Program link error.
				// '                    ' ''
				// '                    ''const OSS_OID_DLL_NOT_LINKED           _HRESULT_TYPEDEF_(= &h8009301AL)

				// '                    ' ''
				// '                    ''MessageId: OSS_CANT_OPEN_TRACE_FILE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OSS ASN.1 Error: Trace file error.
				// '                    ' ''
				// '                    ''const OSS_CANT_OPEN_TRACE_FILE         _HRESULT_TYPEDEF_(= &h8009301BL)

				// '                    ' ''
				// '                    ''MessageId: OSS_TRACE_FILE_ALREADY_OPEN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OSS ASN.1 Error: Trace file error.
				// '                    ' ''
				// '                    ''const OSS_TRACE_FILE_ALREADY_OPEN      _HRESULT_TYPEDEF_(= &h8009301CL)

				// '                    ' ''
				// '                    ''MessageId: OSS_TABLE_MISMATCH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OSS ASN.1 Error: Invalid data.
				// '                    ' ''
				// '                    ''const OSS_TABLE_MISMATCH               _HRESULT_TYPEDEF_(= &h8009301DL)

				// '                    ' ''
				// '                    ''MessageId: OSS_TYPE_NOT_SUPPORTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OSS ASN.1 Error: Invalid data.
				// '                    ' ''
				// '                    ''const OSS_TYPE_NOT_SUPPORTED           _HRESULT_TYPEDEF_(= &h8009301EL)

				// '                    ' ''
				// '                    ''MessageId: OSS_REAL_DLL_NOT_LINKED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OSS ASN.1 Error: Program link error.
				// '                    ' ''
				// '                    ''const OSS_REAL_DLL_NOT_LINKED          _HRESULT_TYPEDEF_(= &h8009301FL)

				// '                    ' ''
				// '                    ''MessageId: OSS_REAL_CODE_NOT_LINKED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OSS ASN.1 Error: Program link error.
				// '                    ' ''
				// '                    ''const OSS_REAL_CODE_NOT_LINKED         _HRESULT_TYPEDEF_(= &h80093020L)

				// '                    ' ''
				// '                    ''MessageId: OSS_OUT_OF_RANGE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OSS ASN.1 Error: Program link error.
				// '                    ' ''
				// '                    ''const OSS_OUT_OF_RANGE                 _HRESULT_TYPEDEF_(= &h80093021L)

				// '                    ' ''
				// '                    ''MessageId: OSS_COPIER_DLL_NOT_LINKED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OSS ASN.1 Error: Program link error.
				// '                    ' ''
				// '                    ''const OSS_COPIER_DLL_NOT_LINKED        _HRESULT_TYPEDEF_(= &h80093022L)

				// '                    ' ''
				// '                    ''MessageId: OSS_CONSTRAINT_DLL_NOT_LINKED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OSS ASN.1 Error: Program link error.
				// '                    ' ''
				// '                    ''const OSS_CONSTRAINT_DLL_NOT_LINKED    _HRESULT_TYPEDEF_(= &h80093023L)

				// '                    ' ''
				// '                    ''MessageId: OSS_COMPARATOR_DLL_NOT_LINKED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OSS ASN.1 Error: Program link error.
				// '                    ' ''
				// '                    ''const OSS_COMPARATOR_DLL_NOT_LINKED    _HRESULT_TYPEDEF_(= &h80093024L)

				// '                    ' ''
				// '                    ''MessageId: OSS_COMPARATOR_CODE_NOT_LINKED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OSS ASN.1 Error: Program link error.
				// '                    ' ''
				// '                    ''const OSS_COMPARATOR_CODE_NOT_LINKED   _HRESULT_TYPEDEF_(= &h80093025L)

				// '                    ' ''
				// '                    ''MessageId: OSS_MEM_MGR_DLL_NOT_LINKED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OSS ASN.1 Error: Program link error.
				// '                    ' ''
				// '                    ''const OSS_MEM_MGR_DLL_NOT_LINKED       _HRESULT_TYPEDEF_(= &h80093026L)

				// '                    ' ''
				// '                    ''MessageId: OSS_PDV_DLL_NOT_LINKED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OSS ASN.1 Error: Program link error.
				// '                    ' ''
				// '                    ''const OSS_PDV_DLL_NOT_LINKED           _HRESULT_TYPEDEF_(= &h80093027L)

				// '                    ' ''
				// '                    ''MessageId: OSS_PDV_CODE_NOT_LINKED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OSS ASN.1 Error: Program link error.
				// '                    ' ''
				// '                    ''const OSS_PDV_CODE_NOT_LINKED          _HRESULT_TYPEDEF_(= &h80093028L)

				// '                    ' ''
				// '                    ''MessageId: OSS_API_DLL_NOT_LINKED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OSS ASN.1 Error: Program link error.
				// '                    ' ''
				// '                    ''const OSS_API_DLL_NOT_LINKED           _HRESULT_TYPEDEF_(= &h80093029L)

				// '                    ' ''
				// '                    ''MessageId: OSS_BERDER_DLL_NOT_LINKED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OSS ASN.1 Error: Program link error.
				// '                    ' ''
				// '                    ''const OSS_BERDER_DLL_NOT_LINKED        _HRESULT_TYPEDEF_(= &h8009302AL)

				// '                    ' ''
				// '                    ''MessageId: OSS_PER_DLL_NOT_LINKED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OSS ASN.1 Error: Program link error.
				// '                    ' ''
				// '                    ''const OSS_PER_DLL_NOT_LINKED           _HRESULT_TYPEDEF_(= &h8009302BL)

				// '                    ' ''
				// '                    ''MessageId: OSS_OPEN_TYPE_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OSS ASN.1 Error: Program link error.
				// '                    ' ''
				// '                    ''const OSS_OPEN_TYPE_ERROR              _HRESULT_TYPEDEF_(= &h8009302CL)

				// '                    ' ''
				// '                    ''MessageId: OSS_MUTEX_NOT_CREATED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OSS ASN.1 Error: System resource error.
				// '                    ' ''
				// '                    ''const OSS_MUTEX_NOT_CREATED            _HRESULT_TYPEDEF_(= &h8009302DL)

				// '                    ' ''
				// '                    ''MessageId: OSS_CANT_CLOSE_TRACE_FILE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' OSS ASN.1 Error: Trace file error.
				// '                    ' ''
				// '                    ''const OSS_CANT_CLOSE_TRACE_FILE        _HRESULT_TYPEDEF_(= &h8009302EL)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_ASN1_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' ASN1 Certificate encode/decode error code base.
				// '                    '' 
				// '                    '' The ASN1 error values are offset by CRYPT_E_ASN1_ERROR.
				// '                    ' ''
				// '                    ''const CRYPT_E_ASN1_ERROR               _HRESULT_TYPEDEF_(= &h80093100L)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_ASN1_INTERNAL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' ASN1 internal encode or decode error.
				// '                    ' ''
				// '                    ''const CRYPT_E_ASN1_INTERNAL            _HRESULT_TYPEDEF_(= &h80093101L)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_ASN1_EOD
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' ASN1 unexpected end of data.
				// '                    ' ''
				// '                    ''const CRYPT_E_ASN1_EOD                 _HRESULT_TYPEDEF_(= &h80093102L)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_ASN1_CORRUPT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' ASN1 corrupted data.
				// '                    ' ''
				// '                    ''const CRYPT_E_ASN1_CORRUPT             _HRESULT_TYPEDEF_(= &h80093103L)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_ASN1_LARGE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' ASN1 value too large.
				// '                    ' ''
				// '                    ''const CRYPT_E_ASN1_LARGE               _HRESULT_TYPEDEF_(= &h80093104L)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_ASN1_CONSTRAINT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' ASN1 constraint violated.
				// '                    ' ''
				// '                    ''const CRYPT_E_ASN1_CONSTRAINT          _HRESULT_TYPEDEF_(= &h80093105L)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_ASN1_MEMORY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' ASN1 [Out ] of memory.
				// '                    ' ''
				// '                    ''const CRYPT_E_ASN1_MEMORY              _HRESULT_TYPEDEF_(= &h80093106L)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_ASN1_OVERFLOW
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' ASN1 buffer overflow.
				// '                    ' ''
				// '                    ''const CRYPT_E_ASN1_OVERFLOW            _HRESULT_TYPEDEF_(= &h80093107L)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_ASN1_BADPDU
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' ASN1 function not supported for this PDU.
				// '                    ' ''
				// '                    ''const CRYPT_E_ASN1_BADPDU              _HRESULT_TYPEDEF_(= &h80093108L)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_ASN1_BADARGS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' ASN1 bad arguments to function call.
				// '                    ' ''
				// '                    ''const CRYPT_E_ASN1_BADARGS             _HRESULT_TYPEDEF_(= &h80093109L)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_ASN1_BADREAL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' ASN1 bad real value.
				// '                    ' ''
				// '                    ''const CRYPT_E_ASN1_BADREAL             _HRESULT_TYPEDEF_(= &h8009310AL)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_ASN1_BADTAG
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' ASN1 bad tag value met.
				// '                    ' ''
				// '                    ''const CRYPT_E_ASN1_BADTAG              _HRESULT_TYPEDEF_(= &h8009310BL)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_ASN1_CHOICE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' ASN1 bad choice value.
				// '                    ' ''
				// '                    ''const CRYPT_E_ASN1_CHOICE              _HRESULT_TYPEDEF_(= &h8009310CL)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_ASN1_RULE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' ASN1 bad encoding rule.
				// '                    ' ''
				// '                    ''const CRYPT_E_ASN1_RULE                _HRESULT_TYPEDEF_(= &h8009310DL)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_ASN1_UTF8
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' ASN1 bad unicode (UTF8).
				// '                    ' ''
				// '                    ''const CRYPT_E_ASN1_UTF8                _HRESULT_TYPEDEF_(= &h8009310EL)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_ASN1_PDU_TYPE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' ASN1 bad PDU type.
				// '                    ' ''
				// '                    ''const CRYPT_E_ASN1_PDU_TYPE            _HRESULT_TYPEDEF_(= &h80093133L)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_ASN1_NYI
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' ASN1 not yet implemented.
				// '                    ' ''
				// '                    ''const CRYPT_E_ASN1_NYI                 _HRESULT_TYPEDEF_(= &h80093134L)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_ASN1_EXTENDED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' ASN1 skipped unknown extension(s).
				// '                    ' ''
				// '                    ''const CRYPT_E_ASN1_EXTENDED            _HRESULT_TYPEDEF_(= &h80093201L)

				// '                    ' ''
				// '                    ''MessageId: CRYPT_E_ASN1_NOEOD
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' ASN1 end of data expected
				// '                    ' ''
				// '                    ''const CRYPT_E_ASN1_NOEOD               _HRESULT_TYPEDEF_(= &h80093202L)

				// '                    ' ''
				// '                    ''MessageId: CERTSRV_E_BAD_REQUESTSUBJECT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The request subject name is invalid or too long.
				// '                    ' ''
				// '                    ''const CERTSRV_E_BAD_REQUESTSUBJECT     _HRESULT_TYPEDEF_(= &h80094001L)

				// '                    ' ''
				// '                    ''MessageId: CERTSRV_E_NO_REQUEST
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The request does not exist.
				// '                    ' ''
				// '                    ''const CERTSRV_E_NO_REQUEST             _HRESULT_TYPEDEF_(= &h80094002L)

				// '                    ' ''
				// '                    ''MessageId: CERTSRV_E_BAD_REQUESTSTATUS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The request's current status does not allow this operation.
				// '                    ' ''
				// '                    ''const CERTSRV_E_BAD_REQUESTSTATUS      _HRESULT_TYPEDEF_(= &h80094003L)

				// '                    ' ''
				// '                    ''MessageId: CERTSRV_E_PROPERTY_EMPTY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested property value is empty.
				// '                    ' ''
				// '                    ''const CERTSRV_E_PROPERTY_EMPTY         _HRESULT_TYPEDEF_(= &h80094004L)

				// '                    ' ''
				// '                    ''MessageId: CERTSRV_E_INVALID_CA_CERTIFICATE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The certification authority's certificate contains invalid data.
				// '                    ' ''
				// '                    ''const CERTSRV_E_INVALID_CA_CERTIFICATE _HRESULT_TYPEDEF_(= &h80094005L)

				// '                    ' ''
				// '                    ''MessageId: CERTSRV_E_SERVER_SUSPENDED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Certificate service has been suspended for a database restore operation.
				// '                    ' ''
				// '                    ''const CERTSRV_E_SERVER_SUSPENDED       _HRESULT_TYPEDEF_(= &h80094006L)

				// '                    ' ''
				// '                    ''MessageId: CERTSRV_E_ENCODING_LENGTH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The certificate contains an encoded length that is potentially incompatible with older enrollment software.
				// '                    ' ''
				// '                    ''const CERTSRV_E_ENCODING_LENGTH        _HRESULT_TYPEDEF_(= &h80094007L)

				// '                    ' ''
				// '                    ''MessageId: CERTSRV_E_ROLECONFLICT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The operation is denied. The user has multiple roles assigned and the certification authority is configured to enforce role separation.
				// '                    ' ''
				// '                    ''const CERTSRV_E_ROLECONFLICT           _HRESULT_TYPEDEF_(= &h80094008L)

				// '                    ' ''
				// '                    ''MessageId: CERTSRV_E_RESTRICTEDOFFICER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The operation is denied. It can only be performed by a certificate manager that is allowed to manage certificates for the current requester.
				// '                    ' ''
				// '                    ''const CERTSRV_E_RESTRICTEDOFFICER      _HRESULT_TYPEDEF_(= &h80094009L)

				// '                    ' ''
				// '                    ''MessageId: CERTSRV_E_KEY_ARCHIVAL_NOT_CONFIGURED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Cannot archive private key.  The certification authority is not configured for key archival.
				// '                    ' ''
				// '                    ''const CERTSRV_E_KEY_ARCHIVAL_NOT_CONFIGURED _HRESULT_TYPEDEF_(= &h8009400AL)

				// '                    ' ''
				// '                    ''MessageId: CERTSRV_E_NO_VALID_KRA
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Cannot archive private key.  The certification authority could not verify one or more key recovery certificates.
				// '                    ' ''
				// '                    ''const CERTSRV_E_NO_VALID_KRA           _HRESULT_TYPEDEF_(= &h8009400BL)

				// '                    ' ''
				// '                    ''MessageId: CERTSRV_E_BAD_REQUEST_KEY_ARCHIVAL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The request is incorrectly formatted.  The encrypted private key must be in an unauthenticated attribute in an outermost signature.
				// '                    ' ''
				// '                    ''const CERTSRV_E_BAD_REQUEST_KEY_ARCHIVAL _HRESULT_TYPEDEF_(= &h8009400CL)

				// '                    ' ''
				// '                    ''MessageId: CERTSRV_E_NO_CAADMIN_DEFINED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' At least one security principal must have the permission to manage this CA.
				// '                    ' ''
				// '                    ''const CERTSRV_E_NO_CAADMIN_DEFINED     _HRESULT_TYPEDEF_(= &h8009400DL)

				// '                    ' ''
				// '                    ''MessageId: CERTSRV_E_BAD_RENEWAL_CERT_ATTRIBUTE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The request contains an invalid renewal certificate attribute.
				// '                    ' ''
				// '                    ''const CERTSRV_E_BAD_RENEWAL_CERT_ATTRIBUTE _HRESULT_TYPEDEF_(= &h8009400EL)

				// '                    ' ''
				// '                    ''MessageId: CERTSRV_E_NO_DB_SESSIONS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An attempt was made to open a Certification Authority database session, but there are already too many active sessions.  The server may need to be configured to allow additional sessions.
				// '                    ' ''
				// '                    ''const CERTSRV_E_NO_DB_SESSIONS         _HRESULT_TYPEDEF_(= &h8009400FL)

				// '                    ' ''
				// '                    ''MessageId: CERTSRV_E_ALIGNMENT_FAULT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A memory reference caused a data alignment fault.
				// '                    ' ''
				// '                    ''const CERTSRV_E_ALIGNMENT_FAULT        _HRESULT_TYPEDEF_(= &h80094010L)

				// '                    ' ''
				// '                    ''MessageId: CERTSRV_E_ENROLL_DENIED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The permissions on this certification authority do not allow the current user to enroll for certificates.
				// '                    ' ''
				// '                    ''const CERTSRV_E_ENROLL_DENIED          _HRESULT_TYPEDEF_(= &h80094011L)

				// '                    ' ''
				// '                    ''MessageId: CERTSRV_E_TEMPLATE_DENIED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The permissions on the certificate template do not allow the current user to enroll for this type of certificate.
				// '                    ' ''
				// '                    ''const CERTSRV_E_TEMPLATE_DENIED        _HRESULT_TYPEDEF_(= &h80094012L)

				// '                    ' ''
				// '                    ''MessageId: CERTSRV_E_DOWNLEVEL_DC_SSL_OR_UPGRADE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The contacted domain controller cannot support signed LDAP traffic.  Update the domain controller or configure Certificate Services to use SSL for Active Directory access.
				// '                    ' ''
				// '                    ''const CERTSRV_E_DOWNLEVEL_DC_SSL_OR_UPGRADE _HRESULT_TYPEDEF_(= &h80094013L)

				// '                    ' ''
				// '                    ''MessageId: CERTSRV_E_UNSUPPORTED_CERT_TYPE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested certificate template is not supported by this CA.
				// '                    ' ''
				// '                    ''const CERTSRV_E_UNSUPPORTED_CERT_TYPE  _HRESULT_TYPEDEF_(= &h80094800L)

				// '                    ' ''
				// '                    ''MessageId: CERTSRV_E_NO_CERT_TYPE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The request contains no certificate template information.
				// '                    ' ''
				// '                    ''const CERTSRV_E_NO_CERT_TYPE           _HRESULT_TYPEDEF_(= &h80094801L)

				// '                    ' ''
				// '                    ''MessageId: CERTSRV_E_TEMPLATE_CONFLICT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The request contains conflicting template information.
				// '                    ' ''
				// '                    ''const CERTSRV_E_TEMPLATE_CONFLICT      _HRESULT_TYPEDEF_(= &h80094802L)

				// '                    ' ''
				// '                    ''MessageId: CERTSRV_E_SUBJECT_ALT_NAME_REQUIRED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The request is missing a required Subject Alternate name extension.
				// '                    ' ''
				// '                    ''const CERTSRV_E_SUBJECT_ALT_NAME_REQUIRED _HRESULT_TYPEDEF_(= &h80094803L)

				// '                    ' ''
				// '                    ''MessageId: CERTSRV_E_ARCHIVED_KEY_REQUIRED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The request is missing a required private key for archival by the server.
				// '                    ' ''
				// '                    ''const CERTSRV_E_ARCHIVED_KEY_REQUIRED  _HRESULT_TYPEDEF_(= &h80094804L)

				// '                    ' ''
				// '                    ''MessageId: CERTSRV_E_SMIME_REQUIRED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The request is missing a required SMIME capabilities extension.
				// '                    ' ''
				// '                    ''const CERTSRV_E_SMIME_REQUIRED         _HRESULT_TYPEDEF_(= &h80094805L)

				// '                    ' ''
				// '                    ''MessageId: CERTSRV_E_BAD_RENEWAL_SUBJECT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The request was made on behalf of a subject other than the caller.  The certificate template must be configured to require at least one signature to authorize the request.
				// '                    ' ''
				// '                    ''const CERTSRV_E_BAD_RENEWAL_SUBJECT    _HRESULT_TYPEDEF_(= &h80094806L)

				// '                    ' ''
				// '                    ''MessageId: CERTSRV_E_BAD_TEMPLATE_VERSION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The request template version is newer than the supported template version.
				// '                    ' ''
				// '                    ''const CERTSRV_E_BAD_TEMPLATE_VERSION   _HRESULT_TYPEDEF_(= &h80094807L)

				// '                    ' ''
				// '                    ''MessageId: CERTSRV_E_TEMPLATE_POLICY_REQUIRED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The template is missing a required signature policy attribute.
				// '                    ' ''
				// '                    ''const CERTSRV_E_TEMPLATE_POLICY_REQUIRED _HRESULT_TYPEDEF_(= &h80094808L)

				// '                    ' ''
				// '                    ''MessageId: CERTSRV_E_SIGNATURE_POLICY_REQUIRED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The request is missing required signature policy information.
				// '                    ' ''
				// '                    ''const CERTSRV_E_SIGNATURE_POLICY_REQUIRED _HRESULT_TYPEDEF_(= &h80094809L)

				// '                    ' ''
				// '                    ''MessageId: CERTSRV_E_SIGNATURE_COUNT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The request is missing one or more required signatures.
				// '                    ' ''
				// '                    ''const CERTSRV_E_SIGNATURE_COUNT        _HRESULT_TYPEDEF_(= &h8009480AL)

				// '                    ' ''
				// '                    ''MessageId: CERTSRV_E_SIGNATURE_REJECTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' One or more signatures did not include the required application or issuance policies.  The request is missing one or more required valid signatures.
				// '                    ' ''
				// '                    ''const CERTSRV_E_SIGNATURE_REJECTED     _HRESULT_TYPEDEF_(= &h8009480BL)

				// '                    ' ''
				// '                    ''MessageId: CERTSRV_E_ISSUANCE_POLICY_REQUIRED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The request is missing one or more required signature issuance policies.
				// '                    ' ''
				// '                    ''const CERTSRV_E_ISSUANCE_POLICY_REQUIRED _HRESULT_TYPEDEF_(= &h8009480CL)

				// '                    ' ''
				// '                    ''MessageId: CERTSRV_E_SUBJECT_UPN_REQUIRED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The UPN is unavailable and cannot be added to the Subject Alternate name.
				// '                    ' ''
				// '                    ''const CERTSRV_E_SUBJECT_UPN_REQUIRED   _HRESULT_TYPEDEF_(= &h8009480DL)

				// '                    ' ''
				// '                    ''MessageId: CERTSRV_E_SUBJECT_DIRECTORY_GUID_REQUIRED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The Active Directory GUID is unavailable and cannot be added to the Subject Alternate name.
				// '                    ' ''
				// '                    ''const CERTSRV_E_SUBJECT_DIRECTORY_GUID_REQUIRED _HRESULT_TYPEDEF_(= &h8009480EL)

				// '                    ' ''
				// '                    ''MessageId: CERTSRV_E_SUBJECT_DNS_REQUIRED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The DNS name is unavailable and cannot be added to the Subject Alternate name.
				// '                    ' ''
				// '                    ''const CERTSRV_E_SUBJECT_DNS_REQUIRED   _HRESULT_TYPEDEF_(= &h8009480FL)

				// '                    ' ''
				// '                    ''MessageId: CERTSRV_E_ARCHIVED_KEY_UNEXPECTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The request includes a private key for archival by the server, but key archival is not enabled for the specified certificate template.
				// '                    ' ''
				// '                    ''const CERTSRV_E_ARCHIVED_KEY_UNEXPECTED _HRESULT_TYPEDEF_(= &h80094810L)

				// '                    ' ''
				// '                    ''MessageId: CERTSRV_E_KEY_LENGTH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The public key does not meet the minimum size required by the specified certificate template.
				// '                    ' ''
				// '                    ''const CERTSRV_E_KEY_LENGTH             _HRESULT_TYPEDEF_(= &h80094811L)

				// '                    ' ''
				// '                    ''MessageId: CERTSRV_E_SUBJECT_EMAIL_REQUIRED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The EMail name is unavailable and cannot be added to the Subject or Subject Alternate name.
				// '                    ' ''
				// '                    ''const CERTSRV_E_SUBJECT_EMAIL_REQUIRED _HRESULT_TYPEDEF_(= &h80094812L)

				// '                    ' ''
				// '                    ''MessageId: CERTSRV_E_UNKNOWN_CERT_TYPE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' One or more certificate templates to be enabled on this certification authority could not be found.
				// '                    ' ''
				// '                    ''const CERTSRV_E_UNKNOWN_CERT_TYPE      _HRESULT_TYPEDEF_(= &h80094813L)

				// '                    ' ''
				// '                    ''MessageId: CERTSRV_E_CERT_TYPE_OVERLAP
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The certificate template renewal period is longer than the certificate validity period.  The template should be reconfigured or the CA certificate renewed.
				// '                    ' ''
				// '                    ''const CERTSRV_E_CERT_TYPE_OVERLAP      _HRESULT_TYPEDEF_(= &h80094814L)

				// '                    ' ''
				// '                    ''The range = &h5000-= &h51ff is reserved for XENROLL errors.
				// '                    ' ''
				// '                    ' ''
				// '                    ''MessageId: XENROLL_E_KEY_NOT_EXPORTABLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The key is not exportable.
				// '                    ' ''
				// '                    ''const XENROLL_E_KEY_NOT_EXPORTABLE     _HRESULT_TYPEDEF_(= &h80095000L)

				// '                    ' ''
				// '                    ''MessageId: XENROLL_E_CANNOT_ADD_ROOT_CERT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' You cannot add the root CA certificate into your local store.
				// '                    ' ''
				// '                    ''const XENROLL_E_CANNOT_ADD_ROOT_CERT   _HRESULT_TYPEDEF_(= &h80095001L)

				// '                    ' ''
				// '                    ''MessageId: XENROLL_E_RESPONSE_KA_HASH_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The key archival hash attribute was not found in the response.
				// '                    ' ''
				// '                    ''const XENROLL_E_RESPONSE_KA_HASH_NOT_FOUND _HRESULT_TYPEDEF_(= &h80095002L)

				// '                    ' ''
				// '                    ''MessageId: XENROLL_E_RESPONSE_UNEXPECTED_KA_HASH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An unexpected key archival hash attribute was found in the response.
				// '                    ' ''
				// '                    ''const XENROLL_E_RESPONSE_UNEXPECTED_KA_HASH _HRESULT_TYPEDEF_(= &h80095003L)

				// '                    ' ''
				// '                    ''MessageId: XENROLL_E_RESPONSE_KA_HASH_MISMATCH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' There is a key archival hash mismatch between the request and the response.
				// '                    ' ''
				// '                    ''const XENROLL_E_RESPONSE_KA_HASH_MISMATCH _HRESULT_TYPEDEF_(= &h80095004L)

				// '                    ' ''
				// '                    ''MessageId: XENROLL_E_KEYSPEC_SMIME_MISMATCH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Signing certificate cannot include SMIME extension.
				// '                    ' ''
				// '                    ''const XENROLL_E_KEYSPEC_SMIME_MISMATCH _HRESULT_TYPEDEF_(= &h80095005L)

				// '                    ' ''
				// '                    ''MessageId: TRUST_E_SYSTEM_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A system-level error occurred while verifying trust.
				// '                    ' ''
				// '                    ''const TRUST_E_SYSTEM_ERROR             _HRESULT_TYPEDEF_(= &h80096001L)

				// '                    ' ''
				// '                    ''MessageId: TRUST_E_NO_SIGNER_CERT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The certificate for the signer of the message is invalid or not found.
				// '                    ' ''
				// '                    ''const TRUST_E_NO_SIGNER_CERT           _HRESULT_TYPEDEF_(= &h80096002L)

				// '                    ' ''
				// '                    ''MessageId: TRUST_E_COUNTER_SIGNER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' One of the counter signatures was invalid.
				// '                    ' ''
				// '                    ''const TRUST_E_COUNTER_SIGNER           _HRESULT_TYPEDEF_(= &h80096003L)

				// '                    ' ''
				// '                    ''MessageId: TRUST_E_CERT_SIGNATURE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The signature of the certificate can not be verified.
				// '                    ' ''
				// '                    ''const TRUST_E_CERT_SIGNATURE           _HRESULT_TYPEDEF_(= &h80096004L)

				// '                    ' ''
				// '                    ''MessageId: TRUST_E_TIME_STAMP
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The timestamp signature and/or certificate could not be verified or is malformed.
				// '                    ' ''
				// '                    ''const TRUST_E_TIME_STAMP               _HRESULT_TYPEDEF_(= &h80096005L)

				// '                    ' ''
				// '                    ''MessageId: TRUST_E_BAD_DIGEST
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The digital signature of the object did not verify.
				// '                    ' ''
				// '                    ''const TRUST_E_BAD_DIGEST               _HRESULT_TYPEDEF_(= &h80096010L)

				// '                    ' ''
				// '                    ''MessageId: TRUST_E_BASIC_CONSTRAINTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A certificate's basic constraint extension has not been observed.
				// '                    ' ''
				// '                    ''const TRUST_E_BASIC_CONSTRAINTS        _HRESULT_TYPEDEF_(= &h80096019L)

				// '                    ' ''
				// '                    ''MessageId: TRUST_E_FINANCIAL_CRITERIA
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The certificate does not meet or contain the Authenticode financial extensions.
				// '                    ' ''
				// '                    ''const TRUST_E_FINANCIAL_CRITERIA       _HRESULT_TYPEDEF_(= &h8009601EL)

				// '                    ' ''
				// '                    '' Error codes for mssipotf.dll
				// '                    '' Most of the error codes can only occur when an error occurs
				// '                    ''   during font file signing
				// '                    ' ''
				// '                    ' ''
				// '                    ' ''
				// '                    ''MessageId: MSSIPOTF_E_OUTOFMEMRANGE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Tried to reference a part of the file outside the proper range.
				// '                    ' ''
				// '                    ''const MSSIPOTF_E_OUTOFMEMRANGE         _HRESULT_TYPEDEF_(= &h80097001L)

				// '                    ' ''
				// '                    ''MessageId: MSSIPOTF_E_CANTGETOBJECT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Could not retrieve an object from the file.
				// '                    ' ''
				// '                    ''const MSSIPOTF_E_CANTGETOBJECT         _HRESULT_TYPEDEF_(= &h80097002L)

				// '                    ' ''
				// '                    ''MessageId: MSSIPOTF_E_NOHEADTABLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Could not find the head table in the file.
				// '                    ' ''
				// '                    ''const MSSIPOTF_E_NOHEADTABLE           _HRESULT_TYPEDEF_(= &h80097003L)

				// '                    ' ''
				// '                    ''MessageId: MSSIPOTF_E_BAD_MAGICNUMBER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The magic number in the head table is incorrect.
				// '                    ' ''
				// '                    ''const MSSIPOTF_E_BAD_MAGICNUMBER       _HRESULT_TYPEDEF_(= &h80097004L)

				// '                    ' ''
				// '                    ''MessageId: MSSIPOTF_E_BAD_OFFSET_TABLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The offset table has incorrect values.
				// '                    ' ''
				// '                    ''const MSSIPOTF_E_BAD_OFFSET_TABLE      _HRESULT_TYPEDEF_(= &h80097005L)

				// '                    ' ''
				// '                    ''MessageId: MSSIPOTF_E_TABLE_TAGORDER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Duplicate table tags or tags [Out ] of alphabetical order.
				// '                    ' ''
				// '                    ''const MSSIPOTF_E_TABLE_TAGORDER        _HRESULT_TYPEDEF_(= &h80097006L)

				// '                    ' ''
				// '                    ''MessageId: MSSIPOTF_E_TABLE_LONGWORD
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A table does not start on a long word boundary.
				// '                    ' ''
				// '                    ''const MSSIPOTF_E_TABLE_LONGWORD        _HRESULT_TYPEDEF_(= &h80097007L)

				// '                    ' ''
				// '                    ''MessageId: MSSIPOTF_E_BAD_FIRST_TABLE_PLACEMENT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' First table does not appear after header information.
				// '                    ' ''
				// '                    ''const MSSIPOTF_E_BAD_FIRST_TABLE_PLACEMENT _HRESULT_TYPEDEF_(= &h80097008L)

				// '                    ' ''
				// '                    ''MessageId: MSSIPOTF_E_TABLES_OVERLAP
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Two or more tables overlap.
				// '                    ' ''
				// '                    ''const MSSIPOTF_E_TABLES_OVERLAP        _HRESULT_TYPEDEF_(= &h80097009L)

				// '                    ' ''
				// '                    ''MessageId: MSSIPOTF_E_TABLE_PADBYTES
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Too many pad bytes between tables or pad bytes are not 0.
				// '                    ' ''
				// '                    ''const MSSIPOTF_E_TABLE_PADBYTES        _HRESULT_TYPEDEF_(= &h8009700AL)

				// '                    ' ''
				// '                    ''MessageId: MSSIPOTF_E_FILETOOSMALL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' File is too small to contain the last table.
				// '                    ' ''
				// '                    ''const MSSIPOTF_E_FILETOOSMALL          _HRESULT_TYPEDEF_(= &h8009700BL)

				// '                    ' ''
				// '                    ''MessageId: MSSIPOTF_E_TABLE_CHECKSUM
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A table checksum is incorrect.
				// '                    ' ''
				// '                    ''const MSSIPOTF_E_TABLE_CHECKSUM        _HRESULT_TYPEDEF_(= &h8009700CL)

				// '                    ' ''
				// '                    ''MessageId: MSSIPOTF_E_FILE_CHECKSUM
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The file checksum is incorrect.
				// '                    ' ''
				// '                    ''const MSSIPOTF_E_FILE_CHECKSUM         _HRESULT_TYPEDEF_(= &h8009700DL)

				// '                    ' ''
				// '                    ''MessageId: MSSIPOTF_E_FAILED_POLICY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The signature does not have the correct attributes for the policy.
				// '                    ' ''
				// '                    ''const MSSIPOTF_E_FAILED_POLICY         _HRESULT_TYPEDEF_(= &h80097010L)

				// '                    ' ''
				// '                    ''MessageId: MSSIPOTF_E_FAILED_HINTS_CHECK
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The file did not pass the hints check.
				// '                    ' ''
				// '                    ''const MSSIPOTF_E_FAILED_HINTS_CHECK    _HRESULT_TYPEDEF_(= &h80097011L)

				// '                    ' ''
				// '                    ''MessageId: MSSIPOTF_E_NOT_OPENTYPE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The file is not an OpenType file.
				// '                    ' ''
				// '                    ''const MSSIPOTF_E_NOT_OPENTYPE          _HRESULT_TYPEDEF_(= &h80097012L)

				// '                    ' ''
				// '                    ''MessageId: MSSIPOTF_E_FILE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Failed on a file operation (open, map, read, write).
				// '                    ' ''
				// '                    ''const MSSIPOTF_E_FILE                  _HRESULT_TYPEDEF_(= &h80097013L)

				// '                    ' ''
				// '                    ''MessageId: MSSIPOTF_E_CRYPT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A call to a CryptoAPI function failed.
				// '                    ' ''
				// '                    ''const MSSIPOTF_E_CRYPT                 _HRESULT_TYPEDEF_(= &h80097014L)

				// '                    ' ''
				// '                    ''MessageId: MSSIPOTF_E_BADVERSION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' There is a bad version number in the file.
				// '                    ' ''
				// '                    ''const MSSIPOTF_E_BADVERSION            _HRESULT_TYPEDEF_(= &h80097015L)

				// '                    ' ''
				// '                    ''MessageId: MSSIPOTF_E_DSIG_STRUCTURE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The structure of the DSIG table is incorrect.
				// '                    ' ''
				// '                    ''const MSSIPOTF_E_DSIG_STRUCTURE        _HRESULT_TYPEDEF_(= &h80097016L)

				// '                    ' ''
				// '                    ''MessageId: MSSIPOTF_E_PCONST_CHECK
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A check failed in a partially constant table.
				// '                    ' ''
				// '                    ''const MSSIPOTF_E_PCONST_CHECK          _HRESULT_TYPEDEF_(= &h80097017L)

				// '                    ' ''
				// '                    ''MessageId: MSSIPOTF_E_STRUCTURE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Some kind of structural error.
				// '                    ' ''
				// '                    ''const MSSIPOTF_E_STRUCTURE             _HRESULT_TYPEDEF_(= &h80097018L)

				// '                    ''const NTE_OP_OK 0

				// '                    ' ''
				// '                    ''Note that additional FACILITY_SSPI errors are in issperr.h
				// '                    ' ''
				// '                    ''******************
				// '                    ''FACILITY_CERT
				// '                    ''******************
				// '                    ' ''
				// '                    ''MessageId: TRUST_E_PROVIDER_UNKNOWN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unknown trust provider.
				// '                    ' ''
				// '                    ''const TRUST_E_PROVIDER_UNKNOWN         _HRESULT_TYPEDEF_(= &h800B0001L)

				// '                    ' ''
				// '                    ''MessageId: TRUST_E_ACTION_UNKNOWN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The trust verification action specified is not supported by the specified trust provider.
				// '                    ' ''
				// '                    ''const TRUST_E_ACTION_UNKNOWN           _HRESULT_TYPEDEF_(= &h800B0002L)

				// '                    ' ''
				// '                    ''MessageId: TRUST_E_SUBJECT_FORM_UNKNOWN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The form specified for the subject is not one supported or known by the specified trust provider.
				// '                    ' ''
				// '                    ''const TRUST_E_SUBJECT_FORM_UNKNOWN     _HRESULT_TYPEDEF_(= &h800B0003L)

				// '                    ' ''
				// '                    ''MessageId: TRUST_E_SUBJECT_NOT_TRUSTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The subject is not trusted for the specified action.
				// '                    ' ''
				// '                    ''const TRUST_E_SUBJECT_NOT_TRUSTED      _HRESULT_TYPEDEF_(= &h800B0004L)

				// '                    ' ''
				// '                    ''MessageId: DIGSIG_E_ENCODE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Error due to problem in ASN.1 encoding process.
				// '                    ' ''
				// '                    ''const DIGSIG_E_ENCODE                  _HRESULT_TYPEDEF_(= &h800B0005L)

				// '                    ' ''
				// '                    ''MessageId: DIGSIG_E_DECODE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Error due to problem in ASN.1 decoding process.
				// '                    ' ''
				// '                    ''const DIGSIG_E_DECODE                  _HRESULT_TYPEDEF_(= &h800B0006L)

				// '                    ' ''
				// '                    ''MessageId: DIGSIG_E_EXTENSIBILITY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Reading / writing Extensions where Attributes are appropriate, and visa versa.
				// '                    ' ''
				// '                    ''const DIGSIG_E_EXTENSIBILITY           _HRESULT_TYPEDEF_(= &h800B0007L)

				// '                    ' ''
				// '                    ''MessageId: DIGSIG_E_CRYPTO
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unspecified cryptographic failure.
				// '                    ' ''
				// '                    ''const DIGSIG_E_CRYPTO                  _HRESULT_TYPEDEF_(= &h800B0008L)

				// '                    ' ''
				// '                    ''MessageId: PERSIST_E_SIZEDEFINITE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The size of the data could not be determined.
				// '                    ' ''
				// '                    ''const PERSIST_E_SIZEDEFINITE           _HRESULT_TYPEDEF_(= &h800B0009L)

				// '                    ' ''
				// '                    ''MessageId: PERSIST_E_SIZEINDEFINITE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The size of the indefinite-sized data could not be determined.
				// '                    ' ''
				// '                    ''const PERSIST_E_SIZEINDEFINITE         _HRESULT_TYPEDEF_(= &h800B000AL)

				// '                    ' ''
				// '                    ''MessageId: PERSIST_E_NOTSELFSIZING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' This object does not read and write self-sizing data.
				// '                    ' ''
				// '                    ''const PERSIST_E_NOTSELFSIZING          _HRESULT_TYPEDEF_(= &h800B000BL)

				// '                    ' ''
				// '                    ''MessageId: TRUST_E_NOSIGNATURE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' No signature was present in the subject.
				// '                    ' ''
				// '                    ''const TRUST_E_NOSIGNATURE              _HRESULT_TYPEDEF_(= &h800B0100L)

				// '                    ' ''
				// '                    ''MessageId: CERT_E_EXPIRED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A required certificate is not within its validity period when verifying against the current system clock or the timestamp in the signed file.
				// '                    ' ''
				// '                    ''const CERT_E_EXPIRED                   _HRESULT_TYPEDEF_(= &h800B0101L)

				// '                    ' ''
				// '                    ''MessageId: CERT_E_VALIDITYPERIODNESTING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The validity periods of the certification chain do not nest correctly.
				// '                    ' ''
				// '                    ''const CERT_E_VALIDITYPERIODNESTING     _HRESULT_TYPEDEF_(= &h800B0102L)

				// '                    ' ''
				// '                    ''MessageId: CERT_E_ROLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A certificate that can only be used as an end-entity is being used as a CA or visa versa.
				// '                    ' ''
				// '                    ''const CERT_E_ROLE                      _HRESULT_TYPEDEF_(= &h800B0103L)

				// '                    ' ''
				// '                    ''MessageId: CERT_E_PATHLENCONST
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A path length constraint in the certification chain has been violated.
				// '                    ' ''
				// '                    ''const CERT_E_PATHLENCONST              _HRESULT_TYPEDEF_(= &h800B0104L)

				// '                    ' ''
				// '                    ''MessageId: CERT_E_CRITICAL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A certificate contains an unknown extension that is marked 'critical'.
				// '                    ' ''
				// '                    ''const CERT_E_CRITICAL                  _HRESULT_TYPEDEF_(= &h800B0105L)

				// '                    ' ''
				// '                    ''MessageId: CERT_E_PURPOSE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A certificate being used for a purpose other than the ones specified by its CA.
				// '                    ' ''
				// '                    ''const CERT_E_PURPOSE                   _HRESULT_TYPEDEF_(= &h800B0106L)

				// '                    ' ''
				// '                    ''MessageId: CERT_E_ISSUERCHAINING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A parent of a given certificate in fact did not issue that child certificate.
				// '                    ' ''
				// '                    ''const CERT_E_ISSUERCHAINING            _HRESULT_TYPEDEF_(= &h800B0107L)

				// '                    ' ''
				// '                    ''MessageId: CERT_E_MALFORMED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A certificate is missing or has an empty value for an important field, such as a subject or issuer name.
				// '                    ' ''
				// '                    ''const CERT_E_MALFORMED                 _HRESULT_TYPEDEF_(= &h800B0108L)

				// '                    ' ''
				// '                    ''MessageId: CERT_E_UNTRUSTEDROOT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A certificate chain processed, but terminated in a root certificate which is not trusted by the trust provider.
				// '                    ' ''
				// '                    ''const CERT_E_UNTRUSTEDROOT             _HRESULT_TYPEDEF_(= &h800B0109L)

				// '                    ' ''
				// '                    ''MessageId: CERT_E_CHAINING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A certificate chain could not be built to a trusted root authority.
				// '                    ' ''
				// '                    ''const CERT_E_CHAINING                  _HRESULT_TYPEDEF_(= &h800B010AL)

				// '                    ' ''
				// '                    ''MessageId: TRUST_E_FAIL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Generic trust failure.
				// '                    ' ''
				// '                    ''const TRUST_E_FAIL                     _HRESULT_TYPEDEF_(= &h800B010BL)

				// '                    ' ''
				// '                    ''MessageId: CERT_E_REVOKED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A certificate was explicitly revoked by its issuer.
				// '                    ' ''
				// '                    ''const CERT_E_REVOKED                   _HRESULT_TYPEDEF_(= &h800B010CL)

				// '                    ' ''
				// '                    ''MessageId: CERT_E_UNTRUSTEDTESTROOT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The certification path terminates with the test root which is not trusted with the current policy settings.
				// '                    ' ''
				// '                    ''const CERT_E_UNTRUSTEDTESTROOT         _HRESULT_TYPEDEF_(= &h800B010DL)

				// '                    ' ''
				// '                    ''MessageId: CERT_E_REVOCATION_FAILURE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The revocation process could not continue - the certificate(s) could not be checked.
				// '                    ' ''
				// '                    ''const CERT_E_REVOCATION_FAILURE        _HRESULT_TYPEDEF_(= &h800B010EL)

				// '                    ' ''
				// '                    ''MessageId: CERT_E_CN_NO_MATCH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The certificate's CN name does not match the passed value.
				// '                    ' ''
				// '                    ''const CERT_E_CN_NO_MATCH               _HRESULT_TYPEDEF_(= &h800B010FL)

				// '                    ' ''
				// '                    ''MessageId: CERT_E_WRONG_USAGE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The certificate is not valid for the requested usage.
				// '                    ' ''
				// '                    ''const CERT_E_WRONG_USAGE               _HRESULT_TYPEDEF_(= &h800B0110L)

				// '                    ' ''
				// '                    ''MessageId: TRUST_E_EXPLICIT_DISTRUST
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The certificate was explicitly marked as untrusted by the user.
				// '                    ' ''
				// '                    ''const TRUST_E_EXPLICIT_DISTRUST        _HRESULT_TYPEDEF_(= &h800B0111L)

				// '                    ' ''
				// '                    ''MessageId: CERT_E_UNTRUSTEDCA
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A certification chain processed correctly, but one of the CA certificates is not trusted by the policy provider.
				// '                    ' ''
				// '                    ''const CERT_E_UNTRUSTEDCA               _HRESULT_TYPEDEF_(= &h800B0112L)

				// '                    ' ''
				// '                    ''MessageId: CERT_E_INVALID_POLICY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The certificate has invalid policy.
				// '                    ' ''
				// '                    ''const CERT_E_INVALID_POLICY            _HRESULT_TYPEDEF_(= &h800B0113L)

				// '                    ' ''
				// '                    ''MessageId: CERT_E_INVALID_NAME
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The certificate has an invalid name. The name is not included in the permitted list or is explicitly excluded.
				// '                    ' ''
				// '                    ''const CERT_E_INVALID_NAME              _HRESULT_TYPEDEF_(= &h800B0114L)

				// '                    ''*****************
				// '                    ''FACILITY_SETUPAPI
				// '                    ''*****************
				// '                    ' ''
				// '                    ''Since these error codes aren't in the standard Win32 range (i.e., 0-64K), define a
				// '                    ''macro to map either Win32 or SetupAPI error codes into an HRESULT.
				// '                    ' ''
				// '                    ''const HRESULT_FROM_SETUPAPI(x) ((((x) & (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR)) == (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR)) \
				// '                    ''                                 ? ((HRESULT) (((x) & = &h0000FFFF) | (FACILITY_SETUPAPI << 16) | = &h80000000))                               \
				// '                    ''                                 : HRESULT_FROM_WIN32(x))
				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_EXPECTED_SECTION_NAME
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A non-empty line was encountered in the INF before the start of a section.
				// '                    ' ''
				// '                    ''const SPAPI_E_EXPECTED_SECTION_NAME    _HRESULT_TYPEDEF_(= &h800F0000L)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_BAD_SECTION_NAME_LINE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A section name marker in the INF is not complete, or does not exist on a line by itself.
				// '                    ' ''
				// '                    ''const SPAPI_E_BAD_SECTION_NAME_LINE    _HRESULT_TYPEDEF_(= &h800F0001L)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_SECTION_NAME_TOO_LONG
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An INF section was encountered whose name exceeds the maximum section name length.
				// '                    ' ''
				// '                    ''const SPAPI_E_SECTION_NAME_TOO_LONG    _HRESULT_TYPEDEF_(= &h800F0002L)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_GENERAL_SYNTAX
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The syntax of the INF is invalid.
				// '                    ' ''
				// '                    ''const SPAPI_E_GENERAL_SYNTAX           _HRESULT_TYPEDEF_(= &h800F0003L)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_WRONG_INF_STYLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The style of the INF is different than what was requested.
				// '                    ' ''
				// '                    ''const SPAPI_E_WRONG_INF_STYLE          _HRESULT_TYPEDEF_(= &h800F0100L)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_SECTION_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The required section was not found in the INF.
				// '                    ' ''
				// '                    ''const SPAPI_E_SECTION_NOT_FOUND        _HRESULT_TYPEDEF_(= &h800F0101L)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_LINE_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The required line was not found in the INF.
				// '                    ' ''
				// '                    ''const SPAPI_E_LINE_NOT_FOUND           _HRESULT_TYPEDEF_(= &h800F0102L)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_NO_BACKUP
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The files affected by the installation of this file queue have not been backed up for uninstall.
				// '                    ' ''
				// '                    ''const SPAPI_E_NO_BACKUP                _HRESULT_TYPEDEF_(= &h800F0103L)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_NO_ASSOCIATED_CLASS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The INF or the device information set or element does not have an associated install class.
				// '                    ' ''
				// '                    ''const SPAPI_E_NO_ASSOCIATED_CLASS      _HRESULT_TYPEDEF_(= &h800F0200L)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_CLASS_MISMATCH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The INF or the device information set or element does not match the specified install class.
				// '                    ' ''
				// '                    ''const SPAPI_E_CLASS_MISMATCH           _HRESULT_TYPEDEF_(= &h800F0201L)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_DUPLICATE_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An existing device was found that is a duplicate of the device being manually installed.
				// '                    ' ''
				// '                    ''const SPAPI_E_DUPLICATE_FOUND          _HRESULT_TYPEDEF_(= &h800F0202L)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_NO_DRIVER_SELECTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' There is no driver selected for the device information set or element.
				// '                    ' ''
				// '                    ''const SPAPI_E_NO_DRIVER_SELECTED       _HRESULT_TYPEDEF_(= &h800F0203L)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_KEY_DOES_NOT_EXIST
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested device registry key does not exist.
				// '                    ' ''
				// '                    ''const SPAPI_E_KEY_DOES_NOT_EXIST       _HRESULT_TYPEDEF_(= &h800F0204L)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_INVALID_DEVINST_NAME
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The device instance name is invalid.
				// '                    ' ''
				// '                    ''const SPAPI_E_INVALID_DEVINST_NAME     _HRESULT_TYPEDEF_(= &h800F0205L)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_INVALID_CLASS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The install class is not present or is invalid.
				// '                    ' ''
				// '                    ''const SPAPI_E_INVALID_CLASS            _HRESULT_TYPEDEF_(= &h800F0206L)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_DEVINST_ALREADY_EXISTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The device instance cannot be created because it already exists.
				// '                    ' ''
				// '                    ''const SPAPI_E_DEVINST_ALREADY_EXISTS   _HRESULT_TYPEDEF_(= &h800F0207L)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_DEVINFO_NOT_REGISTERED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The operation cannot be performed on a device information element that has not been registered.
				// '                    ' ''
				// '                    ''const SPAPI_E_DEVINFO_NOT_REGISTERED   _HRESULT_TYPEDEF_(= &h800F0208L)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_INVALID_REG_PROPERTY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The device property code is invalid.
				// '                    ' ''
				// '                    ''const SPAPI_E_INVALID_REG_PROPERTY     _HRESULT_TYPEDEF_(= &h800F0209L)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_NO_INF
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The INF from which a driver list is to be built does not exist.
				// '                    ' ''
				// '                    ''const SPAPI_E_NO_INF                   _HRESULT_TYPEDEF_(= &h800F020AL)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_NO_SUCH_DEVINST
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The device instance does not exist in the hardware tree.
				// '                    ' ''
				// '                    ''const SPAPI_E_NO_SUCH_DEVINST          _HRESULT_TYPEDEF_(= &h800F020BL)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_CANT_LOAD_CLASS_ICON
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The icon representing this install class cannot be loaded.
				// '                    ' ''
				// '                    ''const SPAPI_E_CANT_LOAD_CLASS_ICON     _HRESULT_TYPEDEF_(= &h800F020CL)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_INVALID_CLASS_INSTALLER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The class installer registry entry is invalid.
				// '                    ' ''
				// '                    ''const SPAPI_E_INVALID_CLASS_INSTALLER  _HRESULT_TYPEDEF_(= &h800F020DL)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_DI_DO_DEFAULT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The class installer has indicated that the default action should be performed for this installation request.
				// '                    ' ''
				// '                    ''const SPAPI_E_DI_DO_DEFAULT            _HRESULT_TYPEDEF_(= &h800F020EL)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_DI_NOFILECOPY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The operation does not require any files to be copied.
				// '                    ' ''
				// '                    ''const SPAPI_E_DI_NOFILECOPY            _HRESULT_TYPEDEF_(= &h800F020FL)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_INVALID_HWPROFILE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified hardware profile does not exist.
				// '                    ' ''
				// '                    ''const SPAPI_E_INVALID_HWPROFILE        _HRESULT_TYPEDEF_(= &h800F0210L)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_NO_DEVICE_SELECTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' There is no device information element currently selected for this device information set.
				// '                    ' ''
				// '                    ''const SPAPI_E_NO_DEVICE_SELECTED       _HRESULT_TYPEDEF_(= &h800F0211L)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_DEVINFO_LIST_LOCKED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The operation cannot be performed because the device information set is locked.
				// '                    ' ''
				// '                    ''const SPAPI_E_DEVINFO_LIST_LOCKED      _HRESULT_TYPEDEF_(= &h800F0212L)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_DEVINFO_DATA_LOCKED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The operation cannot be performed because the device information element is locked.
				// '                    ' ''
				// '                    ''const SPAPI_E_DEVINFO_DATA_LOCKED      _HRESULT_TYPEDEF_(= &h800F0213L)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_DI_BAD_PATH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified path does not contain any applicable device INFs.
				// '                    ' ''
				// '                    ''const SPAPI_E_DI_BAD_PATH              _HRESULT_TYPEDEF_(= &h800F0214L)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_NO_CLASSINSTALL_PARAMS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' No class installer parameters have been set for the device information set or element.
				// '                    ' ''
				// '                    ''const SPAPI_E_NO_CLASSINSTALL_PARAMS   _HRESULT_TYPEDEF_(= &h800F0215L)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_FILEQUEUE_LOCKED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The operation cannot be performed because the file queue is locked.
				// '                    ' ''
				// '                    ''const SPAPI_E_FILEQUEUE_LOCKED         _HRESULT_TYPEDEF_(= &h800F0216L)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_BAD_SERVICE_INSTALLSECT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A service installation section in this INF is invalid.
				// '                    ' ''
				// '                    ''const SPAPI_E_BAD_SERVICE_INSTALLSECT  _HRESULT_TYPEDEF_(= &h800F0217L)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_NO_CLASS_DRIVER_LIST
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' There is no class driver list for the device information element.
				// '                    ' ''
				// '                    ''const SPAPI_E_NO_CLASS_DRIVER_LIST     _HRESULT_TYPEDEF_(= &h800F0218L)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_NO_ASSOCIATED_SERVICE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The installation failed because a function driver was not specified for this device instance.
				// '                    ' ''
				// '                    ''const SPAPI_E_NO_ASSOCIATED_SERVICE    _HRESULT_TYPEDEF_(= &h800F0219L)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_NO_DEFAULT_DEVICE_INTERFACE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' There is presently no default device interface designated for this interface class.
				// '                    ' ''
				// '                    ''const SPAPI_E_NO_DEFAULT_DEVICE_INTERFACE _HRESULT_TYPEDEF_(= &h800F021AL)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_DEVICE_INTERFACE_ACTIVE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The operation cannot be performed because the device interface is currently active.
				// '                    ' ''
				// '                    ''const SPAPI_E_DEVICE_INTERFACE_ACTIVE  _HRESULT_TYPEDEF_(= &h800F021BL)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_DEVICE_INTERFACE_REMOVED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The operation cannot be performed because the device interface has been removed from the system.
				// '                    ' ''
				// '                    ''const SPAPI_E_DEVICE_INTERFACE_REMOVED _HRESULT_TYPEDEF_(= &h800F021CL)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_BAD_INTERFACE_INSTALLSECT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An interface installation section in this INF is invalid.
				// '                    ' ''
				// '                    ''const SPAPI_E_BAD_INTERFACE_INSTALLSECT _HRESULT_TYPEDEF_(= &h800F021DL)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_NO_SUCH_INTERFACE_CLASS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' This interface class does not exist in the system.
				// '                    ' ''
				// '                    ''const SPAPI_E_NO_SUCH_INTERFACE_CLASS  _HRESULT_TYPEDEF_(= &h800F021EL)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_INVALID_REFERENCE_STRING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The reference string supplied for this interface device is invalid.
				// '                    ' ''
				// '                    ''const SPAPI_E_INVALID_REFERENCE_STRING _HRESULT_TYPEDEF_(= &h800F021FL)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_INVALID_MACHINENAME
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified machine name does not conform to UNC naming conventions.
				// '                    ' ''
				// '                    ''const SPAPI_E_INVALID_MACHINENAME      _HRESULT_TYPEDEF_(= &h800F0220L)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_REMOTE_COMM_FAILURE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A general remote communication error occurred.
				// '                    ' ''
				// '                    ''const SPAPI_E_REMOTE_COMM_FAILURE      _HRESULT_TYPEDEF_(= &h800F0221L)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_MACHINE_UNAVAILABLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The machine selected for remote communication is not available at this time.
				// '                    ' ''
				// '                    ''const SPAPI_E_MACHINE_UNAVAILABLE      _HRESULT_TYPEDEF_(= &h800F0222L)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_NO_CONFIGMGR_SERVICES
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The Plug and Play service is not available on the remote machine.
				// '                    ' ''
				// '                    ''const SPAPI_E_NO_CONFIGMGR_SERVICES    _HRESULT_TYPEDEF_(= &h800F0223L)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_INVALID_PROPPAGE_PROVIDER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The property page provider registry entry is invalid.
				// '                    ' ''
				// '                    ''const SPAPI_E_INVALID_PROPPAGE_PROVIDER _HRESULT_TYPEDEF_(= &h800F0224L)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_NO_SUCH_DEVICE_INTERFACE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested device interface is not present in the system.
				// '                    ' ''
				// '                    ''const SPAPI_E_NO_SUCH_DEVICE_INTERFACE _HRESULT_TYPEDEF_(= &h800F0225L)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_DI_POSTPROCESSING_REQUIRED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The device's co-installer has additional work to perform after installation is complete.
				// '                    ' ''
				// '                    ''const SPAPI_E_DI_POSTPROCESSING_REQUIRED _HRESULT_TYPEDEF_(= &h800F0226L)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_INVALID_COINSTALLER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The device's co-installer is invalid.
				// '                    ' ''
				// '                    ''const SPAPI_E_INVALID_COINSTALLER      _HRESULT_TYPEDEF_(= &h800F0227L)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_NO_COMPAT_DRIVERS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' There are no compatible drivers for this device.
				// '                    ' ''
				// '                    ''const SPAPI_E_NO_COMPAT_DRIVERS        _HRESULT_TYPEDEF_(= &h800F0228L)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_NO_DEVICE_ICON
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' There is no icon that represents this device or device type.
				// '                    ' ''
				// '                    ''const SPAPI_E_NO_DEVICE_ICON           _HRESULT_TYPEDEF_(= &h800F0229L)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_INVALID_INF_LOGCONFIG
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A logical configuration specified in this INF is invalid.
				// '                    ' ''
				// '                    ''const SPAPI_E_INVALID_INF_LOGCONFIG    _HRESULT_TYPEDEF_(= &h800F022AL)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_DI_DONT_INSTALL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The class installer has denied the request to install or upgrade this device.
				// '                    ' ''
				// '                    ''const SPAPI_E_DI_DONT_INSTALL          _HRESULT_TYPEDEF_(= &h800F022BL)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_INVALID_FILTER_DRIVER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' One of the filter drivers installed for this device is invalid.
				// '                    ' ''
				// '                    ''const SPAPI_E_INVALID_FILTER_DRIVER    _HRESULT_TYPEDEF_(= &h800F022CL)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_NON_WINDOWS_NT_DRIVER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The driver selected for this device does not support Windows XP.
				// '                    ' ''
				// '                    ''const SPAPI_E_NON_WINDOWS_NT_DRIVER    _HRESULT_TYPEDEF_(= &h800F022DL)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_NON_WINDOWS_DRIVER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The driver selected for this device does not support Windows.
				// '                    ' ''
				// '                    ''const SPAPI_E_NON_WINDOWS_DRIVER       _HRESULT_TYPEDEF_(= &h800F022EL)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_NO_CATALOG_FOR_OEM_INF
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The third-party INF does not contain digital signature information.
				// '                    ' ''
				// '                    ''const SPAPI_E_NO_CATALOG_FOR_OEM_INF   _HRESULT_TYPEDEF_(= &h800F022FL)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_DEVINSTALL_QUEUE_NONNATIVE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An invalid attempt was made to use a device installation file queue for verification of digital signatures relative to other platforms.
				// '                    ' ''
				// '                    ''const SPAPI_E_DEVINSTALL_QUEUE_NONNATIVE _HRESULT_TYPEDEF_(= &h800F0230L)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_NOT_DISABLEABLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The device cannot be disabled.
				// '                    ' ''
				// '                    ''const SPAPI_E_NOT_DISABLEABLE          _HRESULT_TYPEDEF_(= &h800F0231L)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_CANT_REMOVE_DEVINST
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The device could not be dynamically removed.
				// '                    ' ''
				// '                    ''const SPAPI_E_CANT_REMOVE_DEVINST      _HRESULT_TYPEDEF_(= &h800F0232L)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_INVALID_TARGET
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Cannot copy to specified target.
				// '                    ' ''
				// '                    ''const SPAPI_E_INVALID_TARGET           _HRESULT_TYPEDEF_(= &h800F0233L)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_DRIVER_NONNATIVE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Driver is not intended for this platform.
				// '                    ' ''
				// '                    ''const SPAPI_E_DRIVER_NONNATIVE         _HRESULT_TYPEDEF_(= &h800F0234L)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_IN_WOW64
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Operation not allowed in WOW64.
				// '                    ' ''
				// '                    ''const SPAPI_E_IN_WOW64                 _HRESULT_TYPEDEF_(= &h800F0235L)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_SET_SYSTEM_RESTORE_POINT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The operation involving unsigned file copying was rolled back, so that a system restore point could be set.
				// '                    ' ''
				// '                    ''const SPAPI_E_SET_SYSTEM_RESTORE_POINT _HRESULT_TYPEDEF_(= &h800F0236L)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_INCORRECTLY_COPIED_INF
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An INF was copied into the Windows INF directory in an improper manner.
				// '                    ' ''
				// '                    ''const SPAPI_E_INCORRECTLY_COPIED_INF   _HRESULT_TYPEDEF_(= &h800F0237L)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_SCE_DISABLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The Security Configuration Editor (SCE) APIs have been disabled on this Embedded product.
				// '                    ' ''
				// '                    ''const SPAPI_E_SCE_DISABLED             _HRESULT_TYPEDEF_(= &h800F0238L)

				// '                    ' ''
				// '                    ''MessageId: SPAPI_E_ERROR_NOT_INSTALLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' No installed components were detected.
				// '                    ' ''
				// '                    ''const SPAPI_E_ERROR_NOT_INSTALLED      _HRESULT_TYPEDEF_(= &h800F1000L)

				// '                    ''*****************
				// '                    ''FACILITY_SCARD
				// '                    ''*****************
				// '                    ' ''
				// '                    ''=============================
				// '                    ''Facility SCARD Error Messages
				// '                    ''=============================
				// '                    ' ''
				// '                    ''const SCARD_S_SUCCESS NO_ERROR
				// '                    ' ''
				// '                    ''MessageId: SCARD_F_INTERNAL_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An internal consistency check failed.
				// '                    ' ''
				// '                    ''const SCARD_F_INTERNAL_ERROR           _HRESULT_TYPEDEF_(= &h80100001L)

				// '                    ' ''
				// '                    ''MessageId: SCARD_E_CANCELLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The action was cancelled by an SCardCancel request.
				// '                    ' ''
				// '                    ''const SCARD_E_CANCELLED                _HRESULT_TYPEDEF_(= &h80100002L)

				// '                    ' ''
				// '                    ''MessageId: SCARD_E_INVALID_HANDLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The supplied handle was invalid.
				// '                    ' ''
				// '                    ''const SCARD_E_INVALID_HANDLE           _HRESULT_TYPEDEF_(= &h80100003L)

				// '                    ' ''
				// '                    ''MessageId: SCARD_E_INVALID_PARAMETER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' One or more of the supplied parameters could not be properly interpreted.
				// '                    ' ''
				// '                    ''const SCARD_E_INVALID_PARAMETER        _HRESULT_TYPEDEF_(= &h80100004L)

				// '                    ' ''
				// '                    ''MessageId: SCARD_E_INVALID_TARGET
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Registry startup information is missing or invalid.
				// '                    ' ''
				// '                    ''const SCARD_E_INVALID_TARGET           _HRESULT_TYPEDEF_(= &h80100005L)

				// '                    ' ''
				// '                    ''MessageId: SCARD_E_NO_MEMORY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Not enough memory available to complete this command.
				// '                    ' ''
				// '                    ''const SCARD_E_NO_MEMORY                _HRESULT_TYPEDEF_(= &h80100006L)

				// '                    ' ''
				// '                    ''MessageId: SCARD_F_WAITED_TOO_LONG
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An internal consistency timer has expired.
				// '                    ' ''
				// '                    ''const SCARD_F_WAITED_TOO_LONG          _HRESULT_TYPEDEF_(= &h80100007L)

				// '                    ' ''
				// '                    ''MessageId: SCARD_E_INSUFFICIENT_BUFFER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The data buffer to receive returned data is too small for the returned data.
				// '                    ' ''
				// '                    ''const SCARD_E_INSUFFICIENT_BUFFER      _HRESULT_TYPEDEF_(= &h80100008L)

				// '                    ' ''
				// '                    ''MessageId: SCARD_E_UNKNOWN_READER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified reader name is not recognized.
				// '                    ' ''
				// '                    ''const SCARD_E_UNKNOWN_READER           _HRESULT_TYPEDEF_(= &h80100009L)

				// '                    ' ''
				// '                    ''MessageId: SCARD_E_TIMEOUT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The user-specified timeout value has expired.
				// '                    ' ''
				// '                    ''const SCARD_E_TIMEOUT                  _HRESULT_TYPEDEF_(= &h8010000AL)

				// '                    ' ''
				// '                    ''MessageId: SCARD_E_SHARING_VIOLATION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The smart card cannot be accessed because of other connections outstanding.
				// '                    ' ''
				// '                    ''const SCARD_E_SHARING_VIOLATION        _HRESULT_TYPEDEF_(= &h8010000BL)

				// '                    ' ''
				// '                    ''MessageId: SCARD_E_NO_SMARTCARD
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The operation requires a Smart Card, but no Smart Card is currently in the device.
				// '                    ' ''
				// '                    ''const SCARD_E_NO_SMARTCARD             _HRESULT_TYPEDEF_(= &h8010000CL)

				// '                    ' ''
				// '                    ''MessageId: SCARD_E_UNKNOWN_CARD
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified smart card name is not recognized.
				// '                    ' ''
				// '                    ''const SCARD_E_UNKNOWN_CARD             _HRESULT_TYPEDEF_(= &h8010000DL)

				// '                    ' ''
				// '                    ''MessageId: SCARD_E_CANT_DISPOSE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The system could not dispose of the media in the requested manner.
				// '                    ' ''
				// '                    ''const SCARD_E_CANT_DISPOSE             _HRESULT_TYPEDEF_(= &h8010000EL)

				// '                    ' ''
				// '                    ''MessageId: SCARD_E_PROTO_MISMATCH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested protocols are incompatible with the protocol currently in use with the smart card.
				// '                    ' ''
				// '                    ''const SCARD_E_PROTO_MISMATCH           _HRESULT_TYPEDEF_(= &h8010000FL)

				// '                    ' ''
				// '                    ''MessageId: SCARD_E_NOT_READY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The reader or smart card is not ready to accept commands.
				// '                    ' ''
				// '                    ''const SCARD_E_NOT_READY                _HRESULT_TYPEDEF_(= &h80100010L)

				// '                    ' ''
				// '                    ''MessageId: SCARD_E_INVALID_VALUE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' One or more of the supplied parameters values could not be properly interpreted.
				// '                    ' ''
				// '                    ''const SCARD_E_INVALID_VALUE            _HRESULT_TYPEDEF_(= &h80100011L)

				// '                    ' ''
				// '                    ''MessageId: SCARD_E_SYSTEM_CANCELLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The action was cancelled by the system, presumably to log off or shut down.
				// '                    ' ''
				// '                    ''const SCARD_E_SYSTEM_CANCELLED         _HRESULT_TYPEDEF_(= &h80100012L)

				// '                    ' ''
				// '                    ''MessageId: SCARD_F_COMM_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An internal communications error has been detected.
				// '                    ' ''
				// '                    ''const SCARD_F_COMM_ERROR               _HRESULT_TYPEDEF_(= &h80100013L)

				// '                    ' ''
				// '                    ''MessageId: SCARD_F_UNKNOWN_ERROR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An internal error has been detected, but the source is unknown.
				// '                    ' ''
				// '                    ''const SCARD_F_UNKNOWN_ERROR            _HRESULT_TYPEDEF_(= &h80100014L)

				// '                    ' ''
				// '                    ''MessageId: SCARD_E_INVALID_ATR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An ATR obtained from the registry is not a valid ATR string.
				// '                    ' ''
				// '                    ''const SCARD_E_INVALID_ATR              _HRESULT_TYPEDEF_(= &h80100015L)

				// '                    ' ''
				// '                    ''MessageId: SCARD_E_NOT_TRANSACTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An attempt was made to end a non-existent transaction.
				// '                    ' ''
				// '                    ''const SCARD_E_NOT_TRANSACTED           _HRESULT_TYPEDEF_(= &h80100016L)

				// '                    ' ''
				// '                    ''MessageId: SCARD_E_READER_UNAVAILABLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified reader is not currently available for use.
				// '                    ' ''
				// '                    ''const SCARD_E_READER_UNAVAILABLE       _HRESULT_TYPEDEF_(= &h80100017L)

				// '                    ' ''
				// '                    ''MessageId: SCARD_P_SHUTDOWN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The operation has been aborted to allow the server application to exit.
				// '                    ' ''
				// '                    ''const SCARD_P_SHUTDOWN                 _HRESULT_TYPEDEF_(= &h80100018L)

				// '                    ' ''
				// '                    ''MessageId: SCARD_E_PCI_TOO_SMALL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The PCI Receive buffer was too small.
				// '                    ' ''
				// '                    ''const SCARD_E_PCI_TOO_SMALL            _HRESULT_TYPEDEF_(= &h80100019L)

				// '                    ' ''
				// '                    ''MessageId: SCARD_E_READER_UNSUPPORTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The reader driver does not meet minimal requirements for support.
				// '                    ' ''
				// '                    ''const SCARD_E_READER_UNSUPPORTED       _HRESULT_TYPEDEF_(= &h8010001AL)

				// '                    ' ''
				// '                    ''MessageId: SCARD_E_DUPLICATE_READER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The reader driver did not produce a unique reader name.
				// '                    ' ''
				// '                    ''const SCARD_E_DUPLICATE_READER         _HRESULT_TYPEDEF_(= &h8010001BL)

				// '                    ' ''
				// '                    ''MessageId: SCARD_E_CARD_UNSUPPORTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The smart card does not meet minimal requirements for support.
				// '                    ' ''
				// '                    ''const SCARD_E_CARD_UNSUPPORTED         _HRESULT_TYPEDEF_(= &h8010001CL)

				// '                    ' ''
				// '                    ''MessageId: SCARD_E_NO_SERVICE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The Smart card resource manager is not running.
				// '                    ' ''
				// '                    ''const SCARD_E_NO_SERVICE               _HRESULT_TYPEDEF_(= &h8010001DL)

				// '                    ' ''
				// '                    ''MessageId: SCARD_E_SERVICE_STOPPED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The Smart card resource manager has shut down.
				// '                    ' ''
				// '                    ''const SCARD_E_SERVICE_STOPPED          _HRESULT_TYPEDEF_(= &h8010001EL)

				// '                    ' ''
				// '                    ''MessageId: SCARD_E_UNEXPECTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An unexpected card error has occurred.
				// '                    ' ''
				// '                    ''const SCARD_E_UNEXPECTED               _HRESULT_TYPEDEF_(= &h8010001FL)

				// '                    ' ''
				// '                    ''MessageId: SCARD_E_ICC_INSTALLATION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' No Primary Provider can be found for the smart card.
				// '                    ' ''
				// '                    ''const SCARD_E_ICC_INSTALLATION         _HRESULT_TYPEDEF_(= &h80100020L)

				// '                    ' ''
				// '                    ''MessageId: SCARD_E_ICC_CREATEORDER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested order of object creation is not supported.
				// '                    ' ''
				// '                    ''const SCARD_E_ICC_CREATEORDER          _HRESULT_TYPEDEF_(= &h80100021L)

				// '                    ' ''
				// '                    ''MessageId: SCARD_E_UNSUPPORTED_FEATURE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' This smart card does not support the requested feature.
				// '                    ' ''
				// '                    ''const SCARD_E_UNSUPPORTED_FEATURE      _HRESULT_TYPEDEF_(= &h80100022L)

				// '                    ' ''
				// '                    ''MessageId: SCARD_E_DIR_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The identified directory does not exist in the smart card.
				// '                    ' ''
				// '                    ''const SCARD_E_DIR_NOT_FOUND            _HRESULT_TYPEDEF_(= &h80100023L)

				// '                    ' ''
				// '                    ''MessageId: SCARD_E_FILE_NOT_FOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The identified file does not exist in the smart card.
				// '                    ' ''
				// '                    ''const SCARD_E_FILE_NOT_FOUND           _HRESULT_TYPEDEF_(= &h80100024L)

				// '                    ' ''
				// '                    ''MessageId: SCARD_E_NO_DIR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The supplied path does not represent a smart card directory.
				// '                    ' ''
				// '                    ''const SCARD_E_NO_DIR                   _HRESULT_TYPEDEF_(= &h80100025L)

				// '                    ' ''
				// '                    ''MessageId: SCARD_E_NO_FILE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The supplied path does not represent a smart card file.
				// '                    ' ''
				// '                    ''const SCARD_E_NO_FILE                  _HRESULT_TYPEDEF_(= &h80100026L)

				// '                    ' ''
				// '                    ''MessageId: SCARD_E_NO_ACCESS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Access is denied to this file.
				// '                    ' ''
				// '                    ''const SCARD_E_NO_ACCESS                _HRESULT_TYPEDEF_(= &h80100027L)

				// '                    ' ''
				// '                    ''MessageId: SCARD_E_WRITE_TOO_MANY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The smartcard does not have enough memory to store the information.
				// '                    ' ''
				// '                    ''const SCARD_E_WRITE_TOO_MANY           _HRESULT_TYPEDEF_(= &h80100028L)

				// '                    ' ''
				// '                    ''MessageId: SCARD_E_BAD_SEEK
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' There was an error trying to set the smart card file object pointer.
				// '                    ' ''
				// '                    ''const SCARD_E_BAD_SEEK                 _HRESULT_TYPEDEF_(= &h80100029L)

				// '                    ' ''
				// '                    ''MessageId: SCARD_E_INVALID_CHV
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The supplied PIN is incorrect.
				// '                    ' ''
				// '                    ''const SCARD_E_INVALID_CHV              _HRESULT_TYPEDEF_(= &h8010002AL)

				// '                    ' ''
				// '                    ''MessageId: SCARD_E_UNKNOWN_RES_MNG
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An unrecognized error code was returned from a layered component.
				// '                    ' ''
				// '                    ''const SCARD_E_UNKNOWN_RES_MNG          _HRESULT_TYPEDEF_(= &h8010002BL)

				// '                    ' ''
				// '                    ''MessageId: SCARD_E_NO_SUCH_CERTIFICATE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested certificate does not exist.
				// '                    ' ''
				// '                    ''const SCARD_E_NO_SUCH_CERTIFICATE      _HRESULT_TYPEDEF_(= &h8010002CL)

				// '                    ' ''
				// '                    ''MessageId: SCARD_E_CERTIFICATE_UNAVAILABLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested certificate could not be obtained.
				// '                    ' ''
				// '                    ''const SCARD_E_CERTIFICATE_UNAVAILABLE  _HRESULT_TYPEDEF_(= &h8010002DL)

				// '                    ' ''
				// '                    ''MessageId: SCARD_E_NO_READERS_AVAILABLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Cannot find a smart card reader.
				// '                    ' ''
				// '                    ''const SCARD_E_NO_READERS_AVAILABLE     _HRESULT_TYPEDEF_(= &h8010002EL)

				// '                    ' ''
				// '                    ''MessageId: SCARD_E_COMM_DATA_LOST
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A communications error with the smart card has been detected.  Retry the operation.
				// '                    ' ''
				// '                    ''const SCARD_E_COMM_DATA_LOST           _HRESULT_TYPEDEF_(= &h8010002FL)

				// '                    ' ''
				// '                    ''MessageId: SCARD_E_NO_KEY_CONTAINER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The requested key container does not exist on the smart card.
				// '                    ' ''
				// '                    ''const SCARD_E_NO_KEY_CONTAINER         _HRESULT_TYPEDEF_(= &h80100030L)

				// '                    ' ''
				// '                    ''MessageId: SCARD_E_SERVER_TOO_BUSY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The Smart card resource manager is too busy to complete this operation.
				// '                    ' ''
				// '                    ''const SCARD_E_SERVER_TOO_BUSY          _HRESULT_TYPEDEF_(= &h80100031L)

				// '                    ' ''
				// '                    ''These are warning codes.
				// '                    ' ''
				// '                    ' ''
				// '                    ''MessageId: SCARD_W_UNSUPPORTED_CARD
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The reader cannot communicate with the smart card, due to ATR configuration conflicts.
				// '                    ' ''
				// '                    ''const SCARD_W_UNSUPPORTED_CARD         _HRESULT_TYPEDEF_(= &h80100065L)

				// '                    ' ''
				// '                    ''MessageId: SCARD_W_UNRESPONSIVE_CARD
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The smart card is not responding to a reset.
				// '                    ' ''
				// '                    ''const SCARD_W_UNRESPONSIVE_CARD        _HRESULT_TYPEDEF_(= &h80100066L)

				// '                    ' ''
				// '                    ''MessageId: SCARD_W_UNPOWERED_CARD
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Power has been removed from the smart card, so that further communication is not possible.
				// '                    ' ''
				// '                    ''const SCARD_W_UNPOWERED_CARD           _HRESULT_TYPEDEF_(= &h80100067L)

				// '                    ' ''
				// '                    ''MessageId: SCARD_W_RESET_CARD
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The smart card has been reset, so any shared state information is invalid.
				// '                    ' ''
				// '                    ''const SCARD_W_RESET_CARD               _HRESULT_TYPEDEF_(= &h80100068L)

				// '                    ' ''
				// '                    ''MessageId: SCARD_W_REMOVED_CARD
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The smart card has been removed, so that further communication is not possible.
				// '                    ' ''
				// '                    ''const SCARD_W_REMOVED_CARD             _HRESULT_TYPEDEF_(= &h80100069L)

				// '                    ' ''
				// '                    ''MessageId: SCARD_W_SECURITY_VIOLATION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Access was denied because of a security violation.
				// '                    ' ''
				// '                    ''const SCARD_W_SECURITY_VIOLATION       _HRESULT_TYPEDEF_(= &h8010006AL)

				// '                    ' ''
				// '                    ''MessageId: SCARD_W_WRONG_CHV
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The card cannot be accessed because the wrong PIN was presented.
				// '                    ' ''
				// '                    ''const SCARD_W_WRONG_CHV                _HRESULT_TYPEDEF_(= &h8010006BL)

				// '                    ' ''
				// '                    ''MessageId: SCARD_W_CHV_BLOCKED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The card cannot be accessed because the maximum number of PIN entry attempts has been reached.
				// '                    ' ''
				// '                    ''const SCARD_W_CHV_BLOCKED              _HRESULT_TYPEDEF_(= &h8010006CL)

				// '                    ' ''
				// '                    ''MessageId: SCARD_W_EOF
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The end of the smart card file has been reached.
				// '                    ' ''
				// '                    ''const SCARD_W_EOF                      _HRESULT_TYPEDEF_(= &h8010006DL)

				// '                    ' ''
				// '                    ''MessageId: SCARD_W_CANCELLED_BY_USER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The action was cancelled by the user.
				// '                    ' ''
				// '                    ''const SCARD_W_CANCELLED_BY_USER        _HRESULT_TYPEDEF_(= &h8010006EL)

				// '                    ' ''
				// '                    ''MessageId: SCARD_W_CARD_NOT_AUTHENTICATED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' No PIN was presented to the smart card.
				// '                    ' ''
				// '                    ''const SCARD_W_CARD_NOT_AUTHENTICATED   _HRESULT_TYPEDEF_(= &h8010006FL)

				// '                    ''*****************
				// '                    ''FACILITY_COMPLUS
				// '                    ''*****************
				// '                    ' ''
				// '                    ''===============================
				// '                    ''Facility COMPLUS Error Messages
				// '                    ''===============================
				// '                    ' ''
				// '                    ' ''
				// '                    ''The following are the subranges  within the COMPLUS facility
				// '                    ''= &h400 - = &h4ff               COMADMIN_E_CAT
				// '                    ''= &h600 - = &h6ff               COMQC errors
				// '                    ''= &h700 - = &h7ff               MSDTC errors
				// '                    ''= &h800 - = &h8ff               Other COMADMIN errors
				// '                    ' ''
				// '                    ''COMPLUS Admin errors
				// '                    ' ''
				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_OBJECTERRORS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Errors occurred accessing one or more objects - the ErrorInfo collection may have more detail
				// '                    ' ''
				// '                    ''const COMADMIN_E_OBJECTERRORS          _HRESULT_TYPEDEF_(= &h80110401L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_OBJECTINVALID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' One or more of the object's properties are missing or invalid
				// '                    ' ''
				// '                    ''const COMADMIN_E_OBJECTINVALID         _HRESULT_TYPEDEF_(= &h80110402L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_KEYMISSING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The object was not found in the catalog
				// '                    ' ''
				// '                    ''const COMADMIN_E_KEYMISSING            _HRESULT_TYPEDEF_(= &h80110403L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_ALREADYINSTALLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The object is already registered
				// '                    ' ''
				// '                    ''const COMADMIN_E_ALREADYINSTALLED      _HRESULT_TYPEDEF_(= &h80110404L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_APP_FILE_WRITEFAIL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Error occurred writing to the application file
				// '                    ' ''
				// '                    ''const COMADMIN_E_APP_FILE_WRITEFAIL    _HRESULT_TYPEDEF_(= &h80110407L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_APP_FILE_READFAIL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Error occurred reading the application file
				// '                    ' ''
				// '                    ''const COMADMIN_E_APP_FILE_READFAIL     _HRESULT_TYPEDEF_(= &h80110408L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_APP_FILE_VERSION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Invalid version number in application file
				// '                    ' ''
				// '                    ''const COMADMIN_E_APP_FILE_VERSION      _HRESULT_TYPEDEF_(= &h80110409L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_BADPATH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The file path is invalid
				// '                    ' ''
				// '                    ''const COMADMIN_E_BADPATH               _HRESULT_TYPEDEF_(= &h8011040AL)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_APPLICATIONEXISTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The application is already installed
				// '                    ' ''
				// '                    ''const COMADMIN_E_APPLICATIONEXISTS     _HRESULT_TYPEDEF_(= &h8011040BL)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_ROLEEXISTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The role already exists
				// '                    ' ''
				// '                    ''const COMADMIN_E_ROLEEXISTS            _HRESULT_TYPEDEF_(= &h8011040CL)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_CANTCOPYFILE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An error occurred copying the file
				// '                    ' ''
				// '                    ''const COMADMIN_E_CANTCOPYFILE          _HRESULT_TYPEDEF_(= &h8011040DL)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_NOUSER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' One or more users are not valid
				// '                    ' ''
				// '                    ''const COMADMIN_E_NOUSER                _HRESULT_TYPEDEF_(= &h8011040FL)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_INVALIDUSERIDS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' One or more users in the application file are not valid
				// '                    ' ''
				// '                    ''const COMADMIN_E_INVALIDUSERIDS        _HRESULT_TYPEDEF_(= &h80110410L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_NOREGISTRYCLSID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The component's CLSID is missing or corrupt
				// '                    ' ''
				// '                    ''const COMADMIN_E_NOREGISTRYCLSID       _HRESULT_TYPEDEF_(= &h80110411L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_BADREGISTRYPROGID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The component's progID is missing or corrupt
				// '                    ' ''
				// '                    ''const COMADMIN_E_BADREGISTRYPROGID     _HRESULT_TYPEDEF_(= &h80110412L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_AUTHENTICATIONLEVEL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unable to set required authentication level for update request
				// '                    ' ''
				// '                    ''const COMADMIN_E_AUTHENTICATIONLEVEL   _HRESULT_TYPEDEF_(= &h80110413L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_USERPASSWDNOTVALID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The identity or password set on the application is not valid
				// '                    ' ''
				// '                    ''const COMADMIN_E_USERPASSWDNOTVALID    _HRESULT_TYPEDEF_(= &h80110414L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_CLSIDORIIDMISMATCH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Application file CLSIDs or IIDs do not match corresponding DLLs
				// '                    ' ''
				// '                    ''const COMADMIN_E_CLSIDORIIDMISMATCH    _HRESULT_TYPEDEF_(= &h80110418L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_REMOTEINTERFACE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Interface information is either missing or changed
				// '                    ' ''
				// '                    ''const COMADMIN_E_REMOTEINTERFACE       _HRESULT_TYPEDEF_(= &h80110419L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_DLLREGISTERSERVER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' DllRegisterServer failed on component install
				// '                    ' ''
				// '                    ''const COMADMIN_E_DLLREGISTERSERVER     _HRESULT_TYPEDEF_(= &h8011041AL)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_NOSERVERSHARE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' No server file share available
				// '                    ' ''
				// '                    ''const COMADMIN_E_NOSERVERSHARE         _HRESULT_TYPEDEF_(= &h8011041BL)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_DLLLOADFAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' DLL could not be loaded
				// '                    ' ''
				// '                    ''const COMADMIN_E_DLLLOADFAILED         _HRESULT_TYPEDEF_(= &h8011041DL)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_BADREGISTRYLIBID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The registered TypeLib ID is not valid
				// '                    ' ''
				// '                    ''const COMADMIN_E_BADREGISTRYLIBID      _HRESULT_TYPEDEF_(= &h8011041EL)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_APPDIRNOTFOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Application install directory not found
				// '                    ' ''
				// '                    ''const COMADMIN_E_APPDIRNOTFOUND        _HRESULT_TYPEDEF_(= &h8011041FL)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_REGISTRARFAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Errors occurred while in the component registrar
				// '                    ' ''
				// '                    ''const COMADMIN_E_REGISTRARFAILED       _HRESULT_TYPEDEF_(= &h80110423L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_COMPFILE_DOESNOTEXIST
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The file does not exist
				// '                    ' ''
				// '                    ''const COMADMIN_E_COMPFILE_DOESNOTEXIST _HRESULT_TYPEDEF_(= &h80110424L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_COMPFILE_LOADDLLFAIL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The DLL could not be loaded
				// '                    ' ''
				// '                    ''const COMADMIN_E_COMPFILE_LOADDLLFAIL  _HRESULT_TYPEDEF_(= &h80110425L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_COMPFILE_GETCLASSOBJ
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' GetClassObject failed in the DLL
				// '                    ' ''
				// '                    ''const COMADMIN_E_COMPFILE_GETCLASSOBJ  _HRESULT_TYPEDEF_(= &h80110426L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_COMPFILE_CLASSNOTAVAIL
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The DLL does not support the components listed in the TypeLib
				// '                    ' ''
				// '                    ''const COMADMIN_E_COMPFILE_CLASSNOTAVAIL _HRESULT_TYPEDEF_(= &h80110427L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_COMPFILE_BADTLB
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The TypeLib could not be loaded
				// '                    ' ''
				// '                    ''const COMADMIN_E_COMPFILE_BADTLB       _HRESULT_TYPEDEF_(= &h80110428L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_COMPFILE_NOTINSTALLABLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The file does not contain components or component information
				// '                    ' ''
				// '                    ''const COMADMIN_E_COMPFILE_NOTINSTALLABLE _HRESULT_TYPEDEF_(= &h80110429L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_NOTCHANGEABLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Changes to this object and its sub-objects have been disabled
				// '                    ' ''
				// '                    ''const COMADMIN_E_NOTCHANGEABLE         _HRESULT_TYPEDEF_(= &h8011042AL)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_NOTDELETEABLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The delete function has been disabled for this object
				// '                    ' ''
				// '                    ''const COMADMIN_E_NOTDELETEABLE         _HRESULT_TYPEDEF_(= &h8011042BL)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_SESSION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The server catalog version is not supported
				// '                    ' ''
				// '                    ''const COMADMIN_E_SESSION               _HRESULT_TYPEDEF_(= &h8011042CL)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_COMP_MOVE_LOCKED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The component move was disallowed, because the source or destination application is either a system application or currently locked against changes
				// '                    ' ''
				// '                    ''const COMADMIN_E_COMP_MOVE_LOCKED      _HRESULT_TYPEDEF_(= &h8011042DL)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_COMP_MOVE_BAD_DEST
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The component move failed because the destination application no longer exists
				// '                    ' ''
				// '                    ''const COMADMIN_E_COMP_MOVE_BAD_DEST    _HRESULT_TYPEDEF_(= &h8011042EL)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_REGISTERTLB
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The system was unable to register the TypeLib
				// '                    ' ''
				// '                    ''const COMADMIN_E_REGISTERTLB           _HRESULT_TYPEDEF_(= &h80110430L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_SYSTEMAPP
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' This operation can not be performed on the system application
				// '                    ' ''
				// '                    ''const COMADMIN_E_SYSTEMAPP             _HRESULT_TYPEDEF_(= &h80110433L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_COMPFILE_NOREGISTRAR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The component registrar referenced in this file is not available
				// '                    ' ''
				// '                    ''const COMADMIN_E_COMPFILE_NOREGISTRAR  _HRESULT_TYPEDEF_(= &h80110434L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_COREQCOMPINSTALLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A component in the same DLL is already installed
				// '                    ' ''
				// '                    ''const COMADMIN_E_COREQCOMPINSTALLED    _HRESULT_TYPEDEF_(= &h80110435L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_SERVICENOTINSTALLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The service is not installed
				// '                    ' ''
				// '                    ''const COMADMIN_E_SERVICENOTINSTALLED   _HRESULT_TYPEDEF_(= &h80110436L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_PROPERTYSAVEFAILED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' One or more property settings are either invalid or in conflict with each other
				// '                    ' ''
				// '                    ''const COMADMIN_E_PROPERTYSAVEFAILED    _HRESULT_TYPEDEF_(= &h80110437L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_OBJECTEXISTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The object you are attempting to add or rename already exists
				// '                    ' ''
				// '                    ''const COMADMIN_E_OBJECTEXISTS          _HRESULT_TYPEDEF_(= &h80110438L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_COMPONENTEXISTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The component already exists
				// '                    ' ''
				// '                    ''const COMADMIN_E_COMPONENTEXISTS       _HRESULT_TYPEDEF_(= &h80110439L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_REGFILE_CORRUPT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The registration file is corrupt
				// '                    ' ''
				// '                    ''const COMADMIN_E_REGFILE_CORRUPT       _HRESULT_TYPEDEF_(= &h8011043BL)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_PROPERTY_OVERFLOW
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The property value is too large
				// '                    ' ''
				// '                    ''const COMADMIN_E_PROPERTY_OVERFLOW     _HRESULT_TYPEDEF_(= &h8011043CL)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_NOTINREGISTRY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Object was not found in registry
				// '                    ' ''
				// '                    ''const COMADMIN_E_NOTINREGISTRY         _HRESULT_TYPEDEF_(= &h8011043EL)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_OBJECTNOTPOOLABLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' This object is not poolable
				// '                    ' ''
				// '                    ''const COMADMIN_E_OBJECTNOTPOOLABLE     _HRESULT_TYPEDEF_(= &h8011043FL)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_APPLID_MATCHES_CLSID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A CLSID with the same GUID as the new application ID is already installed on this machine
				// '                    ' ''
				// '                    ''const COMADMIN_E_APPLID_MATCHES_CLSID  _HRESULT_TYPEDEF_(= &h80110446L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_ROLE_DOES_NOT_EXIST
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A role assigned to a component, interface, or method did not exist in the application
				// '                    ' ''
				// '                    ''const COMADMIN_E_ROLE_DOES_NOT_EXIST   _HRESULT_TYPEDEF_(= &h80110447L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_START_APP_NEEDS_COMPONENTS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' You must have components in an application in order to start the application
				// '                    ' ''
				// '                    ''const COMADMIN_E_START_APP_NEEDS_COMPONENTS _HRESULT_TYPEDEF_(= &h80110448L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_REQUIRES_DIFFERENT_PLATFORM
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' This operation is not enabled on this platform
				// '                    ' ''
				// '                    ''const COMADMIN_E_REQUIRES_DIFFERENT_PLATFORM _HRESULT_TYPEDEF_(= &h80110449L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_CAN_NOT_EXPORT_APP_PROXY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Application Proxy is not exportable
				// '                    ' ''
				// '                    ''const COMADMIN_E_CAN_NOT_EXPORT_APP_PROXY _HRESULT_TYPEDEF_(= &h8011044AL)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_CAN_NOT_START_APP
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Failed to start application because it is either a library application or an application proxy
				// '                    ' ''
				// '                    ''const COMADMIN_E_CAN_NOT_START_APP     _HRESULT_TYPEDEF_(= &h8011044BL)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_CAN_NOT_EXPORT_SYS_APP
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' System application is not exportable
				// '                    ' ''
				// '                    ''const COMADMIN_E_CAN_NOT_EXPORT_SYS_APP _HRESULT_TYPEDEF_(= &h8011044CL)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_CANT_SUBSCRIBE_TO_COMPONENT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Can not subscribe to this component (the component may have been imported)
				// '                    ' ''
				// '                    ''const COMADMIN_E_CANT_SUBSCRIBE_TO_COMPONENT _HRESULT_TYPEDEF_(= &h8011044DL)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_EVENTCLASS_CANT_BE_SUBSCRIBER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An event class cannot also be a subscriber component
				// '                    ' ''
				// '                    ''const COMADMIN_E_EVENTCLASS_CANT_BE_SUBSCRIBER _HRESULT_TYPEDEF_(= &h8011044EL)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_LIB_APP_PROXY_INCOMPATIBLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Library applications and application proxies are incompatible
				// '                    ' ''
				// '                    ''const COMADMIN_E_LIB_APP_PROXY_INCOMPATIBLE _HRESULT_TYPEDEF_(= &h8011044FL)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_BASE_PARTITION_ONLY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' This function is valid for the base partition only
				// '                    ' ''
				// '                    ''const COMADMIN_E_BASE_PARTITION_ONLY   _HRESULT_TYPEDEF_(= &h80110450L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_START_APP_DISABLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' You cannot start an application that has been disabled
				// '                    ' ''
				// '                    ''const COMADMIN_E_START_APP_DISABLED    _HRESULT_TYPEDEF_(= &h80110451L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_CAT_DUPLICATE_PARTITION_NAME
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified partition name is already in use on this computer
				// '                    ' ''
				// '                    ''const COMADMIN_E_CAT_DUPLICATE_PARTITION_NAME _HRESULT_TYPEDEF_(= &h80110457L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_CAT_INVALID_PARTITION_NAME
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified partition name is invalid. Check that the name contains at least one visible character
				// '                    ' ''
				// '                    ''const COMADMIN_E_CAT_INVALID_PARTITION_NAME _HRESULT_TYPEDEF_(= &h80110458L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_CAT_PARTITION_IN_USE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The partition cannot be deleted because it is the default partition for one or more users
				// '                    ' ''
				// '                    ''const COMADMIN_E_CAT_PARTITION_IN_USE  _HRESULT_TYPEDEF_(= &h80110459L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_FILE_PARTITION_DUPLICATE_FILES
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The partition cannot be exported, because one or more components in the partition have the same file name
				// '                    ' ''
				// '                    ''const COMADMIN_E_FILE_PARTITION_DUPLICATE_FILES _HRESULT_TYPEDEF_(= &h8011045AL)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_CAT_IMPORTED_COMPONENTS_NOT_ALLOWED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Applications that contain one or more imported components cannot be installed into a non-base partition
				// '                    ' ''
				// '                    ''const COMADMIN_E_CAT_IMPORTED_COMPONENTS_NOT_ALLOWED _HRESULT_TYPEDEF_(= &h8011045BL)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_AMBIGUOUS_APPLICATION_NAME
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The application name is not unique and cannot be resolved to an application id
				// '                    ' ''
				// '                    ''const COMADMIN_E_AMBIGUOUS_APPLICATION_NAME _HRESULT_TYPEDEF_(= &h8011045CL)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_AMBIGUOUS_PARTITION_NAME
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The partition name is not unique and cannot be resolved to a partition id
				// '                    ' ''
				// '                    ''const COMADMIN_E_AMBIGUOUS_PARTITION_NAME _HRESULT_TYPEDEF_(= &h8011045DL)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_REGDB_NOTINITIALIZED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The COM+ registry database has not been initialized
				// '                    ' ''
				// '                    ''const COMADMIN_E_REGDB_NOTINITIALIZED  _HRESULT_TYPEDEF_(= &h80110472L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_REGDB_NOTOPEN
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The COM+ registry database is not open
				// '                    ' ''
				// '                    ''const COMADMIN_E_REGDB_NOTOPEN         _HRESULT_TYPEDEF_(= &h80110473L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_REGDB_SYSTEMERR
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The COM+ registry database detected a system error
				// '                    ' ''
				// '                    ''const COMADMIN_E_REGDB_SYSTEMERR       _HRESULT_TYPEDEF_(= &h80110474L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_REGDB_ALREADYRUNNING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The COM+ registry database is already running
				// '                    ' ''
				// '                    ''const COMADMIN_E_REGDB_ALREADYRUNNING  _HRESULT_TYPEDEF_(= &h80110475L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_MIG_VERSIONNOTSUPPORTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' This version of the COM+ registry database cannot be migrated
				// '                    ' ''
				// '                    ''const COMADMIN_E_MIG_VERSIONNOTSUPPORTED _HRESULT_TYPEDEF_(= &h80110480L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_MIG_SCHEMANOTFOUND
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The schema version to be migrated could not be found in the COM+ registry database
				// '                    ' ''
				// '                    ''const COMADMIN_E_MIG_SCHEMANOTFOUND    _HRESULT_TYPEDEF_(= &h80110481L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_CAT_BITNESSMISMATCH
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' There was a type mismatch between binaries
				// '                    ' ''
				// '                    ''const COMADMIN_E_CAT_BITNESSMISMATCH   _HRESULT_TYPEDEF_(= &h80110482L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_CAT_UNACCEPTABLEBITNESS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A binary of unknown or invalid type was provided
				// '                    ' ''
				// '                    ''const COMADMIN_E_CAT_UNACCEPTABLEBITNESS _HRESULT_TYPEDEF_(= &h80110483L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_CAT_WRONGAPPBITNESS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' There was a type mismatch between a binary and an application
				// '                    ' ''
				// '                    ''const COMADMIN_E_CAT_WRONGAPPBITNESS   _HRESULT_TYPEDEF_(= &h80110484L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_CAT_PAUSE_RESUME_NOT_SUPPORTED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The application cannot be paused or resumed
				// '                    ' ''
				// '                    ''const COMADMIN_E_CAT_PAUSE_RESUME_NOT_SUPPORTED _HRESULT_TYPEDEF_(= &h80110485L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_CAT_SERVERFAULT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The COM+ Catalog Server threw an exception during e_runution
				// '                    ' ''
				// '                    ''const COMADMIN_E_CAT_SERVERFAULT       _HRESULT_TYPEDEF_(= &h80110486L)

				// '                    ' ''
				// '                    ''COMPLUS Queued component errors
				// '                    ' ''
				// '                    ' ''
				// '                    ''MessageId: COMQC_E_APPLICATION_NOT_QUEUED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Only COM+ Applications marked "queued" can be invoked using the "queue" moniker
				// '                    ' ''
				// '                    ''const COMQC_E_APPLICATION_NOT_QUEUED   _HRESULT_TYPEDEF_(= &h80110600L)

				// '                    ' ''
				// '                    ''MessageId: COMQC_E_NO_QUEUEABLE_INTERFACES
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' At least one interface must be marked "queued" in order to create a queued component instance with the "queue" moniker
				// '                    ' ''
				// '                    ''const COMQC_E_NO_QUEUEABLE_INTERFACES  _HRESULT_TYPEDEF_(= &h80110601L)

				// '                    ' ''
				// '                    ''MessageId: COMQC_E_QUEUING_SERVICE_NOT_AVAILABLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' MSMQ is required for the requested operation and is not installed
				// '                    ' ''
				// '                    ''const COMQC_E_QUEUING_SERVICE_NOT_AVAILABLE _HRESULT_TYPEDEF_(= &h80110602L)

				// '                    ' ''
				// '                    ''MessageId: COMQC_E_NO_IPERSISTSTREAM
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Unable to marshal an interface that does not support IPersistStream
				// '                    ' ''
				// '                    ''const COMQC_E_NO_IPERSISTSTREAM        _HRESULT_TYPEDEF_(= &h80110603L)

				// '                    ' ''
				// '                    ''MessageId: COMQC_E_BAD_MESSAGE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The message is improperly formatted or was damaged in transit
				// '                    ' ''
				// '                    ''const COMQC_E_BAD_MESSAGE              _HRESULT_TYPEDEF_(= &h80110604L)

				// '                    ' ''
				// '                    ''MessageId: COMQC_E_UNAUTHENTICATED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' An unauthenticated message was received by an application that accepts only authenticated messages
				// '                    ' ''
				// '                    ''const COMQC_E_UNAUTHENTICATED          _HRESULT_TYPEDEF_(= &h80110605L)

				// '                    ' ''
				// '                    ''MessageId: COMQC_E_UNTRUSTED_ENQUEUER
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The message was requeued or moved by a user not in the "QC Trusted User" role
				// '                    ' ''
				// '                    ''const COMQC_E_UNTRUSTED_ENQUEUER       _HRESULT_TYPEDEF_(= &h80110606L)

				// '                    ' ''
				// '                    ''The range = &h700-= &h7ff is reserved for MSDTC errors.
				// '                    ' ''
				// '                    ' ''
				// '                    ''MessageId: MSDTC_E_DUPLICATE_RESOURCE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Cannot create a duplicate resource of type Distributed Transaction Coordinator
				// '                    ' ''
				// '                    ''const MSDTC_E_DUPLICATE_RESOURCE       _HRESULT_TYPEDEF_(= &h80110701L)

				// '                    ' ''
				// '                    ''More COMADMIN errors from = &h8**
				// '                    ' ''
				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_OBJECT_PARENT_MISSING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' One of the objects being inserted or updated does not belong to a valid parent collection
				// '                    ' ''
				// '                    ''const COMADMIN_E_OBJECT_PARENT_MISSING _HRESULT_TYPEDEF_(= &h80110808L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_OBJECT_DOES_NOT_EXIST
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' One of the specified objects cannot be found
				// '                    ' ''
				// '                    ''const COMADMIN_E_OBJECT_DOES_NOT_EXIST _HRESULT_TYPEDEF_(= &h80110809L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_APP_NOT_RUNNING
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified application is not currently running
				// '                    ' ''
				// '                    ''const COMADMIN_E_APP_NOT_RUNNING       _HRESULT_TYPEDEF_(= &h8011080AL)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_INVALID_PARTITION
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The partition(s) specified are not valid.
				// '                    ' ''
				// '                    ''const COMADMIN_E_INVALID_PARTITION     _HRESULT_TYPEDEF_(= &h8011080BL)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_SVCAPP_NOT_POOLABLE_OR_RECYCLABLE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' COM+ applications that run as NT service may not be pooled or recycled
				// '                    ' ''
				// '                    ''const COMADMIN_E_SVCAPP_NOT_POOLABLE_OR_RECYCLABLE _HRESULT_TYPEDEF_(= &h8011080DL)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_USER_IN_SET
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' One or more users are already assigned to a local partition set.
				// '                    ' ''
				// '                    ''const COMADMIN_E_USER_IN_SET           _HRESULT_TYPEDEF_(= &h8011080EL)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_CANTRECYCLELIBRARYAPPS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Library applications may not be recycled.
				// '                    ' ''
				// '                    ''const COMADMIN_E_CANTRECYCLELIBRARYAPPS _HRESULT_TYPEDEF_(= &h8011080FL)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_CANTRECYCLESERVICEAPPS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Applications running as NT services may not be recycled.
				// '                    ' ''
				// '                    ''const COMADMIN_E_CANTRECYCLESERVICEAPPS _HRESULT_TYPEDEF_(= &h80110811L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_PROCESSALREADYRECYCLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The process has already been recycled.
				// '                    ' ''
				// '                    ''const COMADMIN_E_PROCESSALREADYRECYCLED _HRESULT_TYPEDEF_(= &h80110812L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_PAUSEDPROCESSMAYNOTBERECYCLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A paused process may not be recycled.
				// '                    ' ''
				// '                    ''const COMADMIN_E_PAUSEDPROCESSMAYNOTBERECYCLED _HRESULT_TYPEDEF_(= &h80110813L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_CANTMAKEINPROCSERVICE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Library applications may not be NT services.
				// '                    ' ''
				// '                    ''const COMADMIN_E_CANTMAKEINPROCSERVICE _HRESULT_TYPEDEF_(= &h80110814L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_PROGIDINUSEBYCLSID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The ProgID provided to the copy operation is invalid. The ProgID is in use by another registered CLSID.
				// '                    ' ''
				// '                    ''const COMADMIN_E_PROGIDINUSEBYCLSID    _HRESULT_TYPEDEF_(= &h80110815L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_DEFAULT_PARTITION_NOT_IN_SET
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The partition specified as default is not a member of the partition set.
				// '                    ' ''
				// '                    ''const COMADMIN_E_DEFAULT_PARTITION_NOT_IN_SET _HRESULT_TYPEDEF_(= &h80110816L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_RECYCLEDPROCESSMAYNOTBEPAUSED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A recycled process may not be paused.
				// '                    ' ''
				// '                    ''const COMADMIN_E_RECYCLEDPROCESSMAYNOTBEPAUSED _HRESULT_TYPEDEF_(= &h80110817L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_PARTITION_ACCESSDENIED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Access to the specified partition is denied.
				// '                    ' ''
				// '                    ''const COMADMIN_E_PARTITION_ACCESSDENIED _HRESULT_TYPEDEF_(= &h80110818L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_PARTITION_MSI_ONLY
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Only Application Files (*.MSI files) can be installed into partitions.
				// '                    ' ''
				// '                    ''const COMADMIN_E_PARTITION_MSI_ONLY    _HRESULT_TYPEDEF_(= &h80110819L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_LEGACYCOMPS_NOT_ALLOWED_IN_1_0_FORMAT
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Applications containing one or more legacy components may not be exported to 1.0 format.
				// '                    ' ''
				// '                    ''const COMADMIN_E_LEGACYCOMPS_NOT_ALLOWED_IN_1_0_FORMAT _HRESULT_TYPEDEF_(= &h8011081AL)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_LEGACYCOMPS_NOT_ALLOWED_IN_NONBASE_PARTITIONS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Legacy components may not exist in non-base partitions.
				// '                    ' ''
				// '                    ''const COMADMIN_E_LEGACYCOMPS_NOT_ALLOWED_IN_NONBASE_PARTITIONS _HRESULT_TYPEDEF_(= &h8011081BL)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_COMP_MOVE_SOURCE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A component cannot be moved (or copied) from the System Application, an application proxy or a non-changeable application
				// '                    ' ''
				// '                    ''const COMADMIN_E_COMP_MOVE_SOURCE      _HRESULT_TYPEDEF_(= &h8011081CL)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_COMP_MOVE_DEST
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A component cannot be moved (or copied) to the System Application, an application proxy or a non-changeable application
				// '                    ' ''
				// '                    ''const COMADMIN_E_COMP_MOVE_DEST        _HRESULT_TYPEDEF_(= &h8011081DL)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_COMP_MOVE_PRIVATE
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' A private component cannot be moved (or copied) to a library application or to the base partition
				// '                    ' ''
				// '                    ''const COMADMIN_E_COMP_MOVE_PRIVATE     _HRESULT_TYPEDEF_(= &h8011081EL)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_BASEPARTITION_REQUIRED_IN_SET
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The Base Application Partition exists in all partition sets and cannot be removed.
				// '                    ' ''
				// '                    ''const COMADMIN_E_BASEPARTITION_REQUIRED_IN_SET _HRESULT_TYPEDEF_(= &h8011081FL)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_CANNOT_ALIAS_EVENTCLASS
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Alas, Event Class components cannot be aliased.
				// '                    ' ''
				// '                    ''const COMADMIN_E_CANNOT_ALIAS_EVENTCLASS _HRESULT_TYPEDEF_(= &h80110820L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_PRIVATE_ACCESSDENIED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' Access is denied because the component is private.
				// '                    ' ''
				// '                    ''const COMADMIN_E_PRIVATE_ACCESSDENIED  _HRESULT_TYPEDEF_(= &h80110821L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_SAFERINVALID
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified SAFER level is invalid.
				// '                    ' ''
				// '                    ''const COMADMIN_E_SAFERINVALID          _HRESULT_TYPEDEF_(= &h80110822L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_REGISTRY_ACCESSDENIED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' The specified user cannot write to the system registry
				// '                    ' ''
				// '                    ''const COMADMIN_E_REGISTRY_ACCESSDENIED _HRESULT_TYPEDEF_(= &h80110823L)

				// '                    ' ''
				// '                    ''MessageId: COMADMIN_E_PARTITIONS_DISABLED
				// '                    ' ''
				// '                    '''' <summary>
				// '                    ' ''
				// '                    '' COM+ partitions are currently disabled.
				// '                    ' ''
				// '                    ''const COMADMIN_E_PARTITIONS_DISABLED   _HRESULT_TYPEDEF_(= &h80110824L)

				// '                    ''#endif'_WINERROR_

				#endregion

			}


			internal sealed partial class Win32ExceptionEx : System.ComponentModel.Win32Exception
			{

				#region Constructor
				private Win32ExceptionEx(int iError, string? ErrorAction = null)
					: base(iError, ErrorAction) { }

				public Win32ExceptionEx(Win32Exception wex)
					: base(wex.NativeErrorCode) { }

				//public Win32ExceptionEx(Exception EX)
				//    : this(EX as Win32Exception) { }


				public Win32ExceptionEx(string? ErrorAction = null)
					: this(Marshal.GetLastWin32Error(), ErrorAction) { }

				public Win32ExceptionEx(Win32Errors err, string? ErrorAction = null)
					: this(
						  (int)err,
						  ($"[{(int)err} - {err}]: {GetErrorMessage(err)}" + (ErrorAction.e_IsNullOrWhiteSpace() ? String.Empty : ($"\nError source: {ErrorAction}"))).Trim())
				{ }



				#endregion

				public new Win32Errors NativeErrorCode { get => (Win32Errors)Convert.ToInt32(base.NativeErrorCode); }

				public string FullMessage { get => string.Format($"[{NativeErrorCode}] {Message}"); }

				public override string ToString() => FullMessage;
			}

			#region API FormatMessage/ GetLastError/SetLastError

			#region FormatMessage
			[Flags()]
			internal enum FormatMessageFlags : int
			{
				FORMAT_MESSAGE_ALLOCATE_BUFFER = 0x100,
				FORMAT_MESSAGE_IGNORE_INSERTS = 0x200,
				FORMAT_MESSAGE_FROM_STRING = 0x400,
				FORMAT_MESSAGE_FROM_HMODULE = 0x800,
				FORMAT_MESSAGE_FROM_SYSTEM = 0x1000,
				FORMAT_MESSAGE_ARGUMENT_ARRAY = 0x2000,
				FORMAT_MESSAGE_MAX_WIDTH_MASK = 0xFF
			}

			//[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			//internal static extern int FormatMessage(
			//    [In] FormatMessageFlags dwFlags,
			//    [In] IntPtr lpSource,
			//    [In] Win32Errors dwMessageId,
			//    [In] int dwLanguageId,
			//    [In, Out, MarshalAs(UnmanagedType.LPTStr)] ref StringBuilder lpBuffer,
			//    [In] int nSize,
			//    [In, Optional] IntPtr Arguments);


			[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			internal static extern int FormatMessage(
				[In] FormatMessageFlags dwFlags,
				[In] IntPtr lpSource,
				[In] int dwMessageId,
				[In] int dwLanguageId,
				[In, Out, MarshalAs(UnmanagedType.LPTStr)] ref StringBuilder? lpBuffer,
				[In] int nSize,
				[In, Optional] IntPtr Arguments);


			#endregion

			[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			internal static extern Win32Errors GetLastError();
			[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			internal static extern void SetLastError(Win32Errors dwErrCode = Win32Errors.ERROR_SUCCESS);

			#region SetLastErrorEx

			internal enum SetLastErrorExFlags : int
			{
				SLE_ERROR = 0x1,
				SLE_MINORERROR = 0x2,
				SLE_WARNING = 0x3
			}

			[DllImport(core.WINDLL_USER, SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			internal static extern void SetLastErrorEx(int dwErrCode, SetLastErrorExFlags dwType);
			#endregion


			internal static (string ErrorMessage, bool MessageFound) GetErrorMessage(int iCode)
			{
				try
				{
					StringBuilder? Buffer = null;
					int iLen = FormatMessage(
						FormatMessageFlags.FORMAT_MESSAGE_FROM_SYSTEM |
						FormatMessageFlags.FORMAT_MESSAGE_IGNORE_INSERTS |
						FormatMessageFlags.FORMAT_MESSAGE_ALLOCATE_BUFFER,
						IntPtr.Zero,
						iCode,
						0,
						ref Buffer,
						0,
						IntPtr.Zero);

					if (iLen > 0)
					{
						string sError = Buffer!.ToString();
						Buffer = null;//Free mem;
						sError = sError.e_RemoveAtEnd(constants.vbCrLf);
						return (sError, true);
					}
					//Can't read error message!
				}
				catch { }
				return ($"Unknown Error: {iCode}", false);
			}

			internal static string GetErrorMessage(Win32Errors eCode)
			{
				var (ErrorMessage, MessageFound) = GetErrorMessage((int)eCode);
				return MessageFound
					? ErrorMessage
					: eCode.ToString();
			}

			#endregion




			internal static class WinsockErrors
			{
				[DllImport(core.WINDLL_WS232, CharSet = CharSet.Auto, SetLastError = true)]
				internal static extern int WSAGetLastError();

				public static string WSAGetError(int? iCode = null)
				{
					var (ErrorMessage, MessageFound) = GetErrorMessage(iCode ??= WSAGetLastError());
					return MessageFound
						? ErrorMessage
						: $"Unknown WSA Error: {iCode}";
				}
			}
		}


		internal static partial class SafeHandles
		{

			//[SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]
			[DebuggerDisplay("Win32FilebHandle={handle}")]
			internal partial class Win32FileHandle : Microsoft.Win32.SafeHandles.SafeHandleZeroOrMinusOneIsInvalid
			{
				public Win32FileHandle(bool OwnsHandle = true) : base(OwnsHandle) { SetHandle(IntPtr.Zero); }

				public Win32FileHandle(IntPtr hFile, bool OwnsHandle = true) : this(OwnsHandle) { SetHandle(hFile); }

				public new void Close() => ReleaseHandle();

				protected override bool ReleaseHandle()
				{
					if (IsInvalid) return true;

					bool bResult = WinAPI.core.CloseHandle(handle);
					if (bResult) SetHandle(IntPtr.Zero);
					return bResult;
				}
			}

			//[SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]
			[DebuggerDisplay("Win32LibHandle={handle}")]
			internal partial class Win32LibHandle : Microsoft.Win32.SafeHandles.SafeHandleZeroOrMinusOneIsInvalid
			{

				#region LoadLibrary / FreeLibrary

				[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
				internal static extern IntPtr GetModuleHandle(string lpModuleName);


				[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
				internal static extern IntPtr LoadLibrary(string lpLibFileName);

				internal enum LoadLibraryExFlags : int
				{
					DONT_RESOLVE_DLL_REFERENCES = 0x1,
					LOAD_LIBRARY_AS_DATAFILE = 0x2,
					LOAD_IGNORE_CODE_AUTHZ_LEVEL = 0x10,
					LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE = 0x40,
					LOAD_LIBRARY_AS_IMAGE_RESOURCE = 0x20,
					LOAD_WITH_ALTERED_SEARCH_PATH = 0x8
				}

				[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
				internal static extern IntPtr LoadLibraryEx([MarshalAs(UnmanagedType.LPTStr)] string lpLibFileName, IntPtr hFile, LoadLibraryExFlags dwFlags);


				[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
				internal static extern bool FreeLibrary(IntPtr hLibModule);
				#endregion


				[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
				internal static extern IntPtr GetProcAddress(IntPtr hModule, string lpProcName);

				internal IntPtr GetProcAddress(string lpProcName)
				{
					return GetProcAddress(DangerousGetHandle(), lpProcName);
				}

				/// <summary>Только для информации. НИГДЕ НЕ ПРИМЕНЯЕТСЯ!</summary>
				public readonly string? LibFile;

				#region Constructor/destructor
				[DebuggerNonUserCode, DebuggerStepThrough]
				public Win32LibHandle(IntPtr hLib, bool ownsHandle = true, string? sLibFileName = null) : base(ownsHandle)
				{
					if (hLib.e_IsNotValid()) throw new ArgumentNullException(nameof(hLib));
					SetHandle(hLib);
					LibFile = sLibFileName;
					if (IsInvalid) Errors.ThrowLastWin23Error();
				}

				[DebuggerNonUserCode, DebuggerStepThrough]
				public Win32LibHandle(string LibFileName) : this(LibFileName, LoadLibraryExFlags.LOAD_LIBRARY_AS_DATAFILE) { }

				[DebuggerNonUserCode, DebuggerStepThrough]
				public Win32LibHandle(string sLibFileName, LoadLibraryExFlags Flags, bool ownsHandle = true) : base(ownsHandle)
				{
					SetHandle(LoadLibraryEx(sLibFileName, IntPtr.Zero, Flags));
					LibFile = sLibFileName;
					if (IsInvalid) Errors.ThrowLastWin23Error();
				}

				[MethodImpl(MethodImplOptions.AggressiveInlining)]
				protected override bool ReleaseHandle()
				{
					if (IsInvalid) return true;
					bool bResult = FreeLibrary(handle);
					if (bResult) SetHandle(IntPtr.Zero);
					return bResult;
				}
				#endregion




				[MethodImpl(MethodImplOptions.AggressiveInlining)]
				internal static Win32LibHandle GetRunningLibraryOrLoad(string LibFileName, LoadLibraryExFlags LLF, bool NotUnloadLibOnDispose = false)
				{

					// Dim ownsHandle As bool  = False
					// check first to see if the module is already mapped into this process.
					var hModule = GetModuleHandle(LibFileName);
					if (hModule.e_IsValid())
						return new Win32LibHandle(hModule, false, LibFileName);

					// need to load module into this process.
					return new Win32LibHandle(LibFileName, LLF, NotUnloadLibOnDispose);
				}


				[MethodImpl(MethodImplOptions.AggressiveInlining)]
				internal static Win32LibHandle GetRunningLibraryOrLoad_AsResource(string LibFileName, bool NotUnloadLibOnDispose = false)
				{
					return GetRunningLibraryOrLoad(LibFileName, LoadLibraryExFlags.LOAD_LIBRARY_AS_IMAGE_RESOURCE, NotUnloadLibOnDispose);
				}

				#region IsProcedureExported - used to determine if an API function is exported.
				/// <summary>used to determine if an API function is exported.</summary>
				public static bool IsProcedureExported(string ModuleName, string ProcName, bool NotUnloadLibOnDispose = false)
				{
					bool bNeedFreeLib = false;
					// check first to see if the module is already mapped into this process.
					var hModule = GetModuleHandle(ModuleName);

					// need to load module into this process.
					if (!hModule.e_IsValid())
					{
						hModule = LoadLibrary(ModuleName);
						bNeedFreeLib = !NotUnloadLibOnDispose;
					}

					try
					{
						// if the module is mapped, check procedure address to verify it's exported.
						if (hModule.e_IsValid())
						{
							var lpProc = GetProcAddress(hModule, ProcName);
							return lpProc.e_IsValid();
						}
					}
					finally
					{
						// unload library if we loaded it here.
						if (bNeedFreeLib)
							FreeLibrary(hModule);
					}

					return false;
				}
				#endregion




				#region Operator
				// Shared Operator =(ByVal Mem1 As LocalMemory, ByVal LMB2 As LocalMemory) As Boolean
				// If (Mem1.IsValid AndAlso LMB2.IsValid) Then Return (Mem1.DangerousGetHandle = LMB2.DangerousGetHandle)
				// Return False
				// End Operator
				// Shared Operator <>(ByVal LMB1 As LocalMemory, ByVal LMB2 As LocalMemory) As Boolean
				// Return (Not (LMB1 = LMB2))
				// End Operator

				public static implicit operator IntPtr(Win32LibHandle WLH)
				{
					return WLH.DangerousGetHandle();
				}


				// Public Shared Widening Operator CType(ByVal LMB1 As LocalMemory) As String
				// Return LMB1.ToString
				// End Operator
				// Public Shared Widening Operator CType(ByVal LMB1 As LocalMemory) As Integer()
				// Return LMB1.ToIntegers
				// End Operator
				// Public Shared Widening Operator CType(ByVal LMB1 As LocalMemory) As System.Drawing.Point()
				// Return LMB1.ToPoints
				// End Operator





				#endregion



			}
		}


		//[SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]
		internal static partial class core
		{


			internal const int ANYSIZE_ARRAY = 1;
			internal const uint MAXDWORD = 0xFFFFFFFFu;
			internal const int MINCHAR = 0x80;
			internal const int MAXCHAR = 0x7F;
			internal const int MINSHORT = 0x8000;
			internal const int MAXSHORT = 0x7FFF;
			internal const uint MINLONG = 0x80000000u;
			internal const int MAXLONG = 0x7FFFFFFF;
			internal const uint MAXBYTE = 0xFFU;
			internal const int MAXWORD = 0xFFFF;
			internal const int S_OK = 0;


			internal const string DISPLAY = "DISPLAY";
			internal const string WINDLL_KERNEL = "KERNEL32.dll";
			internal const string WINDLL_USER = "user32.dll";
			internal const string WINDLL_USERENV = "Userenv.dll";
			internal const string WINDLL_ADVAPI32 = "advapi32.dll";
			internal const string WINDLL_GDI = "gdi32.dll";
			internal const string WINDLL_WINSPOOL = "winspool.drv";
			internal const string WINDLL_SHELL = "Shell32.dll";
			internal const string WINDLL_COMCTL = "comctl32.dll";
			internal const string WINDLL_SHLWAPI = "SHLWAPI.dll";
			internal const string WINDLL_NETAPI = "Netapi32.dll";
			internal const string WINDLL_MPR = "Mpr.dll";
			internal const string WINDLL_THEME = "uxtheme.dll";
			internal const string WINDLL_TOOLHELP = WINDLL_KERNEL;
			internal const string WINDLL_DWMAPI = "dwmapi.dll";
			internal const string WINDLL_avicap32 = "avicap32.dll";
			internal const string WINDLL_POWRPROF = "powrprof.dll";
			internal const string WINDLL_NTDLL = "ntdll.dll";
			internal const string WINDLL_MSVCRT = "msvcrt.dll";
			internal const string WINDLL_wlanapi = "wlanapi.dll";
			internal const string WINDLL_iphlpapi = "iphlpapi.dll";
			internal const string WINDLL_URL = "url.dll";
			internal const string WINDLL_WS232 = "Ws2_32.dll";



			internal const int STATUS_WAIT_0 = 0x0;
			internal const int STATUS_ABANDONED_WAIT_0 = 0x80;
			internal const int STATUS_USER_APC = 0xC0;
			internal const int STATUS_TIMEOUT = 0x102;
			internal const int STATUS_PENDING = 0x103;



			internal const uint STANDARD_RIGHTS_REQUIRED = 0xF0000;
			internal const uint GENERIC_READ = (uint)IO.NativeFileAccess.GenericRead;





			#region Универсальный метод получения структур WinAPI через указатель на буфер памяти

			#region Example Of Use
			// Dim A = UniversalGetWin32Structure(Of SPI_NONCLIENTMETRICS)(Sub(ByRef R1)
			// R1.cbSize = Marshal.SizeOf(R1)
			// End Sub,
			// Sub(Ptr)
			// If (Not SystemParametersInfo(SPI.SPI_GETNONCLIENTMETRICS, 0, Ptr)) Then Throw New ComponentModel.Win32Exception
			// End Sub)

			// Или можно так
			// Return UOM.WinAPI.UniversalGetWin32Structure(Of SPI_NONCLIENTMETRICS)(
			// Sub(ByRef R1) R1.cbSize = Marshal.SizeOf(R1),
			// Sub(Ptr) If (Not SystemParametersInfo(SPI.SPI_GETNONCLIENTMETRICS, 0, Ptr)) Then Throw New ComponentModel.Win32Exception)
			#endregion

			internal delegate void OnStructureCreated<T>(ref T rStrucr) where T : struct;
			/// <summary>Универсальный метод получения структур WinAPI через буфер в памяти</summary>
			/// <typeparam name="T">Тип структуры</typeparam>
			/// <param name="initNewStructure">Действие после создания нового экземпляра структуры (инициализация полей, размеров и т.д.). Структура передаётся по-ссылке</param>
			/// <param name="mainAPI">Метод главного вызова API, с передачей ему указателя на буфер, который потом будет преобразован в структуру</param>
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			internal static T UniversalGetWin32Structure<T>(OnStructureCreated<T> initNewStructure, Action<IntPtr> mainAPI) where T : struct
			{
				var rStruct = new T();
				initNewStructure?.Invoke(ref rStruct);                // Вызываем метод инициализации новой структуры - заполение полей, указание размеров и т.д., что требует конкретная API
				using var mem = rStruct.e_StructureToMemoryBlock(); // Создаём буффер в памяти размером со структуру и копируем содержимое структуры в новый буфер																	
				mainAPI.Invoke(mem.DangerousGetHandle());          // Главный вызов API, с указателем на буфер в памяти																														
				return mem.DangerousGetHandle().e_ToStructure<T>();           // Преобразование буфера обратно в структуру
			}

			#endregion



			[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			// ms-help://MS.MSDNQTR.2003APR.1033/sysinfo/base/closehandle.htm
			internal static extern bool CloseHandle(IntPtr hObject);


		}

		/// <summary>Multithreading and thread syncronisation helpers</summary>
		internal static class MTSync
		{

			#region Event APIs

			//[SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]
			[DebuggerDisplay("Win32Event: hEvent:{handle}")]
			internal sealed partial class Win32Event : Microsoft.Win32.SafeHandles.SafeHandleZeroOrMinusOneIsInvalid
			{

				#region Constructor\Destructor

				public Win32Event(
					IntPtr EventSecurityAttributes,
					bool ManualReset,
					bool InitialState,
					string? Name = null) : base(true)
				{
					ReleaseHandle();
					var hEvent = CreateEvent(EventSecurityAttributes, ManualReset, InitialState, Name);
					SetHandle(hEvent);
					if (IsInvalid) Errors.ThrowLastWin23Error();
				}

				public Win32Event(
					bool ManualReset,
					bool InitialState,
					string? Name = null) : this(IntPtr.Zero, ManualReset, InitialState, Name) { }


				public Win32Event(IntPtr hEvent, bool OwnHandle) : base(OwnHandle)
				{
					SetHandle(hEvent);
					if (IsInvalid) Errors.ThrowLastWin23Error();
				}

				protected override bool ReleaseHandle()
				{
					if (!IsInvalid)
					{
						if (!core.CloseHandle(DangerousGetHandle())) return false;
						SetHandle(IntPtr.Zero);
					}
					return true;
				}
				#endregion

				internal WaitResults WaitForSingleObject(int Milliseconds = Timeout.Infinite)
					=> WinAPI.MTSync.WaitForSingleObject(DangerousGetHandle(), Milliseconds);

			}


			[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			internal static extern IntPtr CreateEvent(
				IntPtr lpEventSecurityAttributes,
				bool bManualReset,
				bool bInitialState,
				[MarshalAs(UnmanagedType.LPTStr)] string? lpName);

			internal enum WaitResults : uint
			{
				WAIT_FAILED = 0xFFFFFFFF,

				/// <summary>The state of the specified object is signaled.</summary>
				WAIT_OBJECT_0 = core.STATUS_WAIT_0,

				/// <summary>The specified object is a mutex object that was not released by the thread that owned the mutex object before the owning thread terminated. Ownership of the mutex object is granted to the calling thread, and the mutex is set to nonsignaled.</summary>
				WAIT_ABANDONED = core.STATUS_ABANDONED_WAIT_0 + 0
			}

			[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			internal static extern WaitResults WaitForSingleObject(IntPtr hHandle, int dwMilliseconds = Timeout.Infinite);


			#endregion

		}


		internal static class Memory
		{

			/// <summary>PInvoke, для CRT функции memcmp()</summary>
			[DllImport(core.WINDLL_MSVCRT, CallingConvention = CallingConvention.Cdecl)]
			public static extern int memcmp(byte[] p_BytesLeft, byte[] p_BytesRight, long p_Count);


			[Flags()]
			internal enum Flags : int
			{
				LMEM_FIXED = 0x0,
				LMEM_MOVEABLE = 0x2,
				LMEM_NOCOMPACT = 0x10,
				LMEM_NODISCARD = 0x20,
				LMEM_ZEROINIT = 0x40,
				LMEM_MODIFY = 0x80,
				LMEM_DISCARDABLE = 0xF00,
				LMEM_VALID_FLAGS = 0xF72,
				LMEM_INVALID_HANDLE = 0x8000,
				LHND = LMEM_MOVEABLE + LMEM_ZEROINIT,
				//LPTR = LMEM_FIXED + LMEM_ZEROINIT, = LMEM_ZEROINIT!
				NONZEROLHND = LMEM_MOVEABLE,
				NONZEROLPTR = LMEM_FIXED
			}

			[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			internal static extern IntPtr LocalAlloc(Flags wFlags, int wBytes);


			[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			internal static extern IntPtr LocalFree(IntPtr hMem);


			#region Global/Local Size
			[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			internal static extern uint LocalSize(IntPtr hMem);


			[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			internal static extern ulong GlobalSize(IntPtr hMem);
			#endregion


			/// <summary>If the function succeeds, the return value specifies the allocation values and the lock count for the memory object. 
			/// If the function fails, the return value is GMEM_INVALID_HANDLE, indicating that the global handle is not valid. To get extended error information, call GetLastError. 
			/// The low-order byte of the low-order word of the return value contains the lock count of the object. To retrieve the lock count from the return value, use the GMEM_LOCKCOUNT mask with the bitwise AND operator. The lock count of memory objects allocated with GMEM_FIXED is always zero. 
			/// The high-order byte of the low-order word of the return value indicates the allocation values of the memory object. It can be zero or GMEM_DISCARDED.</summary>
			[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			internal static extern uint GlobalFlags(IntPtr hMem);


			/// <summary>If the function succeeds, the return value specifies the allocation values and the lock count for the memory object.
			/// If the function fails, the return value is LMEM_INVALID_HANDLE, indicating that the local handle is not valid. To get extended error information, call GetLastError.
			/// The low-order byte of the low-order word of the return value contains the lock count of the object. To retrieve the lock count from the return value, use the LMEM_LOCKCOUNT mask with the bitwise AND operator. The lock count of memory objects allocated with LMEM_FIXED is always zero.
			/// The high-order byte of the low-order word of the return value indicates the allocation values of the memory object. It can be zero or LMEM_DISCARDABLE.</summary>
			[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			internal static extern uint LocalFlags(IntPtr hMem);


			#region CopyMemory ZeroMemory FillMemory

			/// <summary>Note that if you declare the lpData parameter as String, you must pass it By Value.</summary>
			[DllImport(core.WINDLL_KERNEL, EntryPoint = "RtlMoveMemory", SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			internal static extern void CopyMemory(IntPtr Приёмник, IntPtr Источник, int Length);


			[DllImport(core.WINDLL_KERNEL, EntryPoint = "RtlZeroMemory", SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			internal static extern void ZeroMemory(IntPtr Приёмник, int nBytes);

			internal static void ZeroMemory(ref byte[] A, int? nBytes = null)
			{
				nBytes ??= A.Length;

				var GCH = GCHandle.Alloc(A);
				try
				{
					var ptrAP1 = Marshal.UnsafeAddrOfPinnedArrayElement(A, 0);
					ZeroMemory(ptrAP1, (int)nBytes);
				}
				finally { GCH.Free(); }
			}

			[DllImport(core.WINDLL_KERNEL, EntryPoint = "RtlFillMemory", SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			internal static extern void FillMemory(IntPtr Приёмник, int Length, byte FillByte);




			#endregion


			#region Memory Lock API

			/// <summary>Locks a local memory object and returns a pointer to the first byte of the object's memory block.</summary>
			/// <param name="hMem">A handle to the local memory object. This handle is returned by either the LocalAlloc or LocalReAlloc function.</param>
			/// <returns>If the function succeeds, the return value is a pointer to the first byte of the memory block.
			/// If the function fails, the return value null == . To get extended error information, call GetLastError.</returns>
			[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			internal static extern IntPtr GlobalLock(IntPtr hMem);
			[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			internal static extern bool GlobalUnlock(IntPtr hMem);

			/// <summary>Locks a local memory object and returns a pointer to the first byte of the object's memory block.</summary>
			/// <param name="hMem">A handle to the local memory object. This handle is returned by either the LocalAlloc or LocalReAlloc function.</param>
			/// <returns>If the function succeeds, the return value is a pointer to the first byte of the memory block.
			/// If the function fails, the return value null == . To get extended error information, call GetLastError.</returns>
			[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			internal static extern IntPtr LocalLock(IntPtr hMem);
			[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			internal static extern bool LocalUnlock(IntPtr hMem);



			#endregion



			/// <summary>Memory Block uses Marshal.AllocHGlobal</summary>
			//[SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]
			[DebuggerDisplay("LocalMemory: hMem:{handle}, Lenght={Lenght}")]
			internal sealed class LocalMemory : Microsoft.Win32.SafeHandles.SafeHandleZeroOrMinusOneIsInvalid
			{

				private HandleRef _HandleRef = default;
				private ulong _Size = 0UL;
				public static LocalMemory INVALID = new(0);

				/// <summary>If true - uses LocalFree for release memory. If False - uses FreeHGlobal</summary>
				public readonly bool IsLocal = false;

				#region Constructor\Destructor
				/// <summary>HGlobal</summary>
				internal LocalMemory(ulong lSize) : base(true) => ReAlloc(lSize);

				internal LocalMemory(int iSize) : this((ulong)iSize) { }

				internal LocalMemory(byte[] abData) : base(true)
				{
					if (abData!.Length < 1) throw new ArgumentNullException(nameof(abData));
					ReAlloc((ulong)abData!.Length);
					Marshal.Copy(abData, 0, DangerousGetHandle(), abData.Length);
				}

				/// <summary>Init from Memory Handle</summary>
				/// <param name="bIsLocal">If true - uses LocalFree for release memory. If False - uses FreeHGlobal</param>
				internal LocalMemory(IntPtr hMem, bool OwnsHandle = true, bool bIsLocal = false) : base(OwnsHandle)
				{
					IsLocal = bIsLocal;
					SetHandle(hMem);
					if (IsInvalid) Errors.ThrowLastWin23Error();

					_HandleRef = new HandleRef(this, hMem);
					_Size = (IsLocal) ? LocalSize(hMem) : GlobalSize(hMem);
				}


				public void ZeroMemory(int? nBytes = null) { if (IsValid) uom.WinAPI.Memory.ZeroMemory(DangerousGetHandle(), (int)(nBytes ?? Lenght)); }

				internal void FillMemory(byte Data, int? nBytes = null) { if (IsValid) uom.WinAPI.Memory.FillMemory(DangerousGetHandle(), (int)(nBytes ?? Lenght), Data); }

				public void ReAlloc(ulong lSize)
				{
					if (IsLocal) throw new NotSupportedException("ReAlloc is not supported with IsLocal flag!");

					ReleaseHandle();
					if (lSize > 0)
					{
						int iSize = (int)lSize;
						var hMem = Marshal.AllocHGlobal(iSize);
						SetHandle(hMem);
						if (IsInvalid) Errors.ThrowLastWin23Error();
						_HandleRef = new HandleRef(this, hMem);
					}
					_Size = lSize;
				}

				protected override bool ReleaseHandle()
				{
					_HandleRef = default;
					if (IsValid)
					{
						if (IsLocal)
							LocalFree(DangerousGetHandle());
						else
							Marshal.FreeHGlobal(DangerousGetHandle());

						SetHandle(IntPtr.Zero);
						_Size = 0UL;
					}
					return true;
				}

				#endregion

				#region Properties

				public int Lenght => (int)_Size;

				public ulong Lenght64 => _Size;

				public bool IsValid => !IsInvalid;

				#endregion

				#region Public Methods

				// <DebuggerNonUserCode, DebuggerStepThrough>
				// Public Function ToStructure(Of T As Structure)() As T
				// Return Me.DangerousGetHandle.ToStructure(Of T)
				// End Function

				// Public Function ToStringAnsi(ByVal Lenght As Integer, Optional ByVal Offset As Integer = 0) As String
				// Dim NewPtr As New system.intptr(m_Ptr.ToInt32 + Offset)
				// Return Marshal.PtrToStringAnsi(NewPtr, Lenght)
				// End Function

				// '''<summary>Reads the string from the memory block.</summary>
				// '''<param name="iLenght">The length of the string to read, in characters.</param>
				// Public Function ToStringUni(ByVal iLenght As Integer,
				// Optional StringType As uom.constants.E_STRING_TYPES = E_STRING_TYPES.Uni) As String

				// If (iLenght <= 0) OrElse (Me.IsInvalid) Then Return vbNullString
				// If (iLenght > _Size) Then iLenght = Me.Lenght

				// Dim S = Me.DangerousGetHandle.PtrToString(Lenght, StringType)
				// Return S
				// End Function



				[DebuggerNonUserCode, DebuggerStepThrough]
				public void CopyFrom(IntPtr Source, int CopySize)
				{
					if (CopySize > Lenght) throw new OutOfMemoryException();
					CopyMemory(DangerousGetHandle(), Source, CopySize);
				}

				[DebuggerNonUserCode, DebuggerStepThrough]
				public void CopyTo(IntPtr Target, int CopySize)
				{
					if (CopySize > Lenght) throw new OutOfMemoryException();
					CopyMemory(Target, DangerousGetHandle(), CopySize);
				}

				[DebuggerNonUserCode, DebuggerStepThrough]
				public byte[] ToBytes() => DangerousGetHandle().e_PtrToBytes(Lenght);


				public short[] ToShorts()
				{
					int VAL_SIZE = Marshal.SizeOf(typeof(short));
					var Numbers = Array.Empty<short>();
					int iCount = (int)Math.Round(Lenght / (double)VAL_SIZE);
					if (iCount > 0)
					{
						Numbers = new short[iCount];
						int N, iOffset = default;
						var loopTo = iCount - 1;
						for (N = 0; N <= loopTo; N++)
						{
							Numbers[N] = Marshal.ReadInt16(DangerousGetHandle(), iOffset);
							iOffset += VAL_SIZE;
						}
					}

					return Numbers;
				}

				public int[] ToIntegers()
				{
					int VAL_SIZE = Marshal.SizeOf(typeof(int));
					var Numbers = Array.Empty<int>();
					int iCount = (int)Math.Round(Lenght / (double)VAL_SIZE);
					if (iCount > 0)
					{
						Numbers = new int[iCount];
						int N, iOffset = default;
						var loopTo = iCount - 1;
						for (N = 0; N <= loopTo; N++)
						{
							Numbers[N] = Marshal.ReadInt32(DangerousGetHandle(), iOffset);
							iOffset += VAL_SIZE;
						}
					}

					return Numbers;
				}

				public System.Drawing.Point[] ToPoints()
				{
					int VAL_SIZE = Marshal.SizeOf(typeof(System.Drawing.Point));
					var Numbers = Array.Empty<System.Drawing.Point>();
					int iCount = (int)Math.Round(Lenght / (double)VAL_SIZE);
					if (iCount > 0)
					{
						Numbers = new System.Drawing.Point[iCount];
						int N, iOffset = default;
						var loopTo = iCount - 1;
						for (N = 0; N <= loopTo; N++)
						{
							Numbers[N].X = Marshal.ReadInt32(DangerousGetHandle(), iOffset);
							Numbers[N].Y = Marshal.ReadInt32(DangerousGetHandle(), iOffset + (int)Math.Round(VAL_SIZE / 2d));
							iOffset += VAL_SIZE;
						}
					}
					return Numbers;
				}

				[Obsolete("Need Refactor inner call!", true)]
				public string[] ToStrings(int StringSize) => ToStrings(StringSize, Marshal.SystemDefaultCharSize);

				[Obsolete("Need Refactor!", true)]
				public string[] ToStrings(int stringSizeBytes, int CharSize)
				{
					List<string> lResult = new();
					int sringSizeChars = stringSizeBytes * CharSize;
					int iStringCount = (int)Math.Round(Lenght / (double)sringSizeChars);
					if (iStringCount > 0)
					{
						IntPtr ptr = DangerousGetHandle();
						for (int i = 1; i <= iStringCount; i++)
						{
							//TODO: NEED Refactor!
							string sValue = Marshal.PtrToStringAuto(ptr, stringSizeBytes)?.e_NString() ?? string.Empty;

							lResult.Add(sValue);
							ptr += sringSizeChars;
						}
					}
					return lResult.ToArray();
				}

				public string HexDump() => DangerousGetHandle().HexDump(Lenght);

				public override string ToString() => HexDump();

				public byte[] RAWData => ToBytes();

				public string RAWData_AsUnicode => Encoding.Unicode.GetString(RAWData, 0, RAWData.Length);

				public string RAWData_AsASCII => Encoding.ASCII.GetString(RAWData, 0, RAWData.Length);

				#endregion


				#region Operator
				public static bool operator ==(LocalMemory Mem1, LocalMemory LMB2) => (Mem1.IsValid && LMB2.IsValid) && (Mem1.DangerousGetHandle() == LMB2.DangerousGetHandle());

				public static bool operator !=(LocalMemory LMB1, LocalMemory LMB2) => !(LMB1 == LMB2);

				public static implicit operator IntPtr(LocalMemory LMB1) => LMB1.DangerousGetHandle();


				// Public Shared Widening Operator CType(ByVal LMB1 As LocalMemory) As String
				// Return LMB1.ToString
				// End Operator
				// Public Shared Widening Operator CType(ByVal LMB1 As LocalMemory) As Integer()
				// Return LMB1.ToIntegers
				// End Operator
				// Public Shared Widening Operator CType(ByVal LMB1 As LocalMemory) As System.Drawing.Point()
				// Return LMB1.ToPoints
				// End Operator





				#endregion


				/// <summary>Создаём пустой массив</summary>
				[DebuggerNonUserCode, DebuggerStepThrough]
				[MethodImpl(MethodImplOptions.AggressiveInlining)]
				public static byte[] CreateEmptyArray(int iSize) => new byte[iSize];

				public MemoryLock Lock() => new(this);

				public override bool Equals(object? obj)
					=> obj is LocalMemory memory && EqualityComparer<IntPtr>.Default.Equals(handle, memory.handle);

				public override int GetHashCode() => handle.GetHashCode();

				#region Class MemoryLock

				public partial class MemoryLock : Microsoft.Win32.SafeHandles.SafeHandleZeroOrMinusOneIsInvalid
				{
					protected readonly LocalMemory? _OwnerMemory = null;

					protected internal MemoryLock(LocalMemory M) : base(true)
					{
						_OwnerMemory = M;
						var hMem = (_OwnerMemory.IsLocal) ? LocalLock(_OwnerMemory.DangerousGetHandle()) : GlobalLock(_OwnerMemory.DangerousGetHandle());
						SetHandle(hMem);
						if (IsInvalid) Errors.ThrowLastWin23Error();
					}

					protected override bool ReleaseHandle()
					{
						var hMem = DangerousGetHandle();
						if (hMem.e_IsValid())
						{
							hMem = _OwnerMemory!.DangerousGetHandle();
							var bUnlock = (_OwnerMemory.IsLocal) ? LocalUnlock(hMem) : GlobalUnlock(hMem);
							if (!bUnlock) Errors.ThrowLastWin23Error();
							SetHandle(IntPtr.Zero);
						}
						return true;
					}
				}
				#endregion

			}

		}


		//[SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]
		internal static partial class ProcessAPI
		{

			[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
			public static extern IntPtr GetCurrentProcess();


			/// <summary>Retrieves the thread identifier of the calling thread.
			/// Until the thread terminates, the thread identifier uniquely identifies the thread throughout the system.</summary>
			[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
			public static extern int GetCurrentThreadId();


		}



		[StructLayout(LayoutKind.Sequential)]
		internal struct RECT
		{
			public int Left;
			public int Top;
			public int Right;
			public int Bottom;


			public int Width => Right - Left;
			public int Height => Bottom - Top;

			public Point Location => new(Left, Top);

			public Rectangle ToRectangle() => new(Left, Top, Width, Height);
		}


		//[SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]
		internal static partial class Windows
		{
			public static readonly IntPtr HWND_DESKTOP = new(0);


			#region SendMessage


			public enum WindowMessages : UInt32
			{
				/*
				WM_PAINT = 0xF,
				WM_APPCOMMAND = 0x319,
				WM_NOTIFY = 0x004e,
				WM_LBUTTONDBLCLK = 0x0203,
				WM_USER = 0x0400,
			 */


				WM_NULL = 0,
				WM_CREATE = 1,
				WM_DESTROY = 2,
				WM_MOVE = 3,
				WM_SIZE = 5,
				WM_ACTIVATE = 6,
				WM_SETFOCUS = 7,
				WM_KILLFOCUS = 8,
				WM_ENABLE = 10,
				WM_SETREDRAW = 11,
				WM_SETTEXT = 12,
				WM_GETTEXT = 13,
				WM_GETTEXTLENGTH = 14,
				WM_PAINT = 15,
				WM_CLOSE = 16,
				WM_QUERYENDSESSION = 17,
				WM_QUIT = 18,
				WM_QUERYOPEN = 19,
				WM_ERASEBKGND = 20,
				WM_SYSCOLORCHANGE = 21,
				WM_ENDSESSION = 22,
				WM_SHOWWINDOW = 24,
				WM_CTLCOLOR = 25,
				WM_WININICHANGE = 26,
				WM_DEVMODECHANGE = 27,
				WM_ACTIVATEAPP = 28,
				WM_FONTCHANGE = 29,
				WM_TIMECHANGE = 30,
				WM_CANCELMODE = 31,
				WM_SETCURSOR = 32,
				WM_MOUSEACTIVATE = 33,
				WM_CHILDACTIVATE = 34,
				WM_QUEUESYNC = 35,
				WM_GETMINMAXINFO = 36,
				WM_PAINTICON = 38,
				WM_ICONERASEBKGND = 39,
				WM_NEXTDLGCTL = 40,
				WM_SPOOLERSTATUS = 42,
				WM_DRAWITEM = 43,
				WM_MEASUREITEM = 44,
				WM_DELETEITEM = 45,
				WM_VKEYTOITEM = 46,
				WM_CHARTOITEM = 47,
				WM_SETFONT = 48,
				WM_GETFONT = 49,
				WM_SETHOTKEY = 50,
				WM_GETHOTKEY = 51,
				WM_QUERYDRAGICON = 55,
				WM_COMPAREITEM = 57,
				WM_GETOBJECT = 61,
				WM_COMPACTING = 65,
				WM_COMMNOTIFY = 68,
				WM_WINDOWPOSCHANGING = 70,
				WM_WINDOWPOSCHANGED = 71,
				WM_POWER = 72,
				WM_COPYDATA = 74,
				WM_CANCELJOURNAL = 75,
				WM_NOTIFY = 78,
				WM_INPUTLANGCHANGEREQUEST = 80,
				WM_INPUTLANGCHANGE = 81,
				WM_TCARD = 82,
				WM_HELP = 83,
				WM_USERCHANGED = 84,
				WM_NOTIFYFORMAT = 85,
				WM_CONTEXTMENU = 123,
				WM_STYLECHANGING = 124,
				WM_STYLECHANGED = 125,
				WM_DISPLAYCHANGE = 126,
				WM_GETICON = 127,
				WM_SETICON = 128,
				WM_NCCREATE = 129,
				WM_NCDESTROY = 130,
				WM_NCCALCSIZE = 131,
				WM_NCHITTEST = 132,
				WM_NCPAINT = 133,
				WM_NCACTIVATE = 134,
				WM_GETDLGCODE = 135,
				WM_SYNCPAINT = 136,
				WM_NCMOUSEMOVE = 160,
				WM_NCLBUTTONDOWN = 161,
				WM_NCLBUTTONUP = 162,
				WM_NCLBUTTONDBLCLK = 163,
				WM_NCRBUTTONDOWN = 164,
				WM_NCRBUTTONUP = 165,
				WM_NCRBUTTONDBLCLK = 166,
				WM_NCMBUTTONDOWN = 167,
				WM_NCMBUTTONUP = 168,
				WM_NCMBUTTONDBLCLK = 169,
				WM_NCXBUTTONDOWN = 171,
				WM_NCXBUTTONUP = 172,
				WM_NCXBUTTONDBLCLK = 173,
				WM_KEYDOWN = 256,
				WM_KEYFIRST = 256,
				WM_KEYUP = 257,
				WM_CHAR = 258,
				WM_DEADCHAR = 259,
				WM_SYSKEYDOWN = 260,
				WM_SYSKEYUP = 261,
				WM_SYSCHAR = 262,
				WM_SYSDEADCHAR = 263,
				WM_KEYLAST = 264,
				WM_WNT_CONVERTREQUESTEX = 265,
				WM_CONVERTREQUEST = 266,
				WM_CONVERTRESULT = 267,
				WM_INTERIM = 268,
				WM_IME_STARTCOMPOSITION = 269,
				WM_IME_ENDCOMPOSITION = 270,
				WM_IME_COMPOSITION = 271,
				WM_IME_KEYLAST = 271,
				WM_INITDIALOG = 272,
				WM_COMMAND = 273,
				WM_SYSCOMMAND = 274,
				WM_TIMER = 275,
				WM_HSCROLL = 276,
				WM_VSCROLL = 277,
				WM_INITMENU = 278,
				WM_INITMENUPOPUP = 279,
				WM_MENUSELECT = 287,
				WM_MENUCHAR = 288,
				WM_ENTERIDLE = 289,
				WM_MENURBUTTONUP = 290,
				WM_MENUDRAG = 291,
				WM_MENUGETOBJECT = 292,
				WM_UNINITMENUPOPUP = 293,
				WM_MENUCOMMAND = 294,
				WM_CHANGEUISTATE = 295,
				WM_UPDATEUISTATE = 296,
				WM_QUERYUISTATE = 297,
				WM_CTLCOLORMSGBOX = 306,
				WM_CTLCOLOREDIT = 307,
				WM_CTLCOLORLISTBOX = 308,
				WM_CTLCOLORBTN = 309,
				WM_CTLCOLORDLG = 310,
				WM_CTLCOLORSCROLLBAR = 311,
				WM_CTLCOLORSTATIC = 312,
				WM_MOUSEFIRST = 512,
				WM_MOUSEMOVE = 512,
				WM_LBUTTONDOWN = 513,
				WM_LBUTTONUP = 514,
				WM_LBUTTONDBLCLK = 515,
				WM_RBUTTONDOWN = 516,
				WM_RBUTTONUP = 517,
				WM_RBUTTONDBLCLK = 518,
				WM_MBUTTONDOWN = 519,
				WM_MBUTTONUP = 520,
				WM_MBUTTONDBLCLK = 521,
				WM_MOUSELAST = 521,
				WM_MOUSEWHEEL = 522,
				WM_XBUTTONDOWN = 523,
				WM_XBUTTONUP = 524,
				WM_XBUTTONDBLCLK = 525,
				WM_PARENTNOTIFY = 528,
				WM_ENTERMENULOOP = 529,
				WM_EXITMENULOOP = 530,
				WM_NEXTMENU = 531,
				WM_SIZING = 532,
				WM_CAPTURECHANGED = 533,
				WM_MOVING = 534,
				WM_POWERBROADCAST = 536,
				WM_DEVICECHANGE = 537,
				WM_MDICREATE = 544,
				WM_MDIDESTROY = 545,
				WM_MDIACTIVATE = 546,
				WM_MDIRESTORE = 547,
				WM_MDINEXT = 548,
				WM_MDIMAXIMIZE = 549,
				WM_MDITILE = 550,
				WM_MDICASCADE = 551,
				WM_MDIICONARRANGE = 552,
				WM_MDIGETACTIVE = 553,
				WM_MDISETMENU = 560,
				WM_ENTERSIZEMOVE = 561,
				WM_EXITSIZEMOVE = 562,
				WM_DROPFILES = 563,
				WM_MDIREFRESHMENU = 564,
				WM_IME_REPORT = 640,
				WM_IME_SETCONTEXT = 641,
				WM_IME_NOTIFY = 642,
				WM_IME_CONTROL = 643,
				WM_IME_COMPOSITIONFULL = 644,
				WM_IME_SELECT = 645,
				WM_IME_CHAR = 646,
				WM_IME_REQUEST = 648,
				WM_IMEKEYDOWN = 656,
				WM_IME_KEYDOWN = 656,
				WM_IMEKEYUP = 657,
				WM_IME_KEYUP = 657,
				WM_NCMOUSEHOVER = 672,
				WM_MOUSEHOVER = 673,
				WM_NCMOUSELEAVE = 674,
				WM_MOUSELEAVE = 675,
				WM_CUT = 768,
				WM_COPY = 769,
				WM_PASTE = 770,
				WM_CLEAR = 771,
				WM_UNDO = 772,
				WM_RENDERFORMAT = 773,
				WM_RENDERALLFORMATS = 774,
				WM_DESTROYCLIPBOARD = 775,
				WM_DRAWCLIPBOARD = 776,
				WM_PAINTCLIPBOARD = 777,
				WM_VSCROLLCLIPBOARD = 778,
				WM_SIZECLIPBOARD = 779,
				WM_ASKCBFORMATNAME = 780,
				WM_CHANGECBCHAIN = 781,
				WM_HSCROLLCLIPBOARD = 782,
				WM_QUERYNEWPALETTE = 783,
				WM_PALETTEISCHANGING = 784,
				WM_PALETTECHANGED = 785,
				WM_HOTKEY = 786,
				WM_PRINT = 791,
				WM_PRINTCLIENT = 792,
				WM_APPCOMMAND = 793,
				WM_HANDHELDFIRST = 856,
				WM_HANDHELDLAST = 863,
				WM_AFXFIRST = 864,
				WM_AFXLAST = 895,
				WM_PENWINFIRST = 896,
				WM_RCRESULT = 897,
				WM_HOOKRCRESULT = 898,
				WM_GLOBALRCCHANGE = 899,
				WM_PENMISCINFO = 899,
				WM_SKB = 900,
				WM_HEDITCTL = 901,
				WM_PENCTL = 901,
				WM_PENMISC = 902,
				WM_CTLINIT = 903,
				WM_PENEVENT = 904,
				WM_PENWINLAST = 911,
				DDM_SETFMT = 1024,
				DM_GETDEFID = 1024,
				NIN_SELECT = 1024,
				TBM_GETPOS = 1024,
				WM_PSD_PAGESETUPDLG = 1024,
				WM_USER = 1024,
				CBEM_INSERTITEMA = 1025,
				DDM_DRAW = 1025,
				DM_SETDEFID = 1025,
				HKM_SETHOTKEY = 1025,
				PBM_SETRANGE = 1025,
				RB_INSERTBANDA = 1025,
				SB_SETTEXTA = 1025,
				TB_ENABLEBUTTON = 1025,
				TBM_GETRANGEMIN = 1025,
				TTM_ACTIVATE = 1025,
				WM_CHOOSEFONT_GETLOGFONT = 1025,
				WM_PSD_FULLPAGERECT = 1025,
				CBEM_SETIMAGELIST = 1026,
				DDM_CLOSE = 1026,
				DM_REPOSITION = 1026,
				HKM_GETHOTKEY = 1026,
				PBM_SETPOS = 1026,
				RB_DELETEBAND = 1026,
				SB_GETTEXTA = 1026,
				TB_CHECKBUTTON = 1026,
				TBM_GETRANGEMAX = 1026,
				WM_PSD_MINMARGINRECT = 1026,
				CBEM_GETIMAGELIST = 1027,
				DDM_BEGIN = 1027,
				HKM_SETRULES = 1027,
				PBM_DELTAPOS = 1027,
				RB_GETBARINFO = 1027,
				SB_GETTEXTLENGTHA = 1027,
				TBM_GETTIC = 1027,
				TB_PRESSBUTTON = 1027,
				TTM_SETDELAYTIME = 1027,
				WM_PSD_MARGINRECT = 1027,
				CBEM_GETITEMA = 1028,
				DDM_END = 1028,
				PBM_SETSTEP = 1028,
				RB_SETBARINFO = 1028,
				SB_SETPARTS = 1028,
				TB_HIDEBUTTON = 1028,
				TBM_SETTIC = 1028,
				TTM_ADDTOOLA = 1028,
				WM_PSD_GREEKTEXTRECT = 1028,
				CBEM_SETITEMA = 1029,
				PBM_STEPIT = 1029,
				TB_INDETERMINATE = 1029,
				TBM_SETPOS = 1029,
				TTM_DELTOOLA = 1029,
				WM_PSD_ENVSTAMPRECT = 1029,
				CBEM_GETCOMBOCONTROL = 1030,
				PBM_SETRANGE32 = 1030,
				RB_SETBANDINFOA = 1030,
				SB_GETPARTS = 1030,
				TB_MARKBUTTON = 1030,
				TBM_SETRANGE = 1030,
				TTM_NEWTOOLRECTA = 1030,
				WM_PSD_YAFULLPAGERECT = 1030,
				CBEM_GETEDITCONTROL = 1031,
				PBM_GETRANGE = 1031,
				RB_SETPARENT = 1031,
				SB_GETBORDERS = 1031,
				TBM_SETRANGEMIN = 1031,
				TTM_RELAYEVENT = 1031,
				CBEM_SETEXSTYLE = 1032,
				PBM_GETPOS = 1032,
				RB_HITTEST = 1032,
				SB_SETMINHEIGHT = 1032,
				TBM_SETRANGEMAX = 1032,
				TTM_GETTOOLINFOA = 1032,
				CBEM_GETEXSTYLE = 1033,
				CBEM_GETEXTENDEDSTYLE = 1033,
				PBM_SETBARCOLOR = 1033,
				RB_GETRECT = 1033,
				SB_SIMPLE = 1033,
				TB_ISBUTTONENABLED = 1033,
				TBM_CLEARTICS = 1033,
				TTM_SETTOOLINFOA = 1033,
				CBEM_HASEDITCHANGED = 1034,
				RB_INSERTBANDW = 1034,
				SB_GETRECT = 1034,
				TB_ISBUTTONCHECKED = 1034,
				TBM_SETSEL = 1034,
				TTM_HITTESTA = 1034,
				WIZ_QUERYNUMPAGES = 1034,
				CBEM_INSERTITEMW = 1035,
				RB_SETBANDINFOW = 1035,
				SB_SETTEXTW = 1035,
				TB_ISBUTTONPRESSED = 1035,
				TBM_SETSELSTART = 1035,
				TTM_GETTEXTA = 1035,
				WIZ_NEXT = 1035,
				CBEM_SETITEMW = 1036,
				RB_GETBANDCOUNT = 1036,
				SB_GETTEXTLENGTHW = 1036,
				TB_ISBUTTONHIDDEN = 1036,
				TBM_SETSELEND = 1036,
				TTM_UPDATETIPTEXTA = 1036,
				WIZ_PREV = 1036,
				CBEM_GETITEMW = 1037,
				RB_GETROWCOUNT = 1037,
				SB_GETTEXTW = 1037,
				TB_ISBUTTONINDETERMINATE = 1037,
				TTM_GETTOOLCOUNT = 1037,
				CBEM_SETEXTENDEDSTYLE = 1038,
				RB_GETROWHEIGHT = 1038,
				SB_ISSIMPLE = 1038,
				TB_ISBUTTONHIGHLIGHTED = 1038,
				TBM_GETPTICS = 1038,
				TTM_ENUMTOOLSA = 1038,
				SB_SETICON = 1039,
				TBM_GETTICPOS = 1039,
				TTM_GETCURRENTTOOLA = 1039,
				RB_IDTOINDEX = 1040,
				SB_SETTIPTEXTA = 1040,
				TBM_GETNUMTICS = 1040,
				TTM_WINDOWFROMPOINT = 1040,
				RB_GETTOOLTIPS = 1041,
				SB_SETTIPTEXTW = 1041,
				TBM_GETSELSTART = 1041,
				TB_SETSTATE = 1041,
				TTM_TRACKACTIVATE = 1041,
				RB_SETTOOLTIPS = 1042,
				SB_GETTIPTEXTA = 1042,
				TB_GETSTATE = 1042,
				TBM_GETSELEND = 1042,
				TTM_TRACKPOSITION = 1042,
				RB_SETBKCOLOR = 1043,
				SB_GETTIPTEXTW = 1043,
				TB_ADDBITMAP = 1043,
				TBM_CLEARSEL = 1043,
				TTM_SETTIPBKCOLOR = 1043,
				RB_GETBKCOLOR = 1044,
				SB_GETICON = 1044,
				TB_ADDBUTTONSA = 1044,
				TBM_SETTICFREQ = 1044,
				TTM_SETTIPTEXTCOLOR = 1044,
				RB_SETTEXTCOLOR = 1045,
				TB_INSERTBUTTONA = 1045,
				TBM_SETPAGESIZE = 1045,
				TTM_GETDELAYTIME = 1045,
				RB_GETTEXTCOLOR = 1046,
				TB_DELETEBUTTON = 1046,
				TBM_GETPAGESIZE = 1046,
				TTM_GETTIPBKCOLOR = 1046,
				RB_SIZETORECT = 1047,
				TB_GETBUTTON = 1047,
				TBM_SETLINESIZE = 1047,
				TTM_GETTIPTEXTCOLOR = 1047,
				RB_BEGINDRAG = 1048,
				TB_BUTTONCOUNT = 1048,
				TBM_GETLINESIZE = 1048,
				TTM_SETMAXTIPWIDTH = 1048,
				RB_ENDDRAG = 1049,
				TB_COMMANDTOINDEX = 1049,
				TBM_GETTHUMBRECT = 1049,
				TTM_GETMAXTIPWIDTH = 1049,
				RB_DRAGMOVE = 1050,
				TBM_GETCHANNELRECT = 1050,
				TB_SAVERESTOREA = 1050,
				TTM_SETMARGIN = 1050,
				RB_GETBARHEIGHT = 1051,
				TB_CUSTOMIZE = 1051,
				TBM_SETTHUMBLENGTH = 1051,
				TTM_GETMARGIN = 1051,
				RB_GETBANDINFOW = 1052,
				TB_ADDSTRINGA = 1052,
				TBM_GETTHUMBLENGTH = 1052,
				TTM_POP = 1052,
				RB_GETBANDINFOA = 1053,
				TB_GETITEMRECT = 1053,
				TBM_SETTOOLTIPS = 1053,
				TTM_UPDATE = 1053,
				RB_MINIMIZEBAND = 1054,
				TB_BUTTONSTRUCTSIZE = 1054,
				TBM_GETTOOLTIPS = 1054,
				TTM_GETBUBBLESIZE = 1054,
				RB_MAXIMIZEBAND = 1055,
				TBM_SETTIPSIDE = 1055,
				TB_SETBUTTONSIZE = 1055,
				TTM_ADJUSTRECT = 1055,
				TBM_SETBUDDY = 1056,
				TB_SETBITMAPSIZE = 1056,
				TTM_SETTITLEA = 1056,
				MSG_FTS_JUMP_VA = 1057,
				TB_AUTOSIZE = 1057,
				TBM_GETBUDDY = 1057,
				TTM_SETTITLEW = 1057,
				RB_GETBANDBORDERS = 1058,
				MSG_FTS_JUMP_QWORD = 1059,
				RB_SHOWBAND = 1059,
				TB_GETTOOLTIPS = 1059,
				MSG_REINDEX_REQUEST = 1060,
				TB_SETTOOLTIPS = 1060,
				MSG_FTS_WHERE_IS_IT = 1061,
				RB_SETPALETTE = 1061,
				TB_SETPARENT = 1061,
				RB_GETPALETTE = 1062,
				RB_MOVEBAND = 1063,
				TB_SETROWS = 1063,
				TB_GETROWS = 1064,
				TB_GETBITMAPFLAGS = 1065,
				TB_SETCMDID = 1066,
				RB_PUSHCHEVRON = 1067,
				TB_CHANGEBITMAP = 1067,
				TB_GETBITMAP = 1068,
				MSG_GET_DEFFONT = 1069,
				TB_GETBUTTONTEXTA = 1069,
				TB_REPLACEBITMAP = 1070,
				TB_SETINDENT = 1071,
				TB_SETIMAGELIST = 1072,
				TB_GETIMAGELIST = 1073,
				TB_LOADIMAGES = 1074,
				TTM_ADDTOOLW = 1074,
				TB_GETRECT = 1075,
				TTM_DELTOOLW = 1075,
				TB_SETHOTIMAGELIST = 1076,
				TTM_NEWTOOLRECTW = 1076,
				TB_GETHOTIMAGELIST = 1077,
				TTM_GETTOOLINFOW = 1077,
				TB_SETDISABLEDIMAGELIST = 1078,
				TTM_SETTOOLINFOW = 1078,
				TB_GETDISABLEDIMAGELIST = 1079,
				TTM_HITTESTW = 1079,
				TB_SETSTYLE = 1080,
				TTM_GETTEXTW = 1080,
				TB_GETSTYLE = 1081,
				TTM_UPDATETIPTEXTW = 1081,
				TB_GETBUTTONSIZE = 1082,
				TTM_ENUMTOOLSW = 1082,
				TB_SETBUTTONWIDTH = 1083,
				TTM_GETCURRENTTOOLW = 1083,

				EM_GETEVENTMASK = (WM_USER + 59),

				TB_SETMAXTEXTROWS = 1084,
				TB_GETTEXTROWS = 1085,
				TB_GETOBJECT = 1086,
				TB_GETBUTTONINFOW = 1087,
				TB_SETBUTTONINFOW = 1088,
				TB_GETBUTTONINFOA = 1089,
				TB_SETBUTTONINFOA = 1090,
				TB_INSERTBUTTONW = 1091,
				TB_ADDBUTTONSW = 1092,
				TB_HITTEST = 1093,

				EM_SETEVENTMASK = (WM_USER + 69),

				TB_SETDRAWTEXTFLAGS = 1094,
				TB_GETHOTITEM = 1095,
				TB_SETHOTITEM = 1096,
				TB_SETANCHORHIGHLIGHT = 1097,
				TB_GETANCHORHIGHLIGHT = 1098,
				TB_GETBUTTONTEXTW = 1099,
				TB_SAVERESTOREW = 1100,
				TB_ADDSTRINGW = 1101,
				TB_MAPACCELERATORA = 1102,
				TB_GETINSERTMARK = 1103,
				TB_SETINSERTMARK = 1104,
				TB_INSERTMARKHITTEST = 1105,
				TB_MOVEBUTTON = 1106,
				TB_GETMAXSIZE = 1107,
				TB_SETEXTENDEDSTYLE = 1108,
				TB_GETEXTENDEDSTYLE = 1109,
				TB_GETPADDING = 1110,
				TB_SETPADDING = 1111,
				TB_SETINSERTMARKCOLOR = 1112,
				TB_GETINSERTMARKCOLOR = 1113,
				TB_MAPACCELERATORW = 1114,
				TB_GETSTRINGW = 1115,
				TB_GETSTRINGA = 1116,
				TAPI_REPLY = 1123,
				ACM_OPENA = 1124,
				BFFM_SETSTATUSTEXTA = 1124,
				CDM_FIRST = 1124,
				CDM_GETSPEC = 1124,
				IPM_CLEARADDRESS = 1124,
				WM_CAP_UNICODE_START = 1124,
				ACM_PLAY = 1125,
				BFFM_ENABLEOK = 1125,
				CDM_GETFILEPATH = 1125,
				IPM_SETADDRESS = 1125,
				PSM_SETCURSEL = 1125,
				UDM_SETRANGE = 1125,
				WM_CHOOSEFONT_SETLOGFONT = 1125,
				ACM_STOP = 1126,
				BFFM_SETSELECTIONA = 1126,
				CDM_GETFOLDERPATH = 1126,
				IPM_GETADDRESS = 1126,
				PSM_REMOVEPAGE = 1126,
				UDM_GETRANGE = 1126,
				WM_CAP_SET_CALLBACK_ERRORW = 1126,
				WM_CHOOSEFONT_SETFLAGS = 1126,
				ACM_OPENW = 1127,
				BFFM_SETSELECTIONW = 1127,
				CDM_GETFOLDERIDLIST = 1127,
				IPM_SETRANGE = 1127,
				PSM_ADDPAGE = 1127,
				UDM_SETPOS = 1127,
				WM_CAP_SET_CALLBACK_STATUSW = 1127,
				BFFM_SETSTATUSTEXTW = 1128,
				CDM_SETCONTROLTEXT = 1128,
				IPM_SETFOCUS = 1128,
				PSM_CHANGED = 1128,
				UDM_GETPOS = 1128,
				CDM_HIDECONTROL = 1129,
				IPM_ISBLANK = 1129,
				PSM_RESTARTWINDOWS = 1129,
				UDM_SETBUDDY = 1129,
				CDM_SETDEFEXT = 1130,
				PSM_REBOOTSYSTEM = 1130,
				UDM_GETBUDDY = 1130,
				PSM_CANCELTOCLOSE = 1131,
				UDM_SETACCEL = 1131,
				EM_CONVPOSITION = 1132,
				PSM_QUERYSIBLINGS = 1132,
				UDM_GETACCEL = 1132,
				MCIWNDM_GETZOOM = 1133,
				PSM_UNCHANGED = 1133,
				UDM_SETBASE = 1133,
				PSM_APPLY = 1134,
				UDM_GETBASE = 1134,
				PSM_SETTITLEA = 1135,
				UDM_SETRANGE32 = 1135,
				PSM_SETWIZBUTTONS = 1136,
				UDM_GETRANGE32 = 1136,
				WM_CAP_DRIVER_GET_NAMEW = 1136,
				PSM_PRESSBUTTON = 1137,
				UDM_SETPOS32 = 1137,
				WM_CAP_DRIVER_GET_VERSIONW = 1137,
				PSM_SETCURSELID = 1138,
				UDM_GETPOS32 = 1138,
				PSM_SETFINISHTEXTA = 1139,
				PSM_GETTABCONTROL = 1140,
				PSM_ISDIALOGMESSAGE = 1141,
				MCIWNDM_REALIZE = 1142,
				PSM_GETCURRENTPAGEHWND = 1142,
				MCIWNDM_SETTIMEFORMATA = 1143,
				PSM_INSERTPAGE = 1143,
				MCIWNDM_GETTIMEFORMATA = 1144,
				PSM_SETTITLEW = 1144,
				WM_CAP_FILE_SET_CAPTURE_FILEW = 1144,
				MCIWNDM_VALIDATEMEDIA = 1145,
				PSM_SETFINISHTEXTW = 1145,
				WM_CAP_FILE_GET_CAPTURE_FILEW = 1145,
				MCIWNDM_PLAYTO = 1147,
				WM_CAP_FILE_SAVEASW = 1147,
				MCIWNDM_GETFILENAMEA = 1148,
				MCIWNDM_GETDEVICEA = 1149,
				PSM_SETHEADERTITLEA = 1149,
				WM_CAP_FILE_SAVEDIBW = 1149,
				MCIWNDM_GETPALETTE = 1150,
				PSM_SETHEADERTITLEW = 1150,
				MCIWNDM_SETPALETTE = 1151,
				PSM_SETHEADERSUBTITLEA = 1151,
				MCIWNDM_GETERRORA = 1152,
				PSM_SETHEADERSUBTITLEW = 1152,
				PSM_HWNDTOINDEX = 1153,
				PSM_INDEXTOHWND = 1154,
				MCIWNDM_SETINACTIVETIMER = 1155,
				PSM_PAGETOINDEX = 1155,
				PSM_INDEXTOPAGE = 1156,
				DL_BEGINDRAG = 1157,
				MCIWNDM_GETINACTIVETIMER = 1157,
				PSM_IDTOINDEX = 1157,
				DL_DRAGGING = 1158,
				PSM_INDEXTOID = 1158,
				DL_DROPPED = 1159,
				PSM_GETRESULT = 1159,
				DL_CANCELDRAG = 1160,
				PSM_RECALCPAGESIZES = 1160,
				MCIWNDM_GET_SOURCE = 1164,
				MCIWNDM_PUT_SOURCE = 1165,
				MCIWNDM_GET_DEST = 1166,
				MCIWNDM_PUT_DEST = 1167,
				MCIWNDM_CAN_PLAY = 1168,
				MCIWNDM_CAN_WINDOW = 1169,
				MCIWNDM_CAN_RECORD = 1170,
				MCIWNDM_CAN_SAVE = 1171,
				MCIWNDM_CAN_EJECT = 1172,
				MCIWNDM_CAN_CONFIG = 1173,
				IE_GETINK = 1174,
				IE_MSGFIRST = 1174,
				MCIWNDM_PALETTEKICK = 1174,
				IE_SETINK = 1175,
				IE_GETPENTIP = 1176,
				IE_SETPENTIP = 1177,
				IE_GETERASERTIP = 1178,
				IE_SETERASERTIP = 1179,
				IE_GETBKGND = 1180,
				IE_SETBKGND = 1181,
				IE_GETGRIDORIGIN = 1182,
				IE_SETGRIDORIGIN = 1183,
				IE_GETGRIDPEN = 1184,
				IE_SETGRIDPEN = 1185,
				IE_GETGRIDSIZE = 1186,
				IE_SETGRIDSIZE = 1187,
				IE_GETMODE = 1188,
				IE_SETMODE = 1189,
				IE_GETINKRECT = 1190,
				WM_CAP_SET_MCI_DEVICEW = 1190,
				WM_CAP_GET_MCI_DEVICEW = 1191,
				WM_CAP_PAL_OPENW = 1204,
				WM_CAP_PAL_SAVEW = 1205,
				IE_GETAPPDATA = 1208,
				IE_SETAPPDATA = 1209,
				IE_GETDRAWOPTS = 1210,
				IE_SETDRAWOPTS = 1211,
				IE_GETFORMAT = 1212,
				IE_SETFORMAT = 1213,
				IE_GETINKINPUT = 1214,
				IE_SETINKINPUT = 1215,
				IE_GETNOTIFY = 1216,
				IE_SETNOTIFY = 1217,
				IE_GETRECOG = 1218,
				IE_SETRECOG = 1219,
				IE_GETSECURITY = 1220,
				IE_SETSECURITY = 1221,
				IE_GETSEL = 1222,
				IE_SETSEL = 1223,
				CDM_LAST = 1224,
				IE_DOCOMMAND = 1224,
				MCIWNDM_NOTIFYMODE = 1224,
				IE_GETCOMMAND = 1225,
				IE_GETCOUNT = 1226,
				IE_GETGESTURE = 1227,
				MCIWNDM_NOTIFYMEDIA = 1227,
				IE_GETMENU = 1228,
				IE_GETPAINTDC = 1229,
				MCIWNDM_NOTIFYERROR = 1229,
				IE_GETPDEVENT = 1230,
				IE_GETSELCOUNT = 1231,
				IE_GETSELITEMS = 1232,
				IE_GETSTYLE = 1233,
				MCIWNDM_SETTIMEFORMATW = 1243,
				EM_OUTLINE = 1244,
				MCIWNDM_GETTIMEFORMATW = 1244,
				EM_GETSCROLLPOS = 1245,
				EM_SETSCROLLPOS = 1246,
				EM_SETFONTSIZE = 1247,
				MCIWNDM_GETFILENAMEW = 1248,
				MCIWNDM_GETDEVICEW = 1249,
				MCIWNDM_GETERRORW = 1252,
				FM_GETFOCUS = 1536,
				FM_GETDRIVEINFOA = 1537,
				FM_GETSELCOUNT = 1538,
				FM_GETSELCOUNTLFN = 1539,
				FM_GETFILESELA = 1540,
				FM_GETFILESELLFNA = 1541,
				FM_REFRESH_WINDOWS = 1542,
				FM_RELOAD_EXTENSIONS = 1543,
				FM_GETDRIVEINFOW = 1553,
				FM_GETFILESELW = 1556,
				FM_GETFILESELLFNW = 1557,
				WLX_WM_SAS = 1625,
				SM_GETSELCOUNT = 2024,
				UM_GETSELCOUNT = 2024,
				WM_CPL_LAUNCH = 2024,
				SM_GETSERVERSELA = 2025,
				UM_GETUSERSELA = 2025,
				WM_CPL_LAUNCHED = 2025,
				SM_GETSERVERSELW = 2026,
				UM_GETUSERSELW = 2026,
				SM_GETCURFOCUSA = 2027,
				UM_GETGROUPSELA = 2027,
				SM_GETCURFOCUSW = 2028,
				UM_GETGROUPSELW = 2028,
				SM_GETOPTIONS = 2029,
				UM_GETCURFOCUSA = 2029,
				UM_GETCURFOCUSW = 2030,
				UM_GETOPTIONS = 2031,
				UM_GETOPTIONS2 = 2032,
				//OCM__BASE = 8192 , 
				WM_REFLECT = 0x2000,
				OCM_CTLCOLOR = 8217,
				OCM_DRAWITEM = (WM_REFLECT + WM_DRAWITEM), //0x202B=8235'called once when the ListView Is created, but only in Details view,
				OCM_MEASUREITEM = (WM_REFLECT + WM_MEASUREITEM), //'0x202C=8236  , 


				OCM_DELETEITEM = 8237,
				OCM_VKEYTOITEM = 8238,
				OCM_CHARTOITEM = 8239,
				OCM_COMPAREITEM = 8249,
				OCM_NOTIFY = (WM_REFLECT + WM_NOTIFY),
				OCM_COMMAND = 8465,
				OCM_HSCROLL = 8468,
				OCM_VSCROLL = 8469,
				OCM_CTLCOLORMSGBOX = 8498,
				OCM_CTLCOLOREDIT = 8499,
				OCM_CTLCOLORLISTBOX = 8500,
				OCM_CTLCOLORBTN = 8501,
				OCM_CTLCOLORDLG = 8502,
				OCM_CTLCOLORSCROLLBAR = 8503,
				OCM_CTLCOLORSTATIC = 8504,
				OCM_PARENTNOTIFY = 8720,
				WM_APP = 32768,
				WM_RASDIALEVENT = 52429

			}


			[DllImport(core.WINDLL_USER, SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			internal static extern IntPtr SendMessage(
			[In] IntPtr hwnd,
			[In, MarshalAs(UnmanagedType.I4)] WindowMessages wMsg,
			[In] IntPtr wParam,
			[In] IntPtr lParam);

			[DllImport(core.WINDLL_USER, SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			internal static extern IntPtr SendMessage(
				[In] IntPtr hwnd,
				[In] int wMsg,
				[In] IntPtr wParam,
				[In] IntPtr lParam);

			[DllImport(core.WINDLL_USER, SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			internal static extern IntPtr SendMessage(
				[In] IntPtr hwnd,
				[In, MarshalAs(UnmanagedType.I4)] WindowMessages wMsg,
				[In] int wParam,
				[In, MarshalAs(UnmanagedType.LPTStr)] string? lParam);


			[DllImport(core.WINDLL_USER, SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			internal static extern IntPtr SendMessage(
				[In] IntPtr hwnd,
				[In, MarshalAs(UnmanagedType.I4)] int wMsg,
				[In] int wParam,
				[In, MarshalAs(UnmanagedType.LPTStr)] string? lParam);


			[DllImport(core.WINDLL_USER, SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			internal static extern int SendMessage(
			  [In] IntPtr hwnd,
			  [In, MarshalAs(UnmanagedType.I4)] int wMsg,
			  [In, MarshalAs(UnmanagedType.I4)] int wParam,
			  [In, MarshalAs(UnmanagedType.I4)] int lParam);


			#endregion


			#region AppCommand


			/// <summary>
			/// This commands mostly used by remote control apps for send commands from remote control to the system. Like Media players with remote or like the MediaCenter etc.
			/// https://docs.microsoft.com/en-us/windows/win32/inputdev/wm-appcommand
			/// https://docs.microsoft.com/en-us/previous-versions/windows/desktop/windows-media-center-sdk/bb417079(v=msdn.10)
			/// </summary>
			public enum FAPPCOMMAND_CMD : int
			{
				APPCOMMAND_BROWSER_BACKWARD = 1,//Navigate backward.
				APPCOMMAND_BROWSER_FORWARD = 2,//Navigate forward.
				APPCOMMAND_BROWSER_REFRESH = 3,//Refresh page.
				APPCOMMAND_BROWSER_STOP = 4,//Stop download.
				APPCOMMAND_BROWSER_SEARCH = 5,//Open search.
				APPCOMMAND_BROWSER_FAVORITES = 6,//Open favorites.
				APPCOMMAND_BROWSER_HOME = 7,//Navigate home.

				/// <summary>Mute the volume.</summary>
				APPCOMMAND_VOLUME_MUTE = 8, //APPCOMMAND_VOLUME_MUTE = 0x8_00_00,
				/// <summary>Lower the volume.</summary>
				APPCOMMAND_VOLUME_DOWN = 9, //APPCOMMAND_VOLUME_DOWN = 0x9_00_00,
				/// <summary>Raise the volume.</summary>
				APPCOMMAND_VOLUME_UP = 10,  //APPCOMMAND_VOLUME_UP = 0xA_00_00,                


				APPCOMMAND_MEDIA_NEXTTRACK = 11,//Go to next track.
				APPCOMMAND_MEDIA_PREVIOUSTRACK = 12,//Go to previous track.
				APPCOMMAND_MEDIA_STOP = 13,//Stop playback.
				APPCOMMAND_MEDIA_PLAY_PAUSE = 14,//Play or pause playback.If there are discrete Play and Pause buttons, applications should take action on this command as well as APPCOMMAND_MEDIA_PLAY and APPCOMMAND_MEDIA_PAUSE.

				APPCOMMAND_LAUNCH_MAIL = 15,//Open mail.
				APPCOMMAND_LAUNCH_MEDIA_SELECT = 16,//Go to Media Select mode.
				APPCOMMAND_LAUNCH_APP1 = 17,//Start App1.
				APPCOMMAND_LAUNCH_APP2 = 18,//Start App2.


				APPCOMMAND_BASS_DOWN = 19,  //Decrease the bass.
				APPCOMMAND_BASS_BOOST = 20, //Toggle the bass boost on and off.
				APPCOMMAND_BASS_UP = 21,    //Increase the bass.
				APPCOMMAND_TREBLE_DOWN = 22,//Decrease the treble.
				APPCOMMAND_TREBLE_UP = 23,//Increase the treble.

				APPCOMMAND_MICROPHONE_VOLUME_MUTE = 24,//Mute the microphone.
				APPCOMMAND_MICROPHONE_VOLUME_DOWN = 25,//Decrease microphone volume.
				APPCOMMAND_MICROPHONE_VOLUME_UP = 26,//Increase microphone volume.

				APPCOMMAND_HELP = 27,//Open the Help dialog.
				APPCOMMAND_FIND = 28,//Open the Find dialog.
				APPCOMMAND_NEW = 29,//Create a new window.
				APPCOMMAND_OPEN = 30,//Open a window.
				APPCOMMAND_CLOSE = 31,//Close the window (not the application).

				APPCOMMAND_SAVE = 32,//Save current document.
				APPCOMMAND_PRINT = 33,//Print current document.

				APPCOMMAND_UNDO = 34,//Undo last action.
				APPCOMMAND_REDO = 35,//Redo last action.
				APPCOMMAND_COPY = 36,//Copy the selection.
				APPCOMMAND_CUT = 37,//Cut the selection.
				APPCOMMAND_PASTE = 38,//Paste

				APPCOMMAND_REPLY_TO_MAIL = 39,//Reply to a mail message.
				APPCOMMAND_FORWARD_MAIL = 40,//Forward a mail message.
				APPCOMMAND_SEND_MAIL = 41,//Send a mail message.
				APPCOMMAND_SPELL_CHECK = 42,//Initiate a spell check.
				APPCOMMAND_DICTATE_OR_COMMAND_CONTROL_TOGGLE = 43,//Toggles between two modes of speech input: dictation and command/control(giving commands to an application or accessing menus).
				APPCOMMAND_MIC_ON_OFF_TOGGLE = 44,//Toggle the microphone.
				APPCOMMAND_CORRECTION_LIST = 45,//Brings up the correction list when a word is incorrectly identified during speech input.

				APPCOMMAND_MEDIA_PLAY = 46,//Begin playing at the current position.If already paused, it will resume.This is a direct PLAY command that has no state.If there are discrete Play and Pause buttons, applications should take action on this command as well as APPCOMMAND_MEDIA_PLAY_PAUSE.
				APPCOMMAND_MEDIA_PAUSE = 47,//Pause.If already paused, take no further action.This is a direct PAUSE command that has no state.If there are discrete Play and Pause buttons, applications should take action on this command as well as APPCOMMAND_MEDIA_PLAY_PAUSE.
				APPCOMMAND_MEDIA_RECORD = 48,//Begin recording the current stream.
				APPCOMMAND_MEDIA_FAST_FORWARD = 49,//Increase the speed of stream playback. This can be implemented in many ways, for example, using a fixed speed or toggling through a series of increasing speeds.
				APPCOMMAND_MEDIA_REWIND = 50,//Go backward in a stream at a higher rate of speed.This can be implemented in many ways, for example, using a fixed speed or toggling through a series of increasing speeds.
				APPCOMMAND_MEDIA_CHANNEL_UP = 51,//Increment the channel value, for example, for a TV or radio tuner.
				APPCOMMAND_MEDIA_CHANNEL_DOWN = 52,//Decrement the channel value, for example, for a TV or radio tuner.

			}

			//The uDevice component indicates the input device that generated the input event, and can be one of the following values.
			public enum FAPPCOMMAND_SRC : int
			{
				/// <summary>User pressed a key.</summary>
				FAPPCOMMAND_KEY = 0,
				/// <summary>User clicked a mouse button.</summary>
				FAPPCOMMAND_MOUSE = 0x8000,
				/// <summary>An unidentified hardware source generated the event. It could be a mouse or a keyboard event.</summary>
				FAPPCOMMAND_OEM = 0x1000,
			}

			//The dwKeys component indicates whether various virtual keys are down, and can be one or more of the following values.
			public enum FAPPCOMMAND_VKEY : int
			{
				MK_NONE = 0,

				/// <summary>The CTRL key is down.</summary>
				MK_CONTROL = 0x0008,
				/// <summary>The left mouse button is down.</summary>
				MK_LBUTTON = 0x0001,
				/// <summary>The middle mouse button is down.</summary>
				MK_MBUTTON = 0x0010,
				/// <summary>The right mouse button is down.</summary>
				MK_RBUTTON = 0x0002,
				/// <summary>The SHIFT key is down.</summary>
				MK_SHIFT = 0x0004,
				/// <summary>The first X button is down.</summary>
				MK_XBUTTON1 = 0x0020,
				/// <summary>The second X button is down.</summary>
				MK_XBUTTON2 = 0x0040,
			}


			/// <summary>Send to the system an "app command", it is like pressing volume up / down / mute button or other like this.</summary>
			public static void SendAppCommand(
				IntPtr hwnd,
				FAPPCOMMAND_CMD cmd,
				FAPPCOMMAND_SRC source = FAPPCOMMAND_SRC.FAPPCOMMAND_KEY,
				FAPPCOMMAND_VKEY vkey = FAPPCOMMAND_VKEY.MK_NONE)
			{
				int fullCode = (int)cmd << 16 | (int)source | (int)vkey;
				SendMessage(hwnd, WindowMessages.WM_APPCOMMAND, hwnd, new IntPtr(fullCode));
				//SendMessage(Handle, WM_APPCOMMAND, Handle, new IntPtr(APPCOMMAND_VOLUME_UP));
				//SendMessage(Handle, WM_APPCOMMAND, Handle, new IntPtr(APPCOMMAND_VOLUME_MUTE));
			}


			#endregion









			[DllImport(core.WINDLL_USER, SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			internal static extern IntPtr GetDesktopWindow();

























			internal enum WindowStyles : int
			{
				WS_VISIBLE = 0x10000000,
				WS_CHILD = 0x40000000,
				WS_TABSTOP = 0x00010000,

				BS_AUTOCHECKBOX = 0x00000003
			}

			[DllImport(core.WINDLL_USER, SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			internal static extern IntPtr CreateWindowEx(
					[In] int dwExStyle,          // extended window style
					[In, MarshalAs(UnmanagedType.LPTStr)] string lpClassName,     // registered class name
					[In, MarshalAs(UnmanagedType.LPTStr)] string lpWindowName,    // window name
					[In] WindowStyles dwStyle,            // window style
					[In] int x,                  // horizontal position of window
					[In] int y,                  // vertical position of window
					[In] int nWidth,             // window width
					[In] int nHeight,            // window height
					[In] IntPtr hWndParent,      // handle to parent or owner window
					[In] IntPtr hMenu,           // menu handle or child identifier
					[In] IntPtr hInstance,       // handle to application instance
					[In] IntPtr lpParam          // window-creation data
					);



			[DllImport(core.WINDLL_USER, SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			internal static extern IntPtr GetForegroundWindow();


			[DllImport(core.WINDLL_USER, SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			internal static extern bool SetForegroundWindow([In] IntPtr hWnd);


			[DllImport(core.WINDLL_USER, SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			internal static extern bool ShowWindow(
				[In] IntPtr handle,
				[In] int nCmdShow);


			[DllImport(core.WINDLL_USER, SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			internal static extern IntPtr FindWindow(
				[In, MarshalAs(UnmanagedType.LPTStr)] string lpClassName,
				[In, MarshalAs(UnmanagedType.LPTStr)] string lpWindowName);


			[DllImport(core.WINDLL_USER, SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			internal static extern IntPtr GetDlgItem(
				[In] IntPtr hwnd,
				[In] int id);



			//protected static extern int ScreenToClient(IntPtr hwnd, ref POINT pt);
			[DllImport(core.WINDLL_USER, SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			internal static extern int ScreenToClient(
				[In] IntPtr hwnd,
				[In, Out] ref System.Drawing.Point pt);


			[DllImport(core.WINDLL_USER, SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			private static extern int GetClientRect(
				[In] IntPtr hwnd,
				[In, Out] ref System.Drawing.Rectangle rc);

			internal static Rectangle GetClientRect(IntPtr hwnd)
			{
				Rectangle rcClient = new();
				_ = GetClientRect(hwnd, ref rcClient);
				return rcClient;
			}

			internal static Rectangle GetClientRect(IWin32Window wind) => GetClientRect(wind.Handle);





			[DllImport(core.WINDLL_USER, SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			private static extern int GetWindowRect(
				[In] IntPtr hwnd,
				[In, Out] ref RECT rc);

			internal static Rectangle GetWindowRect(IntPtr hwnd)
			{
				RECT rc = new();
				_ = GetWindowRect(hwnd, ref rc);
				return rc.ToRectangle();
			}


			[DllImport(core.WINDLL_USER, SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			internal static extern void MoveWindow(
				[In] IntPtr hwnd,
				[In] int x, [In] int y, [In] int nWidth, [In] int nHeight,
				[In] bool bRepaint);


			[DllImport(core.WINDLL_USER, SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			private static extern int GetWindowTextLength([In] IntPtr hwnd);


			[DllImport(core.WINDLL_USER, SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			private static extern int GetWindowText(
				[In] IntPtr hwnd,
				[In, Out, MarshalAs(UnmanagedType.LPTStr)] StringBuilder lpString,
				[In, Out] int nMaxCount);

			public static string GetWindowText(IntPtr hwnd)
			{
				int lenght = GetWindowTextLength(hwnd);
				if (lenght < 1) return string.Empty;

				StringBuilder sb = new(lenght + 2);
				lenght = GetWindowText(hwnd, sb, sb.Capacity);
				return (lenght > 0)
					? sb.ToString()
					: string.Empty;
			}

			public static string GetWindowText(IWin32Window wnd) => GetWindowText(wnd.Handle);

			[DllImport(core.WINDLL_USER, SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			public static extern int SetWindowText(
				[In] IntPtr hwnd,
				[In, MarshalAs(UnmanagedType.LPTStr)] string lpString);


			[DllImport(core.WINDLL_USER, SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			private static extern int GetClassName(
				[In] IntPtr hwnd,
				[In, Out, MarshalAs(UnmanagedType.LPTStr)] StringBuilder lpString,
				[In, Out] int nMaxCount);

			public static string GetClassName(IntPtr hwnd)
			{
				StringBuilder sb = new(1024);
				int lenght = GetClassName(hwnd, sb, sb.Capacity);
				return (lenght > 0)
					? sb.ToString()
					: string.Empty;
			}
			public static string GetClassName(IWin32Window wnd) => GetClassName(wnd.Handle);













			public enum TextBoxMessages : int
			{
				//WM_PAINT = 0xF,
				EM_SETCUEBANNER = 0x1501
			}

		}


		//[SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]
		internal static partial class GDI
		{

			internal class DC : Microsoft.Win32.SafeHandles.SafeHandleZeroOrMinusOneIsInvalid
			{
				[DllImport(core.WINDLL_USER)]
				private static extern IntPtr GetDC([In] IntPtr hwnd);

				[DllImport(core.WINDLL_USER)]
				private static extern bool ReleaseDC([In] IntPtr hwnd, [In] IntPtr hdc);

				internal IntPtr hWnd = IntPtr.Zero;

				public DC(IntPtr WindowHandle) : base(true)
				{
					var hdc = GetDC(WindowHandle);
					if (hdc == IntPtr.Zero) throw new Win32Exception();
					hWnd = WindowHandle;
					SetHandle(hdc);
				}

				public DC(IWin32Window Window) : this(Window.Handle) { }

				protected override bool ReleaseHandle()
				{
					if (IsInvalid) return true;
					bool bResult = ReleaseDC(hWnd, handle);
					SetHandle(IntPtr.Zero);
					return bResult;
				}

				public Graphics CreateGraphics() => Graphics.FromHdc(DangerousGetHandle());
			}







		}


		//[SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]
		internal static partial class IO
		{

			internal const int MAX_PATH = 260;

			/// <summary>This prefix indicates to NTFS that the path is to be treated as a non-interpretedpath in the virtual file system.</summary>
			internal const string UNC_PATH_PREFIX = @"\\?\";
			// Public Const LONG_PATH_PREFIX As String = "\??\"


			/// <summary>Use System.Runtime.InteropServices.ComTypes.FILETIME instead</summary>
			[Obsolete("Use System.Runtime.InteropServices.ComTypes.FILETIME instead")]
			[StructLayout(LayoutKind.Sequential)]
			internal partial struct FILETIME
			{
				public int dwLowDateTime;
				public int dwHighDateTime;
			}

			[StructLayout(LayoutKind.Sequential)]
			internal partial struct SYSTEMTIME
			{
				public short wYear;
				public short wMonth;
				public short wDayOfWeek;
				public short wDay;
				public short wHour;
				public short wMinute;
				public short wSecond;
				public short wMilliseconds;
			}


			/// <summary>Переполнится, когда они код отработает 585 миллиардов лет.
			/// При гибернации не сбрасывается!</summary>
			[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
			internal static extern ulong GetTickCount64();


			public static DateTime SystemTimeToDate(ref SYSTEMTIME stx, bool Localize = false)
			{
				var st = default(SYSTEMTIME);
				var ft = default(System.Runtime.InteropServices.ComTypes.FILETIME);
				// Windows NT/2000 *ONLY* Shortcut:
				// Using NULL for lpTimeZoneInformation converts SYSTEMTIME structure from UTC to currently active time zone with call
				// to SystemTimeToTzSpecificLocalTime
				// If Localize Then
				// Call SystemTimeToTzSpecificLocalTime(ByVal 0&, stx, st)

				if (Localize)
				{
					// Convert to FILETIME, localize, then convert back to SYSTEMTIME.
					_ = SystemTimeToFileTime(ref stx, ref ft);
					_ = FileTimeToLocalFileTime(ref ft, ref ft);
					_ = FileTimeToSystemTime(ref ft, ref st);
				}
				else
				{
					// Structures can't be passed byval; make copy.  :-(
					st = stx;
				}
				// Convert to VB-style date (double).
				return new DateTime(st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);
			}





			[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
			public static extern int FileTimeToLocalFileTime(
				[In] ref System.Runtime.InteropServices.ComTypes.FILETIME lpFileTime,
				[In, Out] ref System.Runtime.InteropServices.ComTypes.FILETIME lpLocalFileTime);


			[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
			public static extern int FileTimeToSystemTime(
				[In] ref System.Runtime.InteropServices.ComTypes.FILETIME lpFileTime,
				[In, Out] ref SYSTEMTIME lpSystemTime);


			[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
			public static extern int SystemTimeToFileTime(
				[In] ref SYSTEMTIME lpSystemTime,
				[In, Out] ref System.Runtime.InteropServices.ComTypes.FILETIME lpFileTime);

			#region Files

			#region GetFileType
			[Flags()]
			public enum FileTypes : int
			{
				/// <summary>The specified file is a character file, typically an LPT device or a console.</summary>
				ILE_TYPE_CHAR = 0x2,
				/// <summary>The specified file is a disk file.</summary>
				FILE_TYPE_DISK = 0x1,
				/// <summary>The specified file is a socket, a named pipe, or an anonymous pipe.</summary>
				FILE_TYPE_PIPE = 0x3,
				/// <summary>Unused.</summary>
				FILE_TYPE_REMOTE = 0x8000,
				/// <summary>Either the type of the specified file is unknown, or the function failed.</summary>
				FILE_TYPE_UNKNOWN = 0x0
			}

			[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
			public static extern FileTypes GetFileType(Microsoft.Win32.SafeHandles.SafeFileHandle handle);
			#endregion

			#region CreateFile
			[Flags()]
			public enum NativeFileFlags : uint
			{
				OPEN_EXISTING = 3,
				FILE_SHARE_READ = 0x1,
				FILE_SHARE_WRITE = 0x2,
				FILE_ATTRIBUTE_NORMAL = 0x80,
				OpenNoRecall = 0x100000,
				PosixSemantics = 0x1000000,
				DeleteOnClose = 0x4000000,
				SequentialScan = 0x8000000,
				RandomAccess = 0x10000000,
				NoBuffering = 0x20000000,
				Overlapped = 0x40000000,
				WriteThrough = 0x80000000,
				FILE_FLAG_BACKUP_SEMANTICS = 0x2000000,
				FILE_FLAG_OPEN_REPARSE_POINT = 0x200000
			}

			[Flags()]
			public enum NativeFileAccess : uint
			{
				GenericRead = 0x80000000,
				GenericWrite = 0x40000000,
				GenericExecute = 0x20000000,
				GenericAll = 0x10000000
			}

			[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
			public static extern IntPtr CreateFile([In, MarshalAs(UnmanagedType.LPTStr)] string name, [In, MarshalAs(UnmanagedType.I4)] NativeFileAccess access, [In, MarshalAs(UnmanagedType.I4)] FileShare share, [In, MarshalAs(UnmanagedType.SysInt)] IntPtr security, [In, MarshalAs(UnmanagedType.I4)] FileMode mode, [In, MarshalAs(UnmanagedType.I4)] NativeFileFlags flags, [In, MarshalAs(UnmanagedType.SysInt)] IntPtr template);


			[DllImport(core.WINDLL_KERNEL, EntryPoint = "CreateFile", SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
			public static extern Microsoft.Win32.SafeHandles.SafeFileHandle CreateFileAsSafeFileHandle([In, MarshalAs(UnmanagedType.LPTStr)] string name, [In, MarshalAs(UnmanagedType.I4)] NativeFileAccess access, [In, MarshalAs(UnmanagedType.I4)] FileShare share, [In, MarshalAs(UnmanagedType.SysInt)] IntPtr security, [In, MarshalAs(UnmanagedType.I4)] FileMode mode, [In, MarshalAs(UnmanagedType.I4)] NativeFileFlags flags, [In, MarshalAs(UnmanagedType.SysInt)] IntPtr template);
			#endregion


			[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
			internal static extern bool DeleteFile(string name);


			[Flags()]
			public enum EFileAttributes : uint
			{
				FILE_ATTRIBUTE_READONLY = 0x1,    // A file that is read-only. Applications can read the file, but cannot write to it or delete it. This attribute is not honored on directories. For more information, see Online  "You cannot view or change the Read-only or the System attributes of folders in Windows Server 2003, in Windows XP, or in Windows Vista".
				FILE_ATTRIBUTE_HIDDEN = 0x2,    // The file or directory is hidden. It is not included in an ordinary directory listing.
				FILE_ATTRIBUTE_SYSTEM = 0x4,    // A file or directory that the operating system uses a part of, or uses exclusively.
				FILE_ATTRIBUTE_DIRECTORY = 0x10,    // The handle that identifies a directory.
				FILE_ATTRIBUTE_ARCHIVE = 0x20,    // A file or directory that is an archive file or directory. Applications typically use this attribute to mark files for backup or removal.
				FILE_ATTRIBUTE_DEVICE = 0x40,    // This value is reserved for system use.
				FILE_ATTRIBUTE_NORMAL = 0x80,    // A file that does not have other attributes set. This attribute is valid only when used alone.
				FILE_ATTRIBUTE_TEMPORARY = 0x100,    // A file that is being used for temporary storage. File systems avoid writing data back to mass storage if sufficient cache memory is available, because typically, an application deletes a temporary file after the handle is closed. In that scenario, the system can entirely avoid writing the data. Otherwise, the data is written after the handle is closed.
				FILE_ATTRIBUTE_SPARSE_FILE = 0x200,    // A file that is a sparse file.
				FILE_ATTRIBUTE_REPARSE_POINT = 0x400,    // A file or directory that has an associated reparse point, or a file that is a symbolic link.
				FILE_ATTRIBUTE_COMPRESSED = 0x800,    // A file or directory that is compressed. For a file, all of the data in the file is compressed. For a directory, compression is the default for newly created files and subdirectories.
				FILE_ATTRIBUTE_ENCRYPTED = 0x4000,    // Afile or directory that is encrypted. For a file, all data streams in the file are encrypted. For a directory, encryption is the default for newly created files and subdirectories.
				FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = 0x2000,    // The file or directory is not to be indexed by the content indexing service.
				FILE_ATTRIBUTE_OFFLINE = 0x1000,    // The data of a file is not available immediately. This attribute indicates that the file data is physically moved to offline storage. This attribute is used by Remote Storage, which is the hierarchical storage management software. Applications should not arbitrarily change this attribute.
				FILE_ATTRIBUTE_VIRTUAL = 0x10000,  // This value is reserved for system use.

				Write_Through = 0x80000000,
				Overlapped = 0x40000000,
				NoBuffering = 0x20000000,
				RandomAccess = 0x10000000,
				SequentialScan = 0x8000000,
				DeleteOnClose = 0x4000000,
				BackupSemantics = 0x2000000,
				PosixSemantics = 0x1000000,
				OpenReparsePoint = 0x200000,
				OpenNoRecall = 0x100000,
				FirstPipeInstance = 0x80000
			}

			[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
			internal static extern EFileAttributes GetFileAttributes(string fileName);


			#region GetFileInformationByHandle
			[StructLayout(LayoutKind.Sequential)]
			internal partial struct BY_HANDLE_FILE_INFORMATION
			{
				public int dwFileAttributes;
				public System.Runtime.InteropServices.ComTypes.FILETIME ftCreationTime;
				public System.Runtime.InteropServices.ComTypes.FILETIME ftLastAccessTime;
				public System.Runtime.InteropServices.ComTypes.FILETIME ftLastWriteTime;
				public int dwVolumeSerialNumber;
				public int nFileSizeHigh;
				public int nFileSizeLow;
				public int nNumberOfLinks;
				public int nFileIndexHigh;
				public int nFileIndexLow;
			}


			[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Unicode, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
			private static extern bool GetFileInformationByHandle(
				IntPtr hFile,
			   [In, Out] ref BY_HANDLE_FILE_INFORMATION lpFileInformation);


			internal static BY_HANDLE_FILE_INFORMATION GetFileInformationByHandle(IntPtr hFile)
			{
				BY_HANDLE_FILE_INFORMATION BHFI = new();
				bool bResult = GetFileInformationByHandle(hFile, ref BHFI);
				if (!bResult) "GetFileInformationByHandle".e_ThrowLastWin32Exception();
				return BHFI;
			}


			#endregion


			[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
			internal static extern int GetFinalPathNameByHandle(
				[In] IntPtr hFile,
				[In, Out, MarshalAs(UnmanagedType.LPTStr)] StringBuilder lpszFilePath,
				[In, Out] ref Int32 cchFilePath,
				[In] Int32 dwFlags);


			// < DllImport("kernel32", CharSet = CharSet.Unicode, SetLastError = true)> 
			// < return: MarshalAs(UnmanagedType. bool  )> 
			// private static extern  bool   GetFileSizeEx(SafeFileHandle handle, [Out ] LargeInteger size) 


			[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			internal static extern bool ReadFile(IntPtr hFile, byte[] lpBuffer, int nNumberOfBytesToRead, ref int lpNumberOfBytesRead, IntPtr lpOverlapped);

			[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			internal static extern bool ReadFile(IntPtr hFile, IntPtr lpBuffer, int nNumberOfBytesToRead, ref int lpNumberOfBytesRead, ref NativeOverlapped lpOverlapped);

			[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			internal static extern bool WriteFile(IntPtr hFile, byte[] lpBuffer, int nNumberOfBytesToWrite, ref int lpNumberOfBytesWritten, IntPtr lpOverlapped);

			[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			internal static extern bool WriteFile(IntPtr hFile, IntPtr lpBuffer, int nNumberOfBytesToWrite, ref int lpNumberOfBytesWritten, ref NativeOverlapped lpOverlapped);


			/// <summary>Flushes the buffers of a specified file and causes all buffered data to be written to a file.</summary>
			/// <param name="hFile">A handle to the open file.
			/// The file handle must have the GENERIC_WRITE access right. For more information, see File Security And Access Rights.
			/// If hFile Is a handle To a communications device, the Function only flushes the transmit buffer.
			/// If hFile Is a handle To the server End Of a named pipe, the Function does Not Return until the client has read all buffered data from the pipe.</param>
			/// <returns></returns>
			[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			internal static extern bool FlushFileBuffers(IntPtr hFile);

			[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			internal static extern bool GetOverlappedResult([In] IntPtr hFile,
				[In] NativeOverlapped lpOverlapped,
				[In, Out] ref int lpNumberOfBytesTransferred,
				[In] bool bWait);

			[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			internal static extern bool CancelIo([In] IntPtr hFile);

			#endregion



			//[SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]
			internal static class NTFS
			{


				#region NTFSStreamInfo
				/// <summary>Represents the details of an alternative data stream.</summary>
				[DebuggerDisplay("{FullPath}")]
				internal partial class NTFSStreamInfo
				{
					// Implements  IEquatable(of  <NTFSStreamInfo>

					public const char STREAM_SEPARATOR = ':';
					internal const int DEFAULT_BUFFER_SIZE = 1024 * 1024;
					public const int PATH_LIMIT = MAX_PATH - 4; // 256I
					public const int DefaultBufferSize = 0x1000;
					public const string FULL_STREAM_PATH_SUFFIX = @":$DATA";
					#region Enum

					/// <summary>Represents the type of data in a stream.</summary>
					public enum FileStreamType : int
					{
						/// <summary>Unknown stream type.</summary>
						Unknown = 0,
						/// <summary>Standard data.</summary>
						BACKUP_DATA = 0x1,
						/// <summary>Extended attribute data.</summary>
						BACKUP_EA_DATA = 0x2,
						/// <summary>Security data.</summary>
						BACKUP_SECURITY_DATA = 0x3,
						/// <summary>Alternate data stream.</summary>
						BACKUP_ALTERNATE_DATA = 0x4,
						/// <summary>Hard link information.</summary>
						BACKUP_LINK = 0x5,
						/// <summary>Property data.</summary>
						BACKUP_PROPERTY_DATA = 0x6,
						/// <summary>Object identifiers.</summary>
						BACKUP_OBJECT_ID = 0x7,
						/// <summary>Reparse points.</summary>
						BACKUP_REPARSE_DATA = 0x8,
						/// <summary>Sparse file.</summary>
						BACKUP_SPARSE_BLOCK = 0x9,
						/// <summary>Transactional NTFS (TxF) data stream
						/// Windows Server 2003 and Windows XP/2000:  This value is not supported.</summary>
						BACKUP_TXFS_DATA = 0xA
					}

					/// <summary>Represents the attributes of a file stream.</summary>
					[Flags()]
					public enum FileStreamAttributes : int
					{
						/// <summary>No attributes.</summary>
						None = 0,
						/// <summary>Attribute set if the stream contains data that is modified when read. Allows the backup application to know that verification of data will fail.</summary>
						STREAM_MODIFIED_WHEN_READ = 1,
						/// <summary>Stream contains security data (general attributes). Allows the stream to be ignored on cross-operations restore.</summary>
						STREAM_CONTAINS_SECURITY = 2,
						/// <summary>Set if the stream contains properties.</summary>
						ContainsProperties = 4,
						/// <summary>Set if the stream is sparse.</summary>
						Sparse = 8
					}
					#endregion

					/// <summary>http:'msdn.microsoft.com/en-us/library/aa365247(v=VS.85).aspx</summary></summary>					
					public static readonly char[] InvalidStreamNameChars = Path.GetInvalidFileNameChars().ToArray();



					#region Properties
					/// <summary>Returns the full path of this stream.</summary>
					public string FullPath { get; private set; }
					/// <summary>Returns the full path of the file which contains the stream.</summary>
					public string FilePath { get; private set; }
					/// <summary>Returns the name of the stream.</summary>
					public string Name { get; private set; }
					/// <summary>Returns the size of the stream, in bytes.</summary>
					public long Size { get; private set; }

					/// <summary>Returns the type of data.</summary>
					[EditorBrowsable(EditorBrowsableState.Advanced)]
					public FileStreamType StreamType { get; private set; }

					/// <summary>Returns attributes of the data stream.</summary>
					[EditorBrowsable(EditorBrowsableState.Advanced)]
					public FileStreamAttributes Attributes { get; private set; }

					#endregion


					#region Constructor
					private NTFSStreamInfo(string filePath, WIN32_STREAM_ID info, string sStreamName)
					{
						FilePath = filePath;
						StreamType = info.StreamId;
						Attributes = info.StreamAttributes;
						Size = info.Size;
						Name = sStreamName;
						FullPath = BuildStreamPath(FilePath, Name);
					}

					/// <summary>
					/// Initializes a new instance of the <see cref="NTFSStreamInfo"/> class.
					/// </summary>
					/// <param name="filePath">
					/// The full path of the file.
					/// This argument must not be <see langword=" nothing "/>.
					/// </param>
					/// <param name="streamName">
					/// The name of the stream
					/// This argument must not be <see langword=" nothing "/>.
					/// </param>
					/// <param name="fullPath">
					/// The full path of the stream.
					/// If this argument is <see langword=" nothing "/>, it will be generated from the 
					/// <paramref name="filePath"/> and <paramref name="streamName"/> arguments.
					/// </param>
					/// <param name="exists">
					/// <see langword="true"/> if the stream exists 
					/// otherwise, <see langword="false"/>.
					/// </param>
					private NTFSStreamInfo(string filePath, string streamName, string fullPath)
					{
						if (string.IsNullOrEmpty(fullPath)) fullPath = BuildStreamPath(filePath, streamName);
						StreamType = FileStreamType.BACKUP_ALTERNATE_DATA;
						FilePath = filePath;
						Name = streamName;
						FullPath = fullPath;
					}
					#endregion



					#region Methods

					#region -IEquatable

					// '''<summary>
					// '''Returns a <see cref="String"/> that represents the current instance.
					// '''</summary>
					// '''<returns>
					// '''A <see cref="String"/> that represents the current instance.
					// '''</returns>
					// public override string ToString()
					// {
					// return  me.FullPath 
					// }

					// '''<summary>
					// '''Serves as a hash function for a particular type.
					// '''</summary>
					// '''<returns>
					// '''A hash code for the current <see cref="Object"/>.
					// '''</returns>
					// public override integer GetHashCode()
					// {
					// var comparer = StringComparer.OrdinalIgnoreCase 
					// return comparer.GetHashCode(_filePath ?? string.Empty)
					// ^ comparer.GetHashCode(_streamName ?? string.Empty) 
					// }

					// '''<summary>
					// '''Indicates whether the current object is equal to another object of the same type.
					// '''</summary>
					// '''<param name="obj">
					// '''An object to compare with this object.
					// '''</param>
					// '''<returns>
					// '''<see langword="true"/> if the current object is equal to the <paramref name="obj"/> parameter 
					// '''otherwise, <see langword="false"/>.
					// '''</returns>
					// public override  bool   Equals(object obj)
					// {
					// if (object.ReferenceEquals( nothing , obj)) return false 
					// if (object.ReferenceEquals(this, obj)) return true 

					// NTFSStreamInfo other = obj as NTFSStreamInfo 
					// if ( not object.ReferenceEquals( nothing , other)) return  me.Equals(other) 

					// return false 
					// }

					// '''<summary>
					// '''Returns a value indicating whether
					// '''this instance is equal to another instance.
					// '''</summary>
					// '''<param name="other">
					// '''The instance to compare to.
					// '''</param>
					// '''<returns>
					// '''<see langword="true"/> if the current object is equal to the <paramref name="other"/> parameter 
					// '''otherwise, <see langword="false"/>.
					// '''</returns>
					// public  bool   Equals(NTFSStreamInfo other)
					// {
					// if (object.ReferenceEquals( nothing , other)) return false 
					// if (object.ReferenceEquals(this, other)) return true 

					// var comparer = StringComparer.OrdinalIgnoreCase 
					// return comparer.Equals( me._filePath ?? string.Empty, other._filePath ?? string.Empty)
					// && comparer.Equals( me._streamName ?? string.Empty, other._streamName ?? string.Empty) 
					// }

					// '''<summary>
					// '''The equality operator.
					// '''</summary>
					// '''<param name="first">
					// '''The first object.
					// '''</param>
					// '''<param name="second">
					// '''The second object.
					// '''</param>
					// '''<returns>
					// '''<see langword="true"/> if the two objects are equal 
					// '''otherwise, <see langword="false"/>.
					// '''</returns>
					// public shared  bool   operator ==(NTFSStreamInfo first, NTFSStreamInfo second)
					// {
					// if (object.ReferenceEquals(first, second)) return true 
					// if (object.ReferenceEquals( nothing , first)) return false 
					// if (object.ReferenceEquals( nothing , second)) return false 
					// return first.Equals(second) 
					// }

					// '''<summary>
					// '''The inequality operator.
					// '''</summary>
					// '''<param name="first">
					// '''The first object.
					// '''</param>
					// '''<param name="second">
					// '''The second object.
					// '''</param>
					// '''<returns>
					// '''<see langword="true"/> if the two objects are not equal 
					// '''otherwise, <see langword="false"/>.
					// '''</returns>
					// public shared  bool   Operator <>(NTFSStreamInfo first, NTFSStreamInfo second)
					// {
					// if (object.ReferenceEquals(first, second)) return false 
					// if (object.ReferenceEquals( nothing , first)) return true 
					// if (object.ReferenceEquals( nothing , second)) return true 
					// return !first.Equals(second) 
					// }

					#endregion

					#region -Delete
					/// <summary>Deletes this stream from the parent file.</summary>
					/// <returns><see langword="true"/> if the stream was deleted otherwise, <see langword="false"/>.</returns>
					/// <exception cref="SecurityException"> The caller does not have the required permission.</exception>
					/// <exception cref="UnauthorizedAccessException">The caller does not have the required permission, or the file is read-only.</exception>
					/// <exception cref="IOException">The specified file is in use.</exception>
					/// <exception cref="ArgumentException">The path of the stream is invalid.</exception>
					public bool Delete()
					{
#pragma warning disable SYSLIB0003 // Type or member is obsolete
						(new FileIOPermission(FileIOPermissionAccess.Write, FilePath)).Demand();
#pragma warning restore SYSLIB0003 // Type or member is obsolete
						return SafeDeleteFile(FullPath);
					}

					#endregion

					#region -Open

#pragma warning disable SYSLIB0003 // Type or member is obsolete

					/// <summary>Calculates the access to demand.</summary>
					/// <param name="mode">The <see cref="FileMode"/>.</param>
					/// <param name="access">The <see cref="FileAccess"/>.</param>
					/// <returns>The <see cref="FileIOPermissionAccess"/>.</returns>
					private static FileIOPermissionAccess CalculateAccess(FileMode mode, FileAccess access)
					{
						var permAccess = FileIOPermissionAccess.NoAccess;
						switch (mode)
						{
							case FileMode.Append: permAccess = FileIOPermissionAccess.Append; break;
							case FileMode.Create: break;
							case FileMode.CreateNew: break;
							case FileMode.OpenOrCreate: break;
							case FileMode.Truncate: permAccess = FileIOPermissionAccess.Write; break;
							case FileMode.Open: permAccess = FileIOPermissionAccess.Read; break;
						}

						switch (access)
						{
							case FileAccess.ReadWrite:
								permAccess |= FileIOPermissionAccess.Write | FileIOPermissionAccess.Read; break;

							case FileAccess.Write:
								permAccess |= FileIOPermissionAccess.Write; break;

							case FileAccess.Read:
								permAccess |= FileIOPermissionAccess.Read; break;
						}
						return permAccess;
					}
#pragma warning restore SYSLIB0003 // Type or member is obsolete

					/// <summary>
					/// Opens this alternate data stream.
					/// </summary>
					/// <param name="mode">
					/// A <see cref="FileMode"/> value that specifies whether a stream is created if one does not exist, 
					/// and determines whether the contents of existing streams are retained or overwritten.
					/// </param>
					/// <param name="access">
					/// A <see cref="FileAccess"/> value that specifies the operations that can be performed on the stream. 
					/// </param>
					/// <param name="share">
					/// A <see cref="FileShare"/> value specifying the type of access other threads have to the file. 
					/// </param>
					/// <param name="bufferSize">
					/// The size of the buffer to use.
					/// </param>
					/// <param name="useAsync">
					/// <see langword="true"/> to enable async-IO 
					/// otherwise, <see langword="false"/>.
					/// </param>
					/// <returns>
					/// A <see cref="FileStream"/> for this alternate data stream.
					/// </returns>
					/// <exception cref="ArgumentOutOfRangeException">
					/// <paramref name="bufferSize"/> is less than or equal to zero.
					/// </exception>
					/// <exception cref="SecurityException">
					/// The caller does not have the required permission. 
					/// </exception>
					/// <exception cref="UnauthorizedAccessException">
					/// The caller does not have the required permission, or the file is read-only.
					/// </exception>
					/// <exception cref="IOException">
					/// The specified file is in use. 
					/// </exception>
					/// <exception cref="ArgumentException">
					/// The path of the stream is invalid.
					/// </exception>
					/// <exception cref="Win32Exception">
					/// There was an error opening the stream.
					/// </exception>
					public FileStream Open(FileMode mode, FileAccess access, FileShare share, int bufferSize, bool useAsync)
					{
						if (0 >= bufferSize) throw new ArgumentOutOfRangeException(nameof(bufferSize), bufferSize, null);

#pragma warning disable SYSLIB0003 // Type or member is obsolete
						(new FileIOPermission(CalculateAccess(mode, access), FilePath))
							.Demand();
#pragma warning restore SYSLIB0003 // Type or member is obsolete

						var flags = useAsync ? IO.NativeFileFlags.Overlapped : (IO.NativeFileFlags)0;
						var handle = CreateFileHandle(FullPath, ToNative(access), share, IntPtr.Zero, mode, flags, IntPtr.Zero);
						handle.e_IsValid().e_ThrowLastWin32Exception_AssertFalse("CreateFileHandle");
						return new FileStream(handle, access, bufferSize, useAsync);
					}


					/// <summary>Opens this alternate data stream.</summary>
					/// <param name="mode">A <see cref="FileMode"/> value that specifies whether a stream is created if one does not exist, and determines whether the contents of existing streams are retained or overwritten.</param>
					/// <param name="access">A <see cref="FileAccess"/> value that specifies the operations that can be performed on the stream. </param>
					/// <param name="share">A <see cref="FileShare"/> value specifying the type of access other threads have to the file. </param>
					/// <param name="bufferSize">The size of the buffer to use.</param>
					/// <returns>A <see cref="FileStream"/> for this alternate data stream.</returns>
					/// <exception cref="ArgumentOutOfRangeException"><paramref name="bufferSize"/> is less than or equal to zero.</exception>
					/// <exception cref="SecurityException">The caller does not have the required permission. </exception>
					/// <exception cref="UnauthorizedAccessException">The caller does not have the required permission, or the file is read-only.</exception>
					/// <exception cref="IOException">The specified file is in use. </exception>
					/// <exception cref="ArgumentException">The path of the stream is invalid.</exception>
					/// <exception cref="Win32Exception">There was an error opening the stream.</exception>
					public FileStream Open(FileMode mode, FileAccess access, FileShare share, int bufferSize)
						=> Open(mode, access, share, bufferSize, false);


					/// <summary>Opens this alternate data stream.</summary>
					/// <param name="mode">A <see cref="FileMode"/> value that specifies whether a stream is created if one does not exist, and determines whether the contents of existing streams are retained or overwritten.</param>
					/// <param name="access">A <see cref="FileAccess"/> value that specifies the operations that can be performed on the stream. </param>
					/// <param name="share">A <see cref="FileShare"/> value specifying the type of access other threads have to the file. </param>
					/// <returns>A <see cref="FileStream"/> for this alternate data stream.</returns>
					/// <exception cref="SecurityException">The caller does not have the required permission. </exception>
					/// <exception cref="UnauthorizedAccessException">The caller does not have the required permission, or the file is read-only.</exception>
					/// <exception cref="IOException">The specified file is in use. </exception>
					/// <exception cref="ArgumentException">The path of the stream is invalid.</exception>
					/// <exception cref="Win32Exception">There was an error opening the stream.</exception>
					public FileStream Open(FileMode mode, FileAccess access, FileShare share)
						=> Open(mode, access, share, DefaultBufferSize, false);


					/// <summary>Opens this alternate data stream.</summary>
					/// <param name="mode">A <see cref="FileMode"/> value that specifies whether a stream is created if one does not exist, and determines whether the contents of existing streams are retained or overwritten.</param>
					/// <param name="access">A <see cref="FileAccess"/> value that specifies the operations that can be performed on the stream.</param>
					/// <returns>A <see cref="FileStream"/> for this alternate data stream.</returns>
					/// <exception cref="SecurityException">The caller does not have the required permission. </exception>
					/// <exception cref="UnauthorizedAccessException">The caller does not have the required permission, or the file is read-only.</exception>
					/// <exception cref="IOException">The specified file is in use. </exception>
					/// <exception cref="ArgumentException">The path of the stream is invalid.</exception>
					/// <exception cref="Win32Exception">There was an error opening the stream.</exception>
					public FileStream Open(FileMode mode, FileAccess access)
						=> Open(mode, access, FileShare.None, DefaultBufferSize, false);


					/// <summary>Opens this alternate data stream.</summary>
					/// <param name="mode"> A <see cref="FileMode"/> value that specifies whether a stream is created if one does not exist, and determines whether the contents of existing streams are retained or overwritten.</param>
					/// <returns>A <see cref="FileStream"/> for this alternate data stream.</returns>
					/// <exception cref="SecurityException"> The caller does not have the required permission.  </exception>
					/// <exception cref="UnauthorizedAccessException"> The caller does not have the required permission, or the file is read-only.</exception>
					/// <exception cref="IOException"> The specified file is in use.  </exception>
					/// <exception cref="ArgumentException"> The path of the stream is invalid. </exception>
					/// <exception cref="Win32Exception"> There was an error opening the stream. </exception>
					public FileStream Open(FileMode mode)
						=> Open(mode, (FileMode.Append == mode)
							? FileAccess.Write
							: FileAccess.ReadWrite,
							FileShare.None,
							DefaultBufferSize,
							false);

					#endregion

					#region -OpenRead / OpenWrite / OpenText

					/// <summary>
					/// Opens this stream for reading.
					/// </summary>
					/// <returns>
					/// A read-only <see cref="FileStream"/> for this stream.
					/// </returns>
					/// <exception cref="SecurityException">
					/// The caller does not have the required permission. 
					/// </exception>
					/// <exception cref="UnauthorizedAccessException">
					/// The caller does not have the required permission, or the file is read-only.
					/// </exception>
					/// <exception cref="IOException">
					/// The specified file is in use. 
					/// </exception>
					/// <exception cref="ArgumentException">
					/// The path of the stream is invalid.
					/// </exception>
					/// <exception cref="Win32Exception">
					/// There was an error opening the stream.
					/// </exception>
					public FileStream OpenRead() => Open(FileMode.Open, FileAccess.Read, FileShare.Read);

					/// <summary>
					/// Opens this stream for writing.
					/// </summary>
					/// <returns>
					/// A write-only <see cref="FileStream"/> for this stream.
					/// </returns>
					/// <exception cref="SecurityException">
					/// The caller does not have the required permission. 
					/// </exception>
					/// <exception cref="UnauthorizedAccessException">
					/// The caller does not have the required permission, or the file is read-only.
					/// </exception>
					/// <exception cref="IOException">
					/// The specified file is in use. 
					/// </exception>
					/// <exception cref="ArgumentException">
					/// The path of the stream is invalid.
					/// </exception>
					/// <exception cref="Win32Exception">
					/// There was an error opening the stream.
					/// </exception>
					public FileStream OpenWrite() => Open(FileMode.OpenOrCreate, FileAccess.Write, FileShare.None);

					/// <summary>
					/// Opens this stream as a text file.
					/// </summary>
					/// <returns>
					/// A <see cref="StreamReader"/> which can be used to read the contents of this stream.
					/// </returns>
					/// <exception cref="SecurityException">
					/// The caller does not have the required permission. 
					/// </exception>
					/// <exception cref="UnauthorizedAccessException">
					/// The caller does not have the required permission, or the file is read-only.
					/// </exception>
					/// <exception cref="IOException">
					/// The specified file is in use. 
					/// </exception>
					/// <exception cref="ArgumentException">
					/// The path of the stream is invalid.
					/// </exception>
					/// <exception cref="Win32Exception">
					/// There was an error opening the stream.
					/// </exception>
					public StreamReader OpenText()
					{
						Stream FileStream = Open(FileMode.Open, FileAccess.Read, FileShare.Read);
						return new StreamReader(FileStream);
					}

					#endregion

					#endregion

					#region Stream Exists

					/// <summary>
					/// <span style="font-weight:bold color:#a00 ">(Extension Method)</span><br />
					/// Returns a flag indicating whether the specified alternate data stream exists.
					/// </summary>
					/// <param name="file">
					/// The <see cref="FileInfo"/> to inspect.
					/// </param>
					/// <param name="streamName">
					/// The name of the stream to find.
					/// </param>
					/// <returns>
					/// <see langword="true"/> if the specified stream exists 
					/// otherwise, <see langword="false"/>.
					/// </returns>
					/// <exception cref="ArgumentNullException">
					/// <paramref name="file"/> is <see langword=" nothing "/>.
					/// </exception>
					/// <exception cref="ArgumentException">
					/// <paramref name="streamName"/> contains invalid characters.
					/// </exception>
					public static bool StreamExists(string File, string streamName)
					{
						if (File.e_IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(File));
						ValidateStreamName(streamName);
						string path = BuildStreamPath(File, streamName);
						return -1 != SafeGetFileAttributes(path);
					}

					#endregion

					#region Open Stream
					/// <summary>
					/// <span style="font-weight:bold color:#a00 ">(Extension Method)</span><br />
					/// Opens an alternate data stream.
					/// </summary>
					/// <param name="file">
					/// The <see cref="FileInfo"/> which contains the stream.
					/// </param>
					/// <param name="streamName">
					/// The name of the stream to open.
					/// </param>
					/// <param name="mode">
					/// One of the <see cref="FileMode"/> values, indicating how the stream is to be opened.
					/// </param>
					/// <returns>
					/// An <see cref="NTFSStreamInfo"/> representing the stream.
					/// </returns>
					/// <exception cref="ArgumentNullException">
					/// <paramref name="file"/> is <see langword="null"/>.
					/// </exception>
					/// <exception cref="FileNotFoundException">The specified <paramref name="file"/> was not found.</exception>
					/// <exception cref="ArgumentException">
					/// <paramref name="streamName"/> contains invalid characters.
					/// </exception>
					/// <exception cref="NotSupportedException">
					/// <paramref name="mode"/> is either <see cref="FileMode.Truncate"/> or <see cref="FileMode.Append"/>.
					/// </exception>
					/// <exception cref="IOException">
					/// <para><paramref name="mode"/> is <see cref="FileMode.Open"/>, and the stream doesn't exist.</para>
					/// <para>-or-</para>
					/// <para><paramref name="mode"/> is <see cref="FileMode.CreateNew"/>, and the stream already exists.</para>
					/// </exception>
					/// <exception cref="SecurityException">
					/// The caller does not have the required permission. 
					/// </exception>
					/// <exception cref="UnauthorizedAccessException">
					/// The caller does not have the required permission, or the file is read-only.
					/// </exception>
					public static NTFSStreamInfo GetAlternateDataStream(FileSystemInfo file, string streamName, FileMode mode)
					{
						if (null == file) throw new ArgumentNullException(nameof(file));
						if (!file.Exists) throw new FileNotFoundException(null, file.FullName);

						ValidateStreamName(streamName);
						if (FileMode.Truncate == mode || FileMode.Append == mode)
							throw new NotSupportedException("Error_InvalidMode");

#pragma warning disable SYSLIB0003 // Type or member is obsolete
						FileIOPermissionAccess permAccess =
							(FileMode.Open == mode)
							? FileIOPermissionAccess.Read
							: (FileIOPermissionAccess.Read | FileIOPermissionAccess.Write);

						(new FileIOPermission(permAccess, file.FullName)).Demand();

#pragma warning restore SYSLIB0003 // Type or member is obsolete

						string path = BuildStreamPath(file.FullName, streamName);
						bool exists = -1 != SafeGetFileAttributes(path);
						if (!exists && FileMode.Open == mode)
							throw new IOException("Error_StreamNotFound");

						if (exists && FileMode.CreateNew == mode)
							throw new IOException("Error_StreamExists");

						return new NTFSStreamInfo(file.FullName, streamName, path);
					}

					// '''<summary>
					// '''<span style="font-weight:bold color:#a00 ">(Extension Method)</span><br />
					// '''Opens an alternate data stream.
					// '''</summary>
					// '''<param name="file">
					// '''The <see cref="FileInfo"/> which contains the stream.
					// '''</param>
					// '''<param name="streamName">
					// '''The name of the stream to open.
					// '''</param>
					// '''<returns>
					// '''An <see cref="NTFSStreamInfo"/> representing the stream.
					// '''</returns>
					// '''<exception cref="ArgumentNullException">
					// '''<paramref name="file"/> is <see langword=" nothing "/>.
					// '''</exception>
					// '''<exception cref="FileNotFoundException">
					// '''The specified <paramref name="file"/> was not found.
					// '''</exception>
					// '''<exception cref="ArgumentException">
					// '''<paramref name="streamName"/> contains invalid characters.
					// '''</exception>
					// '''<exception cref="SecurityException">
					// '''The caller does not have the required permission. 
					// '''</exception>
					// '''<exception cref="UnauthorizedAccessException">
					// '''The caller does not have the required permission, or the file is read-only.
					// '''</exception>
					// public shared NTFSStreamInfo GetAlternateDataStream(this FileSystemInfo file, string streamName)
					// {
					// return file.GetAlternateDataStream(streamName, FileMode.OpenOrCreate) 
					// }

					// '''<summary>
					// '''Opens an alternate data stream.
					// '''</summary>
					// '''<param name="filePath">
					// '''The path of the file which contains the stream.
					// '''</param>
					// '''<param name="streamName">
					// '''The name of the stream to open.
					// '''</param>
					// '''<param name="mode">
					// '''One of the <see cref="FileMode"/> values, indicating how the stream is to be opened.
					// '''</param>
					// '''<returns>
					// '''An <see cref="NTFSStreamInfo"/> representing the stream.
					// '''</returns>
					// '''<exception cref="ArgumentNullException">
					// '''<paramref name="filePath"/> is <see langword=" nothing "/> or an empty string.
					// '''</exception>
					// '''<exception cref="FileNotFoundException">
					// '''The specified <paramref name="filePath"/> was not found.
					// '''</exception>
					// '''<exception cref="ArgumentException">
					// '''<para><paramref name="filePath"/> is not a valid file path.</para>
					// '''<para>-or-</para>
					// '''<para><paramref name="streamName"/> contains invalid characters.</para>
					// '''</exception>
					// '''<exception cref="NotSupportedException">
					// '''<paramref name="mode"/> is either <see cref="FileMode.Truncate"/> or <see cref="FileMode.Append"/>.
					// '''</exception>
					// '''<exception cref="IOException">
					// '''<para><paramref name="mode"/> is <see cref="FileMode.Open"/>, and the stream doesn't exist.</para>
					// '''<para>-or-</para>
					// '''<para><paramref name="mode"/> is <see cref="FileMode.CreateNew"/>, and the stream already exists.</para>
					// '''</exception>
					// '''<exception cref="SecurityException">
					// '''The caller does not have the required permission. 
					// '''</exception>
					// '''<exception cref="UnauthorizedAccessException">
					// '''The caller does not have the required permission, or the file is read-only.
					// '''</exception>
					// public shared NTFSStreamInfo GetAlternateDataStream(string filePath, string streamName, FileMode mode)
					// {
					// if (string.IsNullOrEmpty(filePath)) then throw  new ArgumentNullException("filePath") 
					// return CreateInfo(filePath).GetAlternateDataStream(streamName, mode) 
					// }

					// '''<summary>
					// '''Opens an alternate data stream.
					// '''</summary>
					// '''<param name="filePath">
					// '''The path of the file which contains the stream.
					// '''</param>
					// '''<param name="streamName">
					// '''The name of the stream to open.
					// '''</param>
					// '''<returns>
					// '''An <see cref="NTFSStreamInfo"/> representing the stream.
					// '''</returns>
					// '''<exception cref="ArgumentNullException">
					// '''<paramref name="filePath"/> is <see langword=" nothing "/> or an empty string.
					// '''</exception>
					// '''<exception cref="FileNotFoundException">
					// '''The specified <paramref name="filePath"/> was not found.
					// '''</exception>
					// '''<exception cref="ArgumentException">
					// '''<para><paramref name="filePath"/> is not a valid file path.</para>
					// '''<para>-or-</para>
					// '''<para><paramref name="streamName"/> contains invalid characters.</para>
					// '''</exception>
					// '''<exception cref="SecurityException">
					// '''The caller does not have the required permission. 
					// '''</exception>
					// '''<exception cref="UnauthorizedAccessException">
					// '''The caller does not have the required permission, or the file is read-only.
					// '''</exception>
					// public shared NTFSStreamInfo GetAlternateDataStream(string filePath, string streamName)
					// {
					// return GetAlternateDataStream(filePath, streamName, FileMode.OpenOrCreate) 
					// }

					#endregion

					#region Delete Stream
					/// <summary>
					/// <span style="font-weight:bold color:#a00 ">(Extension Method)</span><br />
					/// Deletes the specified alternate data stream if it exists.
					/// </summary>
					/// <param name="file">
					/// The <see cref="FileInfo"/> to inspect.
					/// </param>
					/// <param name="streamName">
					/// The name of the stream to delete.
					/// </param>
					/// <returns>
					/// <see langword="true"/> if the specified stream is deleted 
					/// otherwise, <see langword="false"/>.
					/// </returns>
					/// <exception cref="ArgumentNullException">
					/// <paramref name="file"/> is <see langword=" nothing "/>.
					/// </exception>
					/// <exception cref="ArgumentException">
					/// <paramref name="streamName"/> contains invalid characters.
					/// </exception>
					/// <exception cref="SecurityException">
					/// The caller does not have the required permission. 
					/// </exception>
					/// <exception cref="UnauthorizedAccessException">
					/// The caller does not have the required permission, or the file is read-only.
					/// </exception>
					/// <exception cref="IOException">
					/// The specified file is in use. 
					/// </exception>
					public static bool DeleteStream(FileSystemInfo file, string streamName)
					{
						_ = file ?? throw new ArgumentNullException(nameof(file));

						ValidateStreamName(streamName);

#pragma warning disable SYSLIB0003 // Type or member is obsolete
						(new FileIOPermission(FileIOPermissionAccess.Write, file.FullName))
							.Demand();

#pragma warning restore SYSLIB0003 // Type or member is obsolete

						bool result = false;
						if (file.Exists)
						{
							string path = BuildStreamPath(file.FullName, streamName);
							if (-1 != SafeGetFileAttributes(path)) result = SafeDeleteFile(path);
						}
						return result;
					}
					#endregion

					#region API

					[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode, Pack = 1)]
					private partial struct WIN32_STREAM_ID
					{
						public FileStreamType StreamId;
						public FileStreamAttributes StreamAttributes;
						public long Size;
						public int StreamNameSize;


						// DWORD         dwStreamId;
						// DWORD         dwStreamAttributes;
						// LARGE_INTEGER Size;
						// DWORD         dwStreamNameSize;
						// WCHAR         cStreamName[ANYSIZE_ARRAY];

						public string? ReadStreamName(Microsoft.Win32.SafeHandles.SafeFileHandle hFile, ref IntPtr lpContext, ref bool bFinished)
						{
							if (StreamNameSize < 10) return null;

							using Memory.LocalMemory hMem = new(StreamNameSize);
							hMem.ZeroMemory();
							int BytesRead = 0;
							bool bNameRead = NTFSStreamInfo.BackupRead(hFile, hMem, StreamNameSize, ref BytesRead, false, false, ref lpContext);
							if (!bNameRead)
							{
								bFinished = true;
								return null;
							}

							// Unicode chars are 2 bytes:
							int iChars = (int)Math.Round(StreamNameSize / 2d);
							var sTempName = hMem.DangerousGetHandle().e_PtrToString(iChars);
							if (sTempName.e_IsNullOrWhiteSpace()) return null;

							// Name is of the format ":NAME:$DATA\0"
							int separatorIndex = sTempName!.IndexOf(STREAM_SEPARATOR, 1);
							if (separatorIndex != -1)
							{
								sTempName = sTempName.Substring(1, separatorIndex - 1);
							}
							else
							{
								// Should never happen!
								separatorIndex = sTempName.IndexOf('\0');
								if (1 < separatorIndex)
								{
									sTempName = sTempName.Substring(1, separatorIndex - 1);
								}
								else
								{
									sTempName = null;
								}
							}

							return sTempName;
						}

						public static readonly int STRUCT_SIZE = Marshal.SizeOf(typeof(WIN32_STREAM_ID));
					}

					[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
					private static extern bool BackupRead(Microsoft.Win32.SafeHandles.SafeFileHandle hFile,
						ref WIN32_STREAM_ID pBuffer,
						int numberOfBytesToRead,
						[In, Out] ref int numberOfBytesRead,
						[MarshalAs(UnmanagedType.Bool)] bool abort,
						[MarshalAs(UnmanagedType.Bool)] bool processSecurity,
						ref IntPtr context);


					[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
					private static extern bool BackupRead(Microsoft.Win32.SafeHandles.SafeFileHandle hFile,
						IntPtr pBuffer,
						int numberOfBytesToRead,
						[In, Out] ref int numberOfBytesRead,
						[MarshalAs(UnmanagedType.Bool)] bool abort,
						[MarshalAs(UnmanagedType.Bool)] bool processSecurity,
						ref IntPtr context);


					[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
					private static extern bool BackupSeek(Microsoft.Win32.SafeHandles.SafeFileHandle hFile,
						int bytesToSeekLow,
						int bytesToSeekHigh,
						[In, Out] ref int bytesSeekedLow,
						[In, Out] ref int bytesSeekedHigh,
						ref IntPtr context);

					// /*
					// < StructLayout(LayoutKind.Sequential)> 
					// private struct FileInformationByHandle
					// {
					// public integer dwFileAttributes 
					// public LargeInteger ftCreationTime 
					// public LargeInteger ftLastAccessTime 
					// public LargeInteger ftLastWriteTime 
					// public integer dwVolumeSerialNumber 
					// public LargeInteger FileSize 
					// public integer nNumberOfLinks 
					// public LargeInteger FileIndex 
					// }
					// */



					private static Microsoft.Win32.SafeHandles.SafeFileHandle CreateFileHandle(string path, IO.NativeFileAccess access, FileShare share, IntPtr security, FileMode mode, IO.NativeFileFlags flags, IntPtr template)
					{
						var Result = CreateFileAsSafeFileHandle(path, access, share, security, mode, flags, template);
						if (!Result.IsInvalid && GetFileType(Result) != FileTypes.FILE_TYPE_DISK)
						{
							Result.Dispose();
							throw new NotSupportedException();
						}

						return Result;
					}

					private static int SafeGetFileAttributes(string name)
					{
						if (name.e_IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(name));
						var result = GetFileAttributes(name);
						if (-1 == (int)result)
						{
							var WEX = new Errors.Win32ExceptionEx("GetFileAttributes");
							WEX.e_ThrowIfNot(Errors.Win32Errors.ERROR_FILE_NOT_FOUND);
						}

						return (int)result;
					}

					private static bool SafeDeleteFile(string name)
					{
						if (name.e_IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(name));
						bool result = DeleteFile(name);
						if (!result)
						{
							var WEX = new Errors.Win32ExceptionEx("DeleteFile");
							WEX.e_ThrowIfNot(Errors.Win32Errors.ERROR_FILE_NOT_FOUND);
						}
						return result;
					}

					private static NativeFileAccess ToNative(FileAccess access)
					{
						NativeFileAccess result = 0;
						if (FileAccess.Read == (FileAccess.Read & access)) result |= NativeFileAccess.GenericRead;
						if (FileAccess.Write == (FileAccess.Write & access)) result |= NativeFileAccess.GenericWrite;
						return result;
					}



					// private shared long GetFileSize(string path, SafeFileHandle handle)
					// {
					// long result = 0L 
					// if ( nothing <>handle && !handle.IsInvalid)
					// {
					// LargeInteger value 
					// if (GetFileSizeEx(handle, [In,Out]value))
					// {
					// result = value.ToInt64() 
					// }
					// else
					// {
					// ThrowLastIOError(path) 
					// }
					// }

					// return result 
					// }

					// public shared long GetFileSize(string path)
					// {
					// long result = 0L 
					// if ( not string.IsNullOrEmpty(path))
					// {
					// using (SafeFileHandle handle = SafeCreateFile(path, NativeFileAccess.GenericRead, FileShare.Read, IntPtr.Zero, FileMode.Open, 0, IntPtr.Zero))
					// {
					// result = GetFileSize(path, handle) 
					// }
					// }

					// return result 
					// }

					#region MakeHRFromErrorCode



					// private shared integer MakeHRFromErrorCode( integer  errorCode)
					// {
					// return (-2147024896 | errorCode) 
					// }

					// private shared string GetErrorMessage( integer  errorCode)
					// {
					// var lpBuffer = new StringBuilder(0x200) 
					// if (0<>FormatMessage(0x3200, IntPtr.Zero, errorCode, 0, lpBuffer, lpBuffer.Capacity, IntPtr.Zero))
					// {
					// return lpBuffer.ToString() 
					// }

					// return string.Format(Resources.Culture, Resources.Error_UnknownError, errorCode) 
					// }

					// private shared void ThrowIOError( integer  errorCode, string path)
					// {
					// switch (errorCode)
					// {
					// case 0:
					// {
					// break 
					// }
					// case 2: ' File not found
					// {
					// if (string.IsNullOrEmpty(path)) then throw  new FileNotFoundException() 
					// throw new FileNotFoundException( nothing , path) 
					// }
					// case 3: ' Directory not found
					// {
					// if (string.IsNullOrEmpty(path)) then throw  new DirectoryNotFoundException() 
					// throw new DirectoryNotFoundException(string.Format(Resources.Culture, Resources.Error_DirectoryNotFound, path)) 
					// }
					// case 5: ' Access denied
					// {
					// if (string.IsNullOrEmpty(path)) then throw  new UnauthorizedAccessException() 
					// throw new UnauthorizedAccessException(string.Format(Resources.Culture, Resources.Error_AccessDenied_Path, path)) 
					// }
					// case 15: ' Drive not found
					// {
					// if (string.IsNullOrEmpty(path)) then throw  new DriveNotFoundException() 
					// throw new DriveNotFoundException(string.Format(Resources.Culture, Resources.Error_DriveNotFound, path)) 
					// }
					// case 32: ' Sharing violation
					// {
					// if (string.IsNullOrEmpty(path)) then throw  new IOException(GetErrorMessage(errorCode), MakeHRFromErrorCode(errorCode)) 
					// throw new IOException(string.Format(Resources.Culture, Resources.Error_SharingViolation, path), MakeHRFromErrorCode(errorCode)) 
					// }
					// case 80: ' File already exists
					// {
					// if ( not string.IsNullOrEmpty(path))
					// {
					// throw new IOException(string.Format(Resources.Culture, Resources.Error_FileAlreadyExists, path), MakeHRFromErrorCode(errorCode)) 
					// }
					// break 
					// }
					// case 87: ' Invalid parameter
					// {
					// throw new IOException(GetErrorMessage(errorCode), MakeHRFromErrorCode(errorCode)) 
					// }
					// case 183: ' File or directory already exists
					// {
					// if ( not string.IsNullOrEmpty(path))
					// {
					// throw new IOException(string.Format(Resources.Culture, Resources.Error_AlreadyExists, path), MakeHRFromErrorCode(errorCode)) 
					// }
					// break 
					// }
					// case 206: ' Path too long
					// {
					// throw new PathTooLongException() 
					// }
					// case 995: ' Operation cancelled
					// {
					// throw new OperationCanceledException() 
					// }
					// default:
					// {
					// Marshal.ThrowExceptionForHR(MakeHRFromErrorCode(errorCode)) 
					// break 
					// }
					// }
					// }

					// public shared void ThrowLastIOError(string path)
					// {
					// integer  errorCode = Marshal.GetLastWin32Error() 
					// if (0<>errorCode)
					// {
					// integer  hr = Marshal.GetHRForLastWin32Error() 
					// if (0 <= hr) then throw  new Win32Exception(errorCode) 
					// ThrowIOError(errorCode, path) 
					// }
					// }
					#endregion
					#endregion

					public static string BuildStreamPath(string filePath, string streamName)
					{
						string Result = filePath;
						if (filePath.e_IsNOTNullOrWhiteSpace())
						{
							if (Result.Length == 1) Result = @".\\" + Result;
							Result += STREAM_SEPARATOR + streamName + FULL_STREAM_PATH_SUFFIX;
							if (Result.Length >= PATH_LIMIT) Result = uom.WinAPI.IO.UNC_PATH_PREFIX + Result;
						}

						return Result;
					}

					public string ReadablePath
					{
						get
						{
							string sPath = FullPath;
							if (sPath.EndsWith(FULL_STREAM_PATH_SUFFIX))
							{
								sPath = sPath.Replace(FULL_STREAM_PATH_SUFFIX, "");
							}

							return sPath;
						}
					}

					private static void ValidateStreamName(string streamName)
					{
						// Return tru
						// if ( not string.IsNullOrEmpty(streamName) && -1<>streamName.IndexOfAny(InvalidStreamNameChars))
						// {
						// Throw New ArgumentException(Resources.Error_InvalidFileChars)
						// }
					}

					#region GetStreams

					public static NTFSStreamInfo[] GetStreams(FileSystemInfo rPath)
					{
						if (!rPath.Exists) throw new FileNotFoundException(null, rPath.FullName);
						return GetStreams(rPath.FullName);
					}

					public static NTFSStreamInfo[] GetStreams(string sFullPath)
					{
						if (sFullPath.e_IsNullOrWhiteSpace()) throw new ArgumentNullException("sFullPath");
						var lResult = new List<NTFSStreamInfo>();

#pragma warning disable SYSLIB0003 // Type or member is obsolete
						sFullPath.DemandFileIOPermission(FileIOPermissionAccess.Read); // Запрос на доступ к файлу
#pragma warning restore SYSLIB0003 // Type or member is obsolete

						// NativeFileFlags.FILE_FLAG_OPEN_REPARSE_POINT Or NativeFileFlags.FILE_FLAG_BACKUP_SEMANTICS
						using (var hFile = CreateFileHandle(sFullPath,
							NativeFileAccess.GenericRead,
							FileShare.Read,
							IntPtr.Zero,
							FileMode.Open,
							NativeFileFlags.FILE_FLAG_BACKUP_SEMANTICS,
							IntPtr.Zero))
						{
							if (!hFile.IsInvalid)
							{
								using var hMem = new Memory.LocalMemory(DEFAULT_BUFFER_SIZE);
								var lpContext = IntPtr.Zero;
								int BytesRead = 0;
								try
								{
									bool bFinished = false;
									do
									{
										// Read the next stream header:
										WIN32_STREAM_ID STREAM_ID = new();
										bool bRead = NTFSStreamInfo.BackupRead(hFile, ref STREAM_ID, WIN32_STREAM_ID.STRUCT_SIZE, ref BytesRead, false, false, ref lpContext);
										if (!bRead || BytesRead != WIN32_STREAM_ID.STRUCT_SIZE)
										{
											// Чтение не удалось, или прочитано менее размера заголовка
											bFinished = true;
										}
										else // Заголовок потока прочитан нормально
										{
											string sStreamName = STREAM_ID.ReadStreamName(hFile, ref lpContext, ref bFinished)!;
											// Add the stream info to the result:
											if (sStreamName.e_IsNOTNullOrWhiteSpace())
											{
												var R = new NTFSStreamInfo(sFullPath, STREAM_ID, sStreamName);
												lResult.Add(R);
											}

											// Skip the contents of the stream:
											if (!bFinished) // Надо пропустить кусок содержимого потока
											{
												int bytesSeekedLow = 0; int bytesSeekedHigh = 0;
												var V64 = STREAM_ID.Size.e_ToInt64();
												bRead = NTFSStreamInfo.BackupSeek(hFile, V64.LoDWord, V64.HiDWord, ref bytesSeekedLow, ref bytesSeekedHigh, ref lpContext);
												if (!bRead)
													bFinished = true;
											}
										}
									}
									while (!bFinished);
								}
								finally
								{
									// Abort the backup:
									NTFSStreamInfo.BackupRead(hFile, hMem, 0, ref BytesRead, true, false, ref lpContext);
								}
							}
						}

						return lResult.ToArray();
					}
					#endregion

				}
				#endregion

				/// <summary>Жёсткая ссылка ТОЛЬКО ДЛЯ ФАЙЛОВ. </summary>
				internal partial class HardLinks
				{


					#region CreateHardLink
					/// <summary>Establishes a hard link between an existing file and a new file. This function is only supported on the NTFS file system, and only for files, not directories.</summary>
					/// <param name="lpFileName">The name of the new file.This parameter cannot specify the name of a directory.</param>
					/// <param name="lpExistingFileName">The name of the existing file.This parameter cannot specify the name of a directory.</param>
					/// <param name="lpSecurityAttributes">Reserved; must be NULL.</param>
					[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Unicode, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
					private static extern bool CreateHardLink(string lpFileName, string lpExistingFileName, IntPtr lpSecurityAttributes);


					/// <summary>Жёсткая ссылка ТОЛЬКО ДЛЯ ФАЙЛОВ. 
					/// This function is only supported on the NTFS file system, and only for files, not directories.
					/// Жёсткая ссылка может создаваться только в пределах одного логического раздела и только для файлов. 
					/// В операционных системах Windows нет возможности создать жесткую ссылку на директорию. Однако похожего эффекта можно добиться используя NTFS junction point.</summary>
					/// <param name="lpFileName">The name of the new file.This parameter cannot specify the name of a directory.</param>
					/// <param name="lpExistingFileName">The name of the existing file.This parameter cannot specify the name of a directory.</param>
					/// <remarks>Этот hardlink-файл не имеет атрибута REPARSE_POINT и потом никак не обнаруживается!!!
					/// To retrieve the number of hard links of a file, use the GetFileInformationByHandle function: (http://msdn2.microsoft.com/en-us/library/aa364952(VS.85).aspx)</remarks>
					public static void CreateHardLink(string lpFileName, string lpExistingFileName)
					{
						bool bResult = CreateHardLink(lpFileName, lpExistingFileName, IntPtr.Zero);
						if (!bResult)
							Errors.ThrowLastWin23Error("CreateHardLink");
					}
					#endregion

					/// <summary>Creates an enumeration of all the hard links to the specified file. The</summary>
					internal partial class HardLinksEnumeration : Microsoft.Win32.SafeHandles.SafeHandleZeroOrMinusOneIsInvalid
					{
						//[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Unicode, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
						//private static extern IntPtr FindFirstFileName___OLD([MarshalAs(UnmanagedType.LPWStr)] string lpFileName, int dwFlags, [In,Out] int StringLength, [In,MarshalAs(UnmanagedType.LPWStr),In,Out] string LinkName);

						[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Unicode, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
						private static extern IntPtr FindFirstFileName(
							[In, MarshalAs(UnmanagedType.LPWStr)] string lpFileName,
							int dwFlags,
							[In, Out] ref int StringLength,
							[In, Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder? LinkName);

						[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Unicode, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
						private static extern bool FindNextFileName(
							[In] IntPtr hFindStream,
							[In, Out] ref int StringLength,
							[In, Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder? LinkName);

						[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Unicode, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
						public static extern bool FindClose(IntPtr hFindFile);

						public static (HardLinksEnumeration hFind, string FirstFile) FindFirstFile(string sFilePath)
						{
							// Узнаём размер буфера
							int cbBuffer = 0;
							var hFind = HardLinksEnumeration.FindFirstFileName(sFilePath, 0, ref cbBuffer, null);
							if (hFind.e_IsValid()) throw new Exception("Unexpected Error!"); // ЭТО НЕ должно окончиться удачно, т.к. передали нулевой буфер
							Errors.ThrowLastWin23ErrorAssert(Errors.Win32Errors.ERROR_MORE_DATA);
							StringBuilder sbBuffer = new(cbBuffer + 10);
							hFind = HardLinksEnumeration.FindFirstFileName(sFilePath, 0, ref cbBuffer, sbBuffer); // А щас всё должно было получиться.
							if (hFind.e_IsNotValid()) Errors.ThrowLastWin23Error();
							var HLE = new HardLinksEnumeration(hFind);
							return (HLE, sbBuffer.ToString());
						}

						private HardLinksEnumeration(IntPtr hFind) : base(true)
						{
							SetHandle(hFind);
						}

						public string? FindNextFileName()
						{
							int cbBuffer = 0;
							bool bResult = HardLinksEnumeration.FindNextFileName(DangerousGetHandle(), ref cbBuffer, null); // Узнаём размер буфера для следующего элемента
							if (bResult) throw new Exception("Unexpected Error!"); // ЭТО НЕ должно окончиться удачно, т.к. м передали нулевой буфер
							string? sResult = null;
							var iError = Errors.GetLastError();
							switch (iError)
							{
								case Errors.Win32Errors.ERROR_HANDLE_EOF: // Нет больше данных
									{
										break;
									}

								case Errors.Win32Errors.ERROR_MORE_DATA: // Получили размер буфера
									{
										var sbBuffer = new StringBuilder(cbBuffer + 10);
										bResult = HardLinksEnumeration.FindNextFileName(DangerousGetHandle(), ref cbBuffer, sbBuffer);
										if (!bResult)
											Errors.ThrowLastWin23Error(); // А щас всё должно было получиться.
										sResult = sbBuffer.ToString();
										break;
									}

								default:
									{
										Errors.ThrowWin23Error(iError);
										break;
									}
							}
							return sResult;
						}

						protected override bool ReleaseHandle()
						{
							bool bResult = false;
							if (handle.e_IsValid())
								bResult = FindClose(handle);
							if (bResult)
								SetHandle(IntPtr.Zero);
							return bResult;
						}
					}







					/// <summary>Получить количество всех жёстких ссылок, связанных с данным файлом
					/// Технически, в NTFS, любой файл - это жёсткая ссылка с одной ссылкой.
					/// Поэтому, отличить "обычный" файл от "жёсткой ссылки", можно ТОЛЬКо по количеству ссылок > 1</summary>
					/// <param name="hFile"></param>
					/// <returns></returns>
					public static int GetFileHardLinksCount(IntPtr hFile) => GetFileInformationByHandle(hFile).nNumberOfLinks;


					/// <summary>Получить имена всех жёстких ссылок, связанных с данным файлом
					/// Технически, в NTFS, любой файл - это жёсткая ссылка с одной ссылкой.
					/// Поэтому, отличить "обычный" файл от "жёсткой ссылки", можно ТОЛЬКо по количеству ссылок > 1</summary>
					public static string[] GetFileHardLinksNames(string sFile)
					{
						using var hFile = CreateFile(sFile,
							NativeFileAccess.GenericRead,
							FileShare.Delete | FileShare.Read | FileShare.Write,
							IntPtr.Zero,
							FileMode.Open,
							NativeFileFlags.FILE_FLAG_BACKUP_SEMANTICS,
							IntPtr.Zero).e_ToSafeFileHandle();

						var lResult = new List<string>();
						int iLinks = GetFileHardLinksCount(hFile.DangerousGetHandle());
						if (iLinks > 0)
						{
							var (hFind, FirstFile) = HardLinksEnumeration.FindFirstFile(sFile);
							string sFoundName = FirstFile;
							using var HLE = hFind;
							while (sFoundName.e_IsNOTNullOrWhiteSpace())
							{
								lResult.Add(sFoundName);
								sFoundName = HLE.FindNextFileName()!;
							}
						}

						var aFiles = lResult.ToArray();
						return aFiles;
					}
				}


				#region ReparsePoint

				/// <summary>The reparse tags are a DWORD. The 32 bits are laid [In,Out]as follows:
				/// The reparse tags are a DWORD. The 32 bits are laid [In,Out]as follows:
				///   3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
				///   1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
				/// +-+-+-+-+-----------------------+-------------------------------+
				/// |M|R|N|R|     Reserved bits     |       Reparse Tag Value       |
				/// +-+-+-+-+-----------------------+-------------------------------+
				/// M Is the Microsoft bit. When set to 1, it denotes a tag owned by Microsoft.
				///   All ISVs must use a tag with a 0 in this position.
				///   Note: If a Microsoft tag Is used by non-Microsoft software, the behavior Is Not defined.
				/// R Is reserved.  Must be zero for non-Microsoft tags.
				/// N Is name surrogate. When set to 1, the file represents another named entity in the system.
				/// The M And N bits are Or-able.
				/// The following macros check for the M And N bit values:
				/// Macro to determine whether a reparse point tag corresponds to a tag owned by Microsoft.
				/// #define IsReparseTagMicrosoft(_tag) (              \
				///                           ((_tag) AND 0x80000000)   \
				///                           )
				/// 
				/// Macro to determine whether a reparse point tag Is a name surrogate
				/// #define IsReparseTagNameSurrogate(_tag) (          \
				///                           ((_tag) AND 0x20000000)   \
				///                           )
				/// </summary>
				[Flags()]
				public enum REPARSE_TAG_TYPES : uint
				{
					// The following are Microsoft's predefined reparse tag values; they are defined in WinNT.h:
					// IO_REPARSE_TAG_DEDUP
					// IO_REPARSE_TAG_RESERVED_RANGE


					/// <summary>Reserved reparse tag value.</summary>
					[Description("Неизвестный")]
					IO_REPARSE_TAG_RESERVED_ZERO = 0x0U,
					/// <summary>Reserved reparse tag value.</summary>
					IO_REPARSE_TAG_RESERVED_ONE = 0x1U,

					/// <summary>Точки подключения дисковых томов и символьные связи каталогов. Технология доступна, начиная с Windows 2000.
					/// Used for mount point support, specified in section 2.1.2.5.
					/// Moiunt point or junction, see winnt.h
					/// В файловой системе NTFS (начиная с Windows NT4[1]) поддерживаются жёсткие ссылки.
					/// Жёсткая ссылка может создаваться только в пределах одного логического раздела и только для файлов.
					/// В операционных системах Windows нет возможности создать жесткую ссылку на директорию. Однако похожего эффекта можно добиться используя NTFS junction point.</summary>
					[Description("Точка монтирования")]
					IO_REPARSE_TAG_MOUNT_POINT = 0xA0000003u,

					/// <summary>Hierarchical Storage Management - технология хранения данных, автоматически распределяющая данные между дорогими и дешёвыми накопителями.
					/// Obsolete. Used by legacy Hierarchical Storage Manager Product.</summary>
					[Description("Hierarchical Storage Manager")]
					IO_REPARSE_TAG_HSM = 0xC0000004u,
					/// <summary>Метаданные технологии Windows Home Server Drive Extender, используются для создания ссылок на файлы, продублированные на нескольких физических носителях.</summary>
					[Description("Метаданные технологии Windows Home Server Drive Extender")]
					IO_REPARSE_TAG_DRIVER_EXTENDER = 0x80000005u,
					/// <summary>Obsolete. Used by legacy Hierarchical Storage Manager Product.</summary>
					IO_REPARSE_TAG_HSM2 = 0x80000006U,
					/// <summary>Single Instance Storage (SIS) в Windows Storage Server 2008 R2 технология, увеличивающая размер дискового пространства за счёт размещения дублирующих файлов в общем хранилище.</summary>
					[Description("Single Instance Storage (SIS) в Windows Storage Server")]
					IO_REPARSE_TAG_SIS = 0x80000007U,

					/// <summary>Метаданные формата образа диска Windows Imaging Format, используемого в последних релизах ОС Windows.</summary>
					[Description("Метаданные формата образа диска Windows Imaging Format")]
					IO_REPARSE_TAG_WIM = 0x80000008U,
					/// <summary>Cluster Shared Volumes Windows Server 2008 R2 технология, позволяющая иметь диск, доступный на чтение и запись всем нодам, входящим в кластер системы виртуализации Hyper-V.</summary>
					[Description("Cluster Shared Volumes")]
					IO_REPARSE_TAG_CSV = 0x80000009U,
					/// <summary>Distributed File System (DFS) компонент Microsoft Windows, использующийся для упрощения доступа и управления файлами, физически распределёнными по сети.
					/// Used by the DFS filter. The DFS is described in the Distributed File System (DFS): Referral Protocol Specification [MS-DFSC]. Server-side interpretation only, not meaningful over the wire.</summary>
					[Description("Distributed File System (DFS)")]
					IO_REPARSE_TAG_DFS = 0x8000000AU,
					/// <summary>Used by filter manager test harness.</summary>
					IO_REPARSE_TAG_FILTER_MANAGER = 0x8000000BU,
					/// <summary>Точки повторной обработки, использующиеся в Internet Information Services(?)</summary>
					[Description("Точки повторной обработки Internet Information Services")]
					IO_REPARSE_TAG_IIS_CACHE = 0xA0000010U,
					/// <summary>Used by the DFS filter. The DFS is described in [MS-DFSC]. Server-side interpretation only, not meaningful over the wire.</summary>
					IO_REPARSE_TAG_DFSR = 0x80000012U,

					/// <summary>Used for symbolic link support. See section 2.1.2.4.
					/// Символьная ссылка - специальный файл в файловой системе, для которого не формируются никакие данные, кроме одной текстовой строки с указателем.
					/// Эта строка трактуется как путь к файлу, который должен быть открыт при попытке обратиться к данной ссылке (файлу).
					/// Символьная ссылка занимает ровно столько места в файловой системе, сколько требуется для записи её содержимого (нормальный файл занимает как минимум один блок раздела).
					/// В отличие от жёстких ссылок, могут указывать на файлы и директории в других томах.
					/// Целью ссылки может быть любой объект — например, другая ссылка, файл, папка, или даже несуществующий файл (в последнем случае при попытке открыть его должно выдаваться сообщение об отсутствии файла).
					/// Ссылка, указывающая на несуществующий файл, называется висячей.
					/// Практически символьные ссылки используются для более удобной организации структуры файлов на компьютере, так как позволяют одному файлу или каталогу иметь несколько имён, различных атрибутов и свободны от некоторых ограничений, присущих жёстким ссылкам (последние действуют только в пределах одного раздела и не могут ссылаться на каталоги).</summary>
					[Description("Символьная ссылка")]
					IO_REPARSE_TAG_SYMLINK = 0xA000000CU,

					// Used by the Network File System (NFS) component. Server-side interpretation only, not meaningful over the wire.
					[Description("Network File System (NFS)")]
					IO_REPARSE_TAG_NFS = 0x80000014U,
					IO_REPARSE_TAG_APPXSTRM = 0xC0000014U,
					IO_REPARSE_TAG_DFM = 0x80000016U,
					[Description("Linux symlink)")]
					IO_REPARSE_TAG_LX_SYMLINK = 0xA000001DU,
					IO_REPARSE_TAG_HFS = 0x8000001EU,
					/// <summary>deduplicated</summary>
					IO_REPARSE_TAG_DEDUP = 0x80000013U,
					IO_REPARSE_TAG_FILE_PLACEHOLDER = 0x80000015U,
					IO_REPARSE_TAG_WOF = 0x80000017U,
					/// <summary>Windows container</summary>
					[Description("Windows container")]
					IO_REPARSE_TAG_WCI = 0x80000018U,
					IO_REPARSE_TAG_GLOBAL_REPARSE = 0x80000019U,
					// IO_REPARSE_TAG_FILE_PLACEHOLDER),
					// IO_REPARSE_TAG_APPEXECLINK),
					// IO_REPARSE_TAG_WCI_TOMBSTONE),
					// IO_REPARSE_TAG_UNHANDLED),
					// IO_REPARSE_TAG_ONEDRIVE),
					// IO_REPARSE_TAG_GVFS_TOMBSTONE),
					IO_REPARSE_TAG_GVFS = 0x9000001CU,
					IO_REPARSE_TAG_CLOUD = 0x9000001AU,
					IO_REPARSE_TAG_CLOUD_1 = 0x9000101AU,
					// { =&h9000201A, "IO_REPARSE_TAG_CLOUD_2" },
					// { =&h9000301A, "IO_REPARSE_TAG_CLOUD_3" },
					// { =&h9000401A, "IO_REPARSE_TAG_CLOUD_4" },
					// { =&h9000501A, "IO_REPARSE_TAG_CLOUD_5" },
					// { =&h9000601A, "IO_REPARSE_TAG_CLOUD_6" },
					// { =&h9000701A, "IO_REPARSE_TAG_CLOUD_7" },
					// { =&h9000801A, "IO_REPARSE_TAG_CLOUD_8" },
					// { =&h9000901A, "IO_REPARSE_TAG_CLOUD_9" },
					// { =&h9000A01A, "IO_REPARSE_TAG_CLOUD_A" },
					// { =&h9000B01A, "IO_REPARSE_TAG_CLOUD_B" },
					// { =&h9000C01A, "IO_REPARSE_TAG_CLOUD_C" },
					// { =&h9000D01A, "IO_REPARSE_TAG_CLOUD_D" },
					// { =&h9000E01A, "IO_REPARSE_TAG_CLOUD_E" },
					// { =&h9000F01A, "IO_REPARSE_TAG_CLOUD_F" },


					IsReparseTagMicrosoft = 0x80000000U,
					TagIsReparseTagNameSurrogate = 0x20000000U
					// IO_REPARSE_TAG_VALID_VALUES = &HF000FFFFui
				}


				/// <summary>Provides access to NTFS Symlinks or Junction Points in .Net.</summary>
				internal partial class ReparsePoint
				{

					#region The reparse tags
					/// <summary>The reparse tags are a DWORD. The 32 bits are laid [In,Out]as follows:
					/// The reparse tags are a DWORD. The 32 bits are laid [In,Out]as follows:
					///   3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
					///   1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
					/// +-+-+-+-+-----------------------+-------------------------------+
					/// |M|R|N|R|     Reserved bits     |       Reparse Tag Value       |
					/// +-+-+-+-+-----------------------+-------------------------------+
					/// M Is the Microsoft bit. When set to 1, it denotes a tag owned by Microsoft.
					///   All ISVs must use a tag with a 0 in this position.
					///   Note: If a Microsoft tag Is used by non-Microsoft software, the behavior Is Not defined.
					/// R Is reserved.  Must be zero for non-Microsoft tags.
					/// N Is name surrogate. When set to 1, the file represents another named entity in the system.
					/// The M And N bits are Or-able.
					/// </summary>
					/// <returns></returns>
					public static REPARSE_TAG_TYPES TagTrim(REPARSE_TAG_TYPES RTT)
					{
						const uint SIMPLY_TAG_MASK = 0x5FFFFFFFu;
						uint B = (uint)RTT & SIMPLY_TAG_MASK;
						return (REPARSE_TAG_TYPES)B;
					}

					#region The following macros check for the M And N bit values:
					// ''' <summary>Macro to determine whether a reparse point tag corresponds to a tag owned by Microsoft.
					// '''#define IsReparseTagMicrosoft(_tag) (_tag) & 0x80000000)</summary>
					// Public Shared Function TagIsReparseTagMicrosoft(_Tag As REPARSE_TAG_TYPES) As Boolean
					// Dim bResult = (_Tag And &H80000000UL) <> 0
					// Return bResult
					// End Function
					// ''' <summary>Macro to determine whether a reparse point tag Is a name surrogate
					// '''#define IsReparseTagNameSurrogate(_tag) (((_tag) & 0x20000000)   \
					// ''' </summary>
					// Public Shared Function TagIsReparseTagNameSurrogate(_Tag As REPARSE_TAG_TYPES) As Boolean
					// Dim bResult = (_Tag And &H20000000UL) <> 0
					// Return bResult
					// End Function
					#endregion

					#endregion

					#region API

					// ''' I/O Completion Specific Access Rights.
					// '''
					// '''#define IO_COMPLETION_MODIFY_STATE  0x0002  
					// '''#define IO_COMPLETION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3) 
					// '''
					// ''' Object Manager Symbolic Link Specific Access Rights.
					// '''
					// '''#define DUPLICATE_CLOSE_SOURCE      0x00000001  
					// '''#define DUPLICATE_SAME_ACCESS       0x00000002  



					// ''' <summary>The file or directory is not a reparse point.</summary>
					// Private Const ERROR_NOT_A_REPARSE_POINT = 4390I
					// ''' <summary>The reparse point attribute cannot be set because it conflicts with an existing attribute.</summary>
					// Private Const ERROR_REPARSE_ATTRIBUTE_CONFLICT = 4391I
					// ''' <summary>The data present in the reparse point buffer is invalid.</summary>
					// Private Const ERROR_INVALID_REPARSE_DATA = 4392I
					// ''' <summary>The tag present in the reparse point buffer is invalid.</summary>
					// Private Const ERROR_REPARSE_TAG_INVALID = 4393I
					// ''' <summary>There is a mismatch between the tag specified in the request and the tag present in the reparse point.</summary>
					// Private Const ERROR_REPARSE_TAG_MISMATCH = 4394I

					/// <summary>Maximum allowed size of the reparse data.</summary>
					public const uint MAXIMUM_REPARSE_DATA_BUFFER_SIZE = 16 * 1024;
					private const string NON_INTERPRETED_PATH_PREFIX = @"\??\";
					private const string VOLUME_MOUNT_POINT = NON_INTERPRETED_PATH_PREFIX + "Volume";

					[StructLayout(LayoutKind.Sequential)]
					private partial struct REPARSE_GUID_DATA_BUFFER
					{
						public REPARSE_TAG_TYPES ReparseTag;
						public ushort ReparseDataLength;
						public ushort Reserved;
						public ushort SubstituteNameOffset;
						public ushort SubstituteNameLength;
						public ushort PrintNameOffset;
						public ushort PrintNameLength;

						/// <summary>Contains the SubstituteName and the PrintName. The SubstituteName is the path of the target directory.</summary>
						[MarshalAs(UnmanagedType.ByValArray, SizeConst = CHAR_BUFFER_SIZE)]
						public byte[] PathBuffer;
						internal const int CHAR_BUFFER_SIZE = 0x3FF0;

						internal static byte[] EMPTY_CHAR_BUFFER
						{
							get
							{
								var BBB = Memory.LocalMemory.CreateEmptyArray(CHAR_BUFFER_SIZE);
								return BBB;
							}
						}

						public static int REPARSE_DATA_BUFFER_HEADER_SIZE = (int)Marshal.OffsetOf(typeof(REPARSE_GUID_DATA_BUFFER), "SubstituteNameOffset");

						public enum FSCTL_COMMANDS : uint
						{
							// ''' <summary>Command to get the reparse point data block.</summary>
							FSCTL_GET_REPARSE_POINT = 0x900A8U,
							/// <summary>Command to set the reparse point data block.</summary>
							FSCTL_SET_REPARSE_POINT = 0x900A4U,
							/// <summary>Command to delete the reparse point data base.</summary>
							FSCTL_DELETE_REPARSE_POINT = 0x900ACU
						}

						[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Unicode, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
						public static extern bool DeviceIoControl(IntPtr hDevice, FSCTL_COMMANDS dwIoControlCode, ref REPARSE_GUID_DATA_BUFFER InBuffer, int nInBufferSize, IntPtr OutBuffer, int nOutBufferSize, ref int pBytesReturned, IntPtr lpOverlapped);

						[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Unicode, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
						public static extern bool DeviceIoControl(IntPtr hDevice, FSCTL_COMMANDS dwIoControlCode, IntPtr InBuffer, int nInBufferSize, ref REPARSE_GUID_DATA_BUFFER OutBuffer, int nOutBufferSize, ref int pBytesReturned, IntPtr lpOverlapped);
					}

					private static Microsoft.Win32.SafeHandles.SafeFileHandle OpenReparsePoint(string reparsePoint, NativeFileAccess accessMode)
					{
						var reparsePointHandle = CreateFileAsSafeFileHandle(reparsePoint,
							accessMode,
							FileShare.Read | FileShare.Write | FileShare.Delete,
							IntPtr.Zero,
							FileMode.Open,
							NativeFileFlags.FILE_FLAG_BACKUP_SEMANTICS | NativeFileFlags.FILE_FLAG_OPEN_REPARSE_POINT,
							IntPtr.Zero);
						var WEX = new Errors.Win32ExceptionEx();
						WEX.e_ThrowIfNot(0);
						return reparsePointHandle;
					}

					public enum SYM_LINK_FLAG : int
					{
						/// <summary>The link target is a file.</summary>
						SYMBOLIC_LINK_FLAG_FILE = 0,
						/// <summary>The link target is a directory.</summary>
						SYMBOLIC_LINK_FLAG_DIRECTORY = 0x1
					}
					/// <summary>Creates a symbolic link.</summary>
					/// <param name="lpSymlinkFileName">The symbolic link to be created.</param>
					/// <param name="lpTargetFileName">The name of the target for the symbolic link to be created. If lpTargetFileName has a device name associated with it, the link is treated as an absolute link; otherwise, the link is treated as a relative link.</param>
					/// <remarks>Symbolic links can either be absolute or relative links. Absolute links are links that specify each portion of the path name; relative links are determined relative to where relative–link specifiers are in a specified path. Relative links are specified using the following conventions:</remarks>
					[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Unicode, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
					private static extern bool CreateSymbolicLink(string lpSymlinkFileName, string lpTargetFileName, SYM_LINK_FLAG dwFlags);



					#endregion

					#region Properties
					public readonly string Path = String.Empty;
					public readonly string Target = String.Empty;

					/// <summary>Note that if the symlink target path contains any ..s these are not normalised but returned as is.</summary>
					public string TargetAbsolute
					{
						get
						{
							if (Target.e_IsNullOrWhiteSpace()) return "";

							var sAbsolute = Target;

							switch (TagValue)
							{
								case REPARSE_TAG_TYPES.IO_REPARSE_TAG_SYMLINK:
									{
										if (sAbsolute.StartsWith(NON_INTERPRETED_PATH_PREFIX)) sAbsolute = Target.Substring(NON_INTERPRETED_PATH_PREFIX.Length);
										// Symlinks can be relative.
										if (sAbsolute.Length < 2 || sAbsolute[1] != ':')
										{
											// it's relative, we need to tack it onto the path
											if (sAbsolute[0] == '\\') sAbsolute = sAbsolute.Substring(1);
											//Need to take the symlink name off the path
											sAbsolute = Path.Substring(0, Path.LastIndexOf(@"\")) + @"\" + TargetAbsolute;
											// Note that if the symlink target path contains any ..s these are not normalised but returned as is.
										}
										return sAbsolute;
									}

								case REPARSE_TAG_TYPES.IO_REPARSE_TAG_MOUNT_POINT:
									{
										return sAbsolute;
									}

								default: { return ""; };
							}
						}
					}

					public REPARSE_TAG_TYPES TagValue { get; private set; } = REPARSE_TAG_TYPES.IO_REPARSE_TAG_RESERVED_ZERO;

					/// <summary>Умеем ли мы работать с такими штуками ?</summary>
					public bool IsKnownType { get; private set; } = false;

					#endregion


					public override string ToString() => $"{TagValue}: {Path} -> {Target}";


					#region Constructor
					/// <summary>Takes a full path to a reparse point and finds the target.</summary>
					/// <param name="sPath">Full path of the reparse point</param>
					public ReparsePoint(string sPath, bool ThrowErrorOnUnknownTagType = true) : base()
					{
						Path = sPath;
						var outBuffer = GetReparseData(sPath);
						TagValue = outBuffer.ReparseTag;
						switch (outBuffer.ReparseTag)
						{
							case REPARSE_TAG_TYPES.IO_REPARSE_TAG_SYMLINK:
								{
									// for some reason symlinks seem to have an extra two characters on the front  (0,0,0,0)
									if (sPath.EndsWith(@"\")) sPath = sPath.Substring(0, sPath.Length - 1);
									Target = Encoding.Unicode.GetString(outBuffer.PathBuffer, outBuffer.SubstituteNameOffset + 4, outBuffer.SubstituteNameLength);
									IsKnownType = true;
									break;
								}

							case REPARSE_TAG_TYPES.IO_REPARSE_TAG_MOUNT_POINT:
								{
									Target = Encoding.Unicode.GetString(outBuffer.PathBuffer, outBuffer.SubstituteNameOffset, outBuffer.SubstituteNameLength);

									// This could be a junction or a mounted drive - a mounted drive starts with "\??\X:\"
									// Dim PrintName = System.Text.Encoding.Unicode.GetString(outBuffer.PathBuffer, outBuffer.PrintNameOffset, outBuffer.PrintNameLength)
									bool bIsMountPt = Target.ToLower().StartsWith(VOLUME_MOUNT_POINT.ToLower());
									if (bIsMountPt)
										Target = Target.Substring(VOLUME_MOUNT_POINT.Length);
									else
									{
										// JunctionPoint
									}
									IsKnownType = true;
									break;
								}

							default:
								{
#if DEBUG
									//var AAA = outBuffer.PathBuffer.e_HexDump()
									//Dim uiTag = TagTrim(Me.TagValue)
									//Dim sFlags = Me.TagValue.ExtEnum_SplitToFlagsAsStrings

#endif
									if (ThrowErrorOnUnknownTagType) throw new IOException($"Unknown REPARSE_TAG: {TagValue}");
									// Debug.Assert(outBuffer.ReparseTag = REPARSE_GUID_DATA_BUFFER.TAG_TYPES.IO_REPARSE_TAG_SYMLINK OrElse outBuffer.ReparseTag = REPARSE_GUID_DATA_BUFFER.TAG_TYPES.IO_REPARSE_TAG_MOUNT_POINT, "Unrecognised reparse tag")

									break;
								}
						}

						if (!IsKnownType) return;
						//if (!sPath.StartsWith(NonInterpretedPathPrefix))
						{
							if (Target!.StartsWith(NON_INTERPRETED_PATH_PREFIX)) Target = Target.Substring(NON_INTERPRETED_PATH_PREFIX.Length);
						}


						// Remove any final slash for consistency
						while (Target.EndsWith(@"\")) Target = Target.TrimEnd('\\');

						// If (Not String.IsNullOrEmpty(printString)) Then
						// _NormalisedTarget = printString
						// Else
						// if not we can use the substring with a bit of tweaking
						// _NormalisedTarget = subsString
						// Debug.Assert(_NormalisedTarget.Length > 2, "Target string too short")
						// Debug.Assert(
						// (_NormalisedTarget.StartsWith("\??\") AndAlso (_NormalisedTarget(5) = ":" OrElse _NormalisedTarget.StartsWith("\??\Volume")) OrElse
						// (Not _NormalisedTarget.StartsWith("\??\") AndAlso _NormalisedTarget(1)<>":")), "Malformed subsString")
						// ' Junction points must be absolute
						// Debug.Assert(
						// buffer.ReparseTag = IO_REPARSE_TAG_SYMLINK OrElse
						// _NormalisedTarget.StartsWith("\??\Volume") OrElse
						// _NormalisedTarget(1) = ":", "Relative junction point")
						// If (_NormalisedTarget.StartsWith("\??\")) Then
						// _NormalisedTarget = _NormalisedTarget.Substring(4)
						// End If
						// End If
						// _ActualTarget = _NormalisedTarget


					}

					private static REPARSE_GUID_DATA_BUFFER GetReparseData(string path)
					{
						Debug.Assert(path.e_IsNOTNullOrWhiteSpace() && path.Length > 2 && Convert.ToString(path[1]) == ":" && Convert.ToString(path[2]) == @"\");
						Security.PRIVELEGE_NAMES.SeBackupPrivilege.e_AdjustProcessPrivilegeAndCloseToken();

						// Open the file and get its handle
						using var hFile = CreateFileAsSafeFileHandle(path,
							NativeFileAccess.GenericRead,
							FileShare.None,
							IntPtr.Zero,
							FileMode.Open,
							NativeFileFlags.FILE_FLAG_OPEN_REPARSE_POINT | NativeFileFlags.FILE_FLAG_BACKUP_SEMANTICS,
							IntPtr.Zero);
						(!hFile.IsInvalid).e_ThrowLastWin32Exception_AssertFalse("CreateFile");
						var outBuffer = new REPARSE_GUID_DATA_BUFFER();
						int outBufferSize = Marshal.SizeOf(typeof(REPARSE_GUID_DATA_BUFFER));
						var bytesReturned = 0;
						bool bSuccess = REPARSE_GUID_DATA_BUFFER.DeviceIoControl(
							hFile.DangerousGetHandle(),
							REPARSE_GUID_DATA_BUFFER.FSCTL_COMMANDS.FSCTL_GET_REPARSE_POINT,
							IntPtr.Zero,
							0,
							ref outBuffer,
							outBufferSize,
							ref bytesReturned,
							IntPtr.Zero);
						bSuccess.e_ThrowLastWin32Exception_AssertFalse("DeviceIoControl");
						return outBuffer;
					}
					#endregion





					public enum NewTagType : int
					{
						[Description("Неизвестный")]
						None = 0,

						/// <summary>В файловой системе NTFS (начиная с Windows NT4[1]) поддерживаются жёсткие ссылки. Жёсткая ссылка может создаваться только в пределах одного логического раздела и только для файлов. В операционных системах Windows нет возможности создать жесткую ссылку на директорию. Однако похожего эффекта можно добиться используя NTFS junction point.</summary>
						[Description("Точка монтирования диска")]
						MountPoint = 1,

						/// <summary>Символьная ссылка - специальный файл в файловой системе, для которого не формируются никакие данные, кроме одной текстовой строки с указателем. Эта строка трактуется как путь к файлу, который должен быть открыт при попытке обратиться к данной ссылке (файлу). Символьная ссылка занимает ровно столько места в файловой системе, сколько требуется для записи её содержимого (нормальный файл занимает как минимум один блок раздела).
						/// В отличие от жёстких ссылок, могут указывать на файлы и директории в других томах
						/// Целью ссылки может быть любой объект — например, другая ссылка, файл, папка, или даже несуществующий файл (в последнем случае при попытке открыть его должно выдаваться сообщение об отсутствии файла). Ссылка, указывающая на несуществующий файл, называется висячей.
						/// Практически символьные ссылки используются для более удобной организации структуры файлов на компьютере, так как позволяют одному файлу или каталогу иметь несколько имён, различных атрибутов и свободны от некоторых ограничений, присущих жёстким ссылкам (последние действуют только в пределах одного раздела и не могут ссылаться на каталоги).</summary>
						[Description("Символическая ссылка")]
						SymbolicLink = 2,


						/// <summary>Точка соединения ТОЛЬКО ДЛЯ ПАПОК!. Для файлов надо использовать HardLink (Жёсткая ссылка)</summary>
						[Description("Точка соединения")]
						JunctionPoint = 3
					}


					/// <summary>Creates a junction point from the specified directory to the specified target directory.</summary>
					/// <remarks>Only works on NTFS. (https://msdn.microsoft.com/en-us/library/aa365006%28v=vs.85%29.aspx)</remarks>
					/// <param name="LocationPath">The junction point path</param>
					/// <param name="TargetPath">The target file or directory</param>
					/// <param name="overwrite">If true overwrites an existing reparse point or empty directory</param>
					/// <exception cref="IOException">Thrown when the junction point could not be created or when an existing directory was found and <paramref name="overwrite" /> if false</exception>
					public static void Create(string LocationPath, string TargetPath, NewTagType eTagType, bool overwrite)
					{
						TargetPath = System.IO.Path.GetFullPath(TargetPath);
						bool bTargetIsDirectory = Shell.PathIsDirectory(TargetPath);
						switch (eTagType)
						{
							case NewTagType.JunctionPoint:
								{
									if (!bTargetIsDirectory) throw new Exception("JunctionPoint Valid Only For Directories! For Files use HardLinks instead.");
									if (!Directory.Exists(TargetPath)) Errors.ThrowWin23Error(Errors.Win32Errors.ERROR_FILE_NOT_FOUND);
									if (Directory.Exists(LocationPath))
									{
										if (!overwrite) throw new IOException($"Directory '{LocationPath}' already exists and '{nameof(overwrite)}'={overwrite}.");
									}
									else Directory.CreateDirectory(LocationPath);

									string S1 = NON_INTERPRETED_PATH_PREFIX + TargetPath;
									string S2 = TargetPath;
									string SSS = S1 + '\0' + S2;
									var aTargetDirBytes = Encoding.Unicode.GetBytes(SSS);
									using var hReparsePoint = OpenReparsePoint(LocationPath, NativeFileAccess.GenericWrite);
									try
									{
										var InBuffer = new REPARSE_GUID_DATA_BUFFER();
										{
											//var withBlock = InBuffer;
											InBuffer.ReparseTag = REPARSE_TAG_TYPES.IO_REPARSE_TAG_MOUNT_POINT;
											InBuffer.SubstituteNameOffset = 0;
											InBuffer.SubstituteNameLength = (ushort)(S1.Length * 2);
											InBuffer.PrintNameOffset = (ushort)(InBuffer.SubstituteNameOffset + InBuffer.SubstituteNameLength + 2);
											InBuffer.PrintNameLength = (ushort)(S2.Length * 2);
											InBuffer.PathBuffer = REPARSE_GUID_DATA_BUFFER.EMPTY_CHAR_BUFFER;
											Array.Copy(aTargetDirBytes, 0, InBuffer.PathBuffer, 0, aTargetDirBytes.Length);
											InBuffer.ReparseDataLength = (ushort)(InBuffer.SubstituteNameLength + InBuffer.PrintNameLength + 12);
										}

										int dwBytesToSet = InBuffer.ReparseDataLength + REPARSE_GUID_DATA_BUFFER.REPARSE_DATA_BUFFER_HEADER_SIZE;
										int bytesReturned = 0;
										bool result = REPARSE_GUID_DATA_BUFFER.DeviceIoControl(
											hReparsePoint.DangerousGetHandle(),
											REPARSE_GUID_DATA_BUFFER.FSCTL_COMMANDS.FSCTL_SET_REPARSE_POINT,
											ref InBuffer,
											dwBytesToSet,
											IntPtr.Zero,
											0,
											ref bytesReturned,
											IntPtr.Zero);

										result.e_ThrowLastWin32Exception_AssertFalse("DeviceIoControl");
									}
									finally { hReparsePoint.Close(); }
									break;
								}

							case NewTagType.SymbolicLink: // Символьная ссылка
								{
									var SFF = bTargetIsDirectory ? SYM_LINK_FLAG.SYMBOLIC_LINK_FLAG_DIRECTORY : SYM_LINK_FLAG.SYMBOLIC_LINK_FLAG_FILE;
									bool bResult = CreateSymbolicLink(LocationPath, TargetPath, SFF);
									bResult.e_ThrowLastWin32Exception_AssertFalse("CreateSymbolicLink");
									break;
								}

							default:
								throw new NotImplementedException();
						}
					}

					#region Delete


					// ''' <summary>
					// ''' Deletes a junction point at the specified source directory along with the directory itself.
					// ''' Does nothing if the junction point does not exist.
					// ''' </summary>
					// ''' <remarks>
					// ''' Only works on NTFS.
					// ''' </remarks>
					// ''' <param name="junctionPoint">The junction point path</param>
					// public  shared   sub  Delete(string junctionPoint)
					// {
					// If (!Directory.Exists(junctionPoint)) Then
					// {
					// If (File.Exists(junctionPoint)) Then
					// Throw New IOException("Path is not a junction point.")

					// Return
					// }

					// using (SafeFileHandle handle = OpenReparsePoint(junctionPoint, EFileAccess.GenericWrite))
					// {
					// REPARSE_DATA_BUFFER(reparseDataBuffer = New REPARSE_DATA_BUFFER())

					// reparseDataBuffer.ReparseTag = IO_REPARSE_TAG_MOUNT_POINT
					// reparseDataBuffer.ReparseDataLength = 0
					// reparseDataBuffer.PathBuffer = new byte<0x3ff0> 

					// int(inBufferSize = Marshal.SizeOf(reparseDataBuffer))
					// IntPtr(inBuffer = Marshal.AllocHGlobal(inBufferSize))
					// Try
					// {
					// Marshal.StructureToPtr(reparseDataBuffer, inBuffer, False)

					// int(bytesReturned)
					// bool result = DeviceIoControl(handle.DangerousGetHandle(), FSCTL_DELETE_REPARSE_POINT,
					// inBuffer, 8, IntPtr.Zero, 0, [In,Out]bytesReturned, IntPtr.Zero) 

					// If (!result) Then
					// ThrowLastWin32Error("Unable to delete junction point.")
					// }
					// finally
					// {
					// Marshal.FreeHGlobal(inBuffer)
					// }

					// Try
					// {
					// Directory.Delete(junctionPoint)
					// }
					// catch (IOException ex)
					// {
					// Throw New IOException("Unable to delete junction point.", ex)
					// }
					// }
					// }
					#endregion

					#region Exists


					// ''' <summary>
					// ''' Determines whether the specified path exists and refers to a junction point.
					// ''' </summary>
					// ''' <param name="path">The junction point path</param>
					// ''' <returns>True if the specified path represents a junction point</returns>
					// ''' <exception cref="IOException">Thrown if the specified path is invalid
					// ''' or some other error occurs</exception>
					// public  shared  bool Exists(string path)
					// {
					// If (!Directory.Exists(path)) Then
					// Return False

					// using (SafeFileHandle handle = OpenReparsePoint(path, EFileAccess.GenericRead))
					// {
					// string target = InternalGetTarget(handle) 
					// return target <> null 
					// }
					// }
					#endregion

				}

				#endregion



			}

		}


		//[SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]
		internal static partial class Security
		{
			#region Privilege Names
			internal enum PRIVELEGE_NAMES
			{
				SeAssignPrimaryTokenPrivilege,
				SeAuditPrivilege,
				SeBackupPrivilege,
				SeChangeNotifyPrivilege,
				SeCreateGlobalPrivilege,
				SeCreatePagefilePrivilege,
				SeCreatePermanentPrivilege,
				SeCreateSymbolicLinkPrivilege,
				SeCreateTokenPrivilege,
				SeDebugPrivilege,
				SeDelegateSessionUserImpersonatePrivilege,
				SeEnableDelegationPrivilege,
				SeImpersonatePrivilege,
				SeIncreaseBasePriorityPrivilege,
				SeIncreaseQuotaPrivilege,
				SeIncreaseWorkingSetPrivilege,
				SeLoadDriverPrivilege,
				SeLockMemoryPrivilege,
				SeMachineAccountPrivilege,
				SeManageVolumePrivilege,
				SeProfileSingleProcessPrivilege,
				SeRelabelPrivilege,
				SeRemoteShutdownPrivilege,
				SeRestorePrivilege,
				SeSecurityPrivilege,
				SeShutdownPrivilege,
				SeSyncAgentPrivilege,
				SeSystemEnvironmentPrivilege,
				SeSystemProfilePrivilege,
				SeSystemtimePrivilege,
				SeTakeOwnershipPrivilege,
				SeTcbPrivilege,
				SeTimeZonePrivilege,
				SeTrustedCredManAccessPrivilege,
				SeUndockPrivilege,
				SeUnsolicitedInputPrivilege
			}
			internal static class Priveleges
			{
				internal static readonly string SE_ASSIGNPRIMARYTOKEN_NAME = PRIVELEGE_NAMES.SeAssignPrimaryTokenPrivilege.ToString();
				internal static readonly string SE_AUDIT_NAME = PRIVELEGE_NAMES.SeAuditPrivilege.ToString();
				internal static readonly string SE_BACKUP_NAME = PRIVELEGE_NAMES.SeBackupPrivilege.ToString();
				internal static readonly string SE_CHANGE_NOTIFY_NAME = PRIVELEGE_NAMES.SeChangeNotifyPrivilege.ToString();
				internal static readonly string SE_CREATE_GLOBAL_NAME = PRIVELEGE_NAMES.SeCreateGlobalPrivilege.ToString();
				internal static readonly string SE_CREATE_PAGEFILE_NAME = PRIVELEGE_NAMES.SeCreatePagefilePrivilege.ToString();
				internal static readonly string SE_CREATE_PERMANENT_NAME = PRIVELEGE_NAMES.SeCreatePermanentPrivilege.ToString();
				internal static readonly string SE_CREATE_SYMBOLIC_LINK_NAME = PRIVELEGE_NAMES.SeCreateSymbolicLinkPrivilege.ToString();
				internal static readonly string SE_CREATE_TOKEN_NAME = PRIVELEGE_NAMES.SeCreateTokenPrivilege.ToString();
				internal static readonly string SE_DEBUG_NAME = PRIVELEGE_NAMES.SeDebugPrivilege.ToString();
				internal static readonly string SE_DELEGATE_SESSION_USER_IMPERSONATE_NAME = PRIVELEGE_NAMES.SeDelegateSessionUserImpersonatePrivilege.ToString();
				internal static readonly string SE_ENABLE_DELEGATION_NAME = PRIVELEGE_NAMES.SeEnableDelegationPrivilege.ToString();
				internal static readonly string SE_IMPERSONATE_NAME = PRIVELEGE_NAMES.SeImpersonatePrivilege.ToString();
				internal static readonly string SE_INC_BASE_PRIORITY_NAME = PRIVELEGE_NAMES.SeIncreaseBasePriorityPrivilege.ToString();
				internal static readonly string SE_INCREASE_QUOTA_NAME = PRIVELEGE_NAMES.SeIncreaseQuotaPrivilege.ToString();
				internal static readonly string SE_INC_WORKING_SET_NAME = PRIVELEGE_NAMES.SeIncreaseWorkingSetPrivilege.ToString();
				internal static readonly string SE_LOAD_DRIVER_NAME = PRIVELEGE_NAMES.SeLoadDriverPrivilege.ToString();
				internal static readonly string SE_LOCK_MEMORY_NAME = PRIVELEGE_NAMES.SeLockMemoryPrivilege.ToString();
				internal static readonly string SE_MACHINE_ACCOUNT_NAME = PRIVELEGE_NAMES.SeMachineAccountPrivilege.ToString();
				internal static readonly string SE_MANAGE_VOLUME_NAME = PRIVELEGE_NAMES.SeManageVolumePrivilege.ToString();
				internal static readonly string SE_PROF_SINGLE_PROCESS_NAME = PRIVELEGE_NAMES.SeProfileSingleProcessPrivilege.ToString();
				internal static readonly string SE_RELABEL_NAME = PRIVELEGE_NAMES.SeRelabelPrivilege.ToString();
				internal static readonly string SE_REMOTE_SHUTDOWN_NAME = PRIVELEGE_NAMES.SeRemoteShutdownPrivilege.ToString();
				internal static readonly string SE_RESTORE_NAME = PRIVELEGE_NAMES.SeRestorePrivilege.ToString();
				internal static readonly string SE_SECURITY_NAME = PRIVELEGE_NAMES.SeSecurityPrivilege.ToString();
				internal static readonly string SE_SHUTDOWN_NAME = PRIVELEGE_NAMES.SeShutdownPrivilege.ToString();
				internal static readonly string SE_SYNC_AGENT_NAME = PRIVELEGE_NAMES.SeSyncAgentPrivilege.ToString();
				internal static readonly string SE_SYSTEM_ENVIRONMENT_NAME = PRIVELEGE_NAMES.SeSystemEnvironmentPrivilege.ToString();
				internal static readonly string SE_SYSTEM_PROFILE_NAME = PRIVELEGE_NAMES.SeSystemProfilePrivilege.ToString();
				internal static readonly string SE_SYSTEMTIME_NAME = PRIVELEGE_NAMES.SeSystemtimePrivilege.ToString();
				internal static readonly string SE_TAKE_OWNERSHIP_NAME = PRIVELEGE_NAMES.SeTakeOwnershipPrivilege.ToString();
				internal static readonly string SE_TCB_NAME = PRIVELEGE_NAMES.SeTcbPrivilege.ToString();
				internal static readonly string SE_TIME_ZONE_NAME = PRIVELEGE_NAMES.SeTimeZonePrivilege.ToString();
				internal static readonly string SE_TRUSTED_CREDMAN_ACCESS_NAME = PRIVELEGE_NAMES.SeTrustedCredManAccessPrivilege.ToString();
				internal static readonly string SE_UNDOCK_NAME = PRIVELEGE_NAMES.SeUndockPrivilege.ToString();
				internal static readonly string SE_UNSOLICITED_INPUT_NAME = PRIVELEGE_NAMES.SeUnsolicitedInputPrivilege.ToString();
			}
			#endregion

			#region TokenPrivileges
			public const uint SE_PRIVILEGE_ENABLED = 0x2;
			// Public Const TOKEN_ADJUST_PRIVILEGES As UInteger = &H20

			[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto, Pack = 1)]
			public partial struct LUID
			{
				public uint LowPart;
				public int HighPart;
			}

			[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto, Pack = 1)]
			public partial struct LUID_AND_ATTRIBUTES
			{
				public LUID Luid;
				public uint Attributes;
			}

			[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto, Pack = 1)]
			public partial struct TOKEN_PRIVILEGES
			{
				public uint PrivilegeCount;
				[MarshalAs(UnmanagedType.ByValArray, SizeConst = 1)]
				public LUID_AND_ATTRIBUTES[] Privileges;

				public TOKEN_PRIVILEGES(LUID_AND_ATTRIBUTES[] ap)
				{
					PrivilegeCount = (uint)ap.Length;
					Privileges = ap;
				}
			}

			#region OpenProcessToken

			// ' Token Specific Access Rights

			// Public Const STANDARD_RIGHTS_REQUIRED As UInt32 = &HF0000
			// Public Const STANDARD_RIGHTS_READ As UInt32 = &H20000
			// Public Const TOKEN_ASSIGN_PRIMARY As UInt32 = 1
			// Public Const TOKEN_DUPLICATE As UInt32 = 2
			// Public Const TOKEN_IMPERSONATE As UInt32 = 4
			// Public Const TOKEN_QUERY As UInt32 = 8
			// Public Const TOKEN_QUERY_SOURCE As UInt32 = &H10
			// Public Const TOKEN_ADJUST_PRIVILEGES As UInt32 = &H20
			// Public Const TOKEN_ADJUST_GROUPS As UInt32 = &H40
			// Public Const TOKEN_ADJUST_DEFAULT As UInt32 = &H80
			// Public Const TOKEN_ADJUST_SESSIONID As UInt32 = &H100
			// Public Const TOKEN_READ As UInt32 = (STANDARD_RIGHTS_READ Or TOKEN_QUERY)
			// Public Const TOKEN_ALL_ACCESS As UInt32 = (STANDARD_RIGHTS_REQUIRED Or TOKEN_ASSIGN_PRIMARY Or TOKEN_DUPLICATE Or
			// TOKEN_IMPERSONATE Or TOKEN_QUERY Or TOKEN_QUERY_SOURCE Or
			// TOKEN_ADJUST_PRIVILEGES Or TOKEN_ADJUST_GROUPS Or TOKEN_ADJUST_DEFAULT Or
			// TOKEN_ADJUST_SESSIONID)



			/// <summary>The OpenProcessToken function opens the access token associated with a process.</summary>
			/// <param name="ProcessHandle">A handle to the process whose access token is opened. The process must have the PROCESS_QUERY_INFORMATION access permission.</param>
			/// <param name="DesiredAccess">Specifies an access mask that specifies the requested types of access to the access token. These requested access types are compared with the discretionary access control list (DACL) of the token to determine which accesses are granted or denied.</param>
			/// <param name="TokenHandle">A pointer to a handle that identifies the newly opened access token when the function returns.</param>
			/// <returns>If the function succeeds, the return value is nonzero.If the function fails, the return value is zero. To get extended error information, call GetLastError.</returns>
			/// <remarks>Close the access token handle returned through the TokenHandle parameter by calling CloseHandle.</remarks>
			[DllImport(core.WINDLL_ADVAPI32, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
			[SecurityCritical]
			private static extern bool OpenProcessToken(
				[In] IntPtr ProcessHandle,
				[In] TokenAccessLevels DesiredAccess,
				[In, Out] ref IntPtr TokenHandle);


			/// <summary>The OpenProcessToken function opens the access token associated with a process.</summary>
			/// <param name="ProcessHandle">A handle to the process whose access token is opened. The process must have the PROCESS_QUERY_INFORMATION access permission.</param>
			/// <param name="DesiredAccess">Specifies an access mask that specifies the requested types of access to the access token. These requested access types are compared with the discretionary access control list (DACL) of the token to determine which accesses are granted or denied.</param>
			[SecurityCritical]
			public static Microsoft.Win32.SafeHandles.SafeFileHandle OpenProcessToken(IntPtr ProcessHandle, TokenAccessLevels DesiredAccess)
			{
				var ProcessToken = IntPtr.Zero;
				bool bResult = OpenProcessToken(ProcessHandle, DesiredAccess, ref ProcessToken);
				if (!bResult)
					Errors.ThrowLastWin23Error("OpenProcessToken");

				var rProcessToken = new Microsoft.Win32.SafeHandles.SafeFileHandle(ProcessToken, true);
				return rProcessToken;
			}

			/// <summary>Open Token for Current Process</summary>
			[SecurityCritical]
			public static Microsoft.Win32.SafeHandles.SafeFileHandle OpenCurrentProcessToken(TokenAccessLevels DesiredAccess)
			{
				var hProcess = uom.WinAPI.ProcessAPI.GetCurrentProcess();
				return OpenProcessToken(hProcess, DesiredAccess);
			}

			#endregion


			[DllImport(core.WINDLL_ADVAPI32, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
			[SecurityCritical]
			private static extern bool LookupPrivilegeDisplayName(
				[In, MarshalAs(UnmanagedType.LPTStr)] string? lpSystemName,
				[In, MarshalAs(UnmanagedType.LPTStr)] string lpName,
				[In, Out, MarshalAs(UnmanagedType.LPTStr)] StringBuilder? lpDisplayName,
				[In, Out] ref int cchDisplayName,
				[In, Out] ref int lpLanguageId);

			[SecurityCritical]
			public static (string PrivilegeDisplayName, int LanguageId) LookupPrivilegeDisplayName(PRIVELEGE_NAMES pn, string? systemName = null)
			{
				//First get the buffer sizes for string
				int cchDisplayName = 0;
				int lpLanguageId = 0;
				string spn = pn.ToString();
				var bResult = LookupPrivilegeDisplayName(systemName, spn, null, ref cchDisplayName, ref lpLanguageId);
				if (!bResult) WinAPI.Errors.ThrowLastWin23ErrorAssert(Errors.Win32Errors.ERROR_INSUFFICIENT_BUFFER);

				//Get the value to buffer
				StringBuilder sbDisplayName = new(cchDisplayName + 1);
				bResult = LookupPrivilegeDisplayName(systemName, spn, sbDisplayName, ref cchDisplayName, ref lpLanguageId);
				if (!bResult) WinAPI.Errors.ThrowLastWin23ErrorAssert(Errors.Win32Errors.ERROR_INSUFFICIENT_BUFFER);

				return (sbDisplayName.ToString(), lpLanguageId);
			}


			/// <summary>retrieves the locally unique identifier (LUID) used on a specified system to locally represent the specified privilege name.</summary>
			/// <param name="lpSystemName">A pointer to a null-terminated string that specifies the name of the system on which the privilege name is retrieved. If a null string is specified, the function attempts to find the privilege name on the local system.</param>
			/// <param name="lpName">A pointer to a null-terminated string that specifies the name of the privilege, as defined in the Winnt.h header file. For example, this parameter could specify the constant, SE_SECURITY_NAME, or its corresponding string, "SeSecurityPrivilege".</param>
			/// <param name="lpLuid"></param>            
			[DllImport(core.WINDLL_ADVAPI32, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
			[SecurityCritical]
			public static extern bool LookupPrivilegeValue(
				[In, MarshalAs(UnmanagedType.LPTStr)] string? lpSystemName,
				[In] string lpName,
				[In, Out] ref LUID lpLuid);

			[SecurityCritical]
			public static LUID LookupPrivilegeValue(string pn, string? systemName = null)
			{
				LUID Luid = new();
				LookupPrivilegeValue(systemName, pn, ref Luid).e_ThrowLastWin32Exception_AssertFalse("LookupPrivilegeValue");
				return Luid;
			}

			[SecurityCritical]
			public static LUID LookupPrivilegeValue(PRIVELEGE_NAMES epn, string? systemName = null)
				=> LookupPrivilegeValue(epn.ToString(), systemName);



			[SecurityCritical]
			[DllImport(core.WINDLL_ADVAPI32, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
			public static extern bool AdjustTokenPrivileges(
				IntPtr TokenHandle,
				[MarshalAs(UnmanagedType.Bool)] bool DisableAllPrivileges,
				ref TOKEN_PRIVILEGES NewState,
				int BufferLength,
				IntPtr PreviousState,
				IntPtr ReturnLength);


			/// <returns>processToken</returns>
			[SecurityCritical]
			public static SafeFileHandle AdjustProcessPrivilege(PRIVELEGE_NAMES pn)
				=> AdjustProcessPrivilege(pn.ToString());

			/// <returns>processToken</returns>
			[SecurityCritical]
			public static SafeFileHandle AdjustProcessPrivilege(string pn)
			{
				//using SafeFileHandle ProcessToken = OpenCurrentProcessToken(TokenAccessLevels.Query | TokenAccessLevels.AdjustPrivileges);
				SafeFileHandle processToken = OpenCurrentProcessToken(TokenAccessLevels.Query | TokenAccessLevels.AdjustPrivileges);
				LUID luid = LookupPrivilegeValue(pn);
				LUID_AND_ATTRIBUTES[] P = new LUID_AND_ATTRIBUTES[1];
				P[0].Luid = luid;
				P[0].Attributes = SE_PRIVILEGE_ENABLED;
				TOKEN_PRIVILEGES tokenPrivileges = new(P);
				AdjustTokenPrivileges(
					processToken.DangerousGetHandle(),
					false,
					ref tokenPrivileges,
					Marshal.SizeOf(tokenPrivileges),
					IntPtr.Zero,
					IntPtr.Zero)
					.e_ThrowLastWin32Exception_AssertFalse("AdjustTokenPrivileges");

				return processToken;
			}

			[SecurityCritical]
			public static void AdjustProcessPrivilegeAndCloseToken(PRIVELEGE_NAMES pn)
			{
				using SafeFileHandle token = AdjustProcessPrivilege(pn);
			}

			#endregion

			/// <summary>The TOKEN_INFORMATION_CLASS enumeration type contains values that specify the type of information being assigned to or retrieved from an access token.</summary>
			internal enum TOKEN_INFORMATION_CLASS : int
			{
				TokenUser = 1,
				TokenGroups,
				TokenPrivileges,
				TokenOwner,
				TokenPrimaryGroup,
				TokenDefaultDacl,
				TokenSource,
				TokenType,
				TokenImpersonationLevel,
				TokenStatistics,
				TokenRestrictedSids,
				TokenSessionId,
				TokenGroupsAndPrivileges,
				TokenSessionReference,
				TokenSandBoxInert,
				TokenAuditPolicy,
				TokenOrigin,
				TokenElevationType,
				TokenLinkedToken,
				TokenElevation,
				TokenHasRestrictions,
				TokenAccessInformation,
				TokenVirtualizationAllowed,
				TokenVirtualizationEnabled,
				TokenIntegrityLevel,
				TokenUIAccess,
				TokenMandatoryPolicy,
				TokenLogonSid,
				TokenIsAppContainer,
				TokenCapabilities,
				TokenAppContainerSid,
				TokenAppContainerNumber,
				TokenUserClaimAttributes,
				TokenDeviceClaimAttributes,
				TokenRestrictedUserClaimAttributes,
				TokenRestrictedDeviceClaimAttributes,
				TokenDeviceGroups,
				TokenRestrictedDeviceGroups,
				TokenSecurityAttributes,
				TokenIsRestricted,
				TokenProcessTrustLevel,
				TokenPrivateNameSpace,
				TokenSingletonAttributes,
				TokenBnoIsolation,
				TokenChildProcessFlags,
				TokenIsLessPrivilegedAppContainer,
				TokenIsSandboxed,
				MaxTokenInfoClass
			}


			/// <summary>The WELL_KNOWN_SID_TYPE enumeration type is a list of commonly used security identifiers (SIDs). Programs can pass these values to the CreateWellKnownSid function to create a SID from this list.</summary>
			internal enum WELL_KNOWN_SID_TYPE
			{
				WinNullSid = 0,
				WinWorldSid = 1,
				WinLocalSid = 2,
				WinCreatorOwnerSid = 3,
				WinCreatorGroupSid = 4,
				WinCreatorOwnerServerSid = 5,
				WinCreatorGroupServerSid = 6,
				WinNtAuthoritySid = 7,
				WinDialupSid = 8,
				WinNetworkSid = 9,
				WinBatchSid = 10,
				WinInteractiveSid = 11,
				WinServiceSid = 12,
				WinAnonymousSid = 13,
				WinProxySid = 14,
				WinEnterpriseControllersSid = 15,
				WinSelfSid = 16,
				WinAuthenticatedUserSid = 17,
				WinRestrictedCodeSid = 18,
				WinTerminalServerSid = 19,
				WinRemoteLogonIdSid = 20,
				WinLogonIdsSid = 21,
				WinLocalSystemSid = 22,
				WinLocalServiceSid = 23,
				WinNetworkServiceSid = 24,
				WinBuiltinDomainSid = 25,
				WinBuiltinAdministratorsSid = 26,
				WinBuiltinUsersSid = 27,
				WinBuiltinGuestsSid = 28,
				WinBuiltinPowerUsersSid = 29,
				WinBuiltinAccountOperatorsSid = 30,
				WinBuiltinSystemOperatorsSid = 31,
				WinBuiltinPrintOperatorsSid = 32,
				WinBuiltinBackupOperatorsSid = 33,
				WinBuiltinReplicatorSid = 34,
				WinBuiltinPreWindows2000CompatibleAccessSid = 35,
				WinBuiltinRemoteDesktopUsersSid = 36,
				WinBuiltinNetworkConfigurationOperatorsSid = 37,
				WinAccountAdministratorSid = 38,
				WinAccountGuestSid = 39,
				WinAccountKrbtgtSid = 40,
				WinAccountDomainAdminsSid = 41,
				WinAccountDomainUsersSid = 42,
				WinAccountDomainGuestsSid = 43,
				WinAccountComputersSid = 44,
				WinAccountControllersSid = 45,
				WinAccountCertAdminsSid = 46,
				WinAccountSchemaAdminsSid = 47,
				WinAccountEnterpriseAdminsSid = 48,
				WinAccountPolicyAdminsSid = 49,
				WinAccountRasAndIasServersSid = 50,
				WinNTLMAuthenticationSid = 51,
				WinDigestAuthenticationSid = 52,
				WinSChannelAuthenticationSid = 53,
				WinThisOrganizationSid = 54,
				WinOtherOrganizationSid = 55,
				WinBuiltinIncomingForestTrustBuildersSid = 56,
				WinBuiltinPerfMonitoringUsersSid = 57,
				WinBuiltinPerfLoggingUsersSid = 58,
				WinBuiltinAuthorizationAccessSid = 59,
				WinBuiltinTerminalServerLicenseServersSid = 60,
				WinBuiltinDCOMUsersSid = 61,
				WinBuiltinIUsersSid = 62,
				WinIUserSid = 63,
				WinBuiltinCryptoOperatorsSid = 64,
				WinUntrustedLabelSid = 65,
				WinLowLabelSid = 66,
				WinMediumLabelSid = 67,
				WinHighLabelSid = 68,
				WinSystemLabelSid = 69,
				WinWriteRestrictedCodeSid = 70,
				WinCreatorOwnerRightsSid = 71,
				WinCacheablePrincipalsGroupSid = 72,
				WinNonCacheablePrincipalsGroupSid = 73,
				WinEnterpriseReadonlyControllersSid = 74,
				WinAccountReadonlyControllersSid = 75,
				WinBuiltinEventLogReadersGroup = 76,
				WinNewEnterpriseReadonlyControllersSid = 77,
				WinBuiltinCertSvcDComAccessGroup = 78
			}


			/// <summary>The SECURITY_IMPERSONATION_LEVEL enumeration type contains values that specify security impersonation levels. Security impersonation levels govern the degree to which a server process can act on behalf of a client process.</summary>
			internal enum SECURITY_IMPERSONATION_LEVEL
			{
				SecurityAnonymous = 0,
				SecurityIdentification,
				SecurityImpersonation,
				SecurityDelegation
			}


			/// <summary>The TOKEN_ELEVATION_TYPE enumeration indicates the elevation type of token
			/// when UAC is turned off, elevation type always returns TokenElevationTypeDefault
			/// </summary>
			internal enum TOKEN_ELEVATION_TYPE : Int32
			{
				/// <summary>Токен не имеет связанного токена (UAC is turned off)</summary>
				TokenElevationTypeDefault = 1,

				/// <summaryс повышенными правами.</summary>
				TokenElevationTypeFull,

				/// <summary>ограниченный токен.</summary>
				TokenElevationTypeLimited
			}


			/// <summary>The structure represents a security identifier (SID) and its attributes.
			/// SIDs are used to uniquely identify users or groups.</summary>
			[StructLayout(LayoutKind.Sequential)]
			internal partial struct SID_AND_ATTRIBUTES
			{
				public IntPtr Sid;
				public int Attributes;
			}


			/// <summary>The structure indicates whether a token has elevated privileges.</summary>
			[StructLayout(LayoutKind.Sequential)]
			internal partial struct TOKEN_ELEVATION
			{
				public int TokenIsElevated;
			}


			/// <summary>The structure specifies the mandatory integrity level for a token.</summary>
			[StructLayout(LayoutKind.Sequential)]
			internal partial struct TOKEN_MANDATORY_LABEL
			{
				public SID_AND_ATTRIBUTES Label;
			}


			/// <summary>integrity level of the process. Integrity level is only available on Windows Vista and newer operating systems, thus 
			/// GetProcessIntegrityLevel throws a C++ exception if it is called on systems prior to Windows Vista.</summary>
			public enum IntegrityLevels : int
			{
				ERROR = -1,

				/// <summary>SECURITY_MANDATORY_UNTRUSTED_RID - means untrusted level. It is used by processes started by the Anonymous group. Blocks most write access. (SID: S-1-16-0x0)</summary>
				SECURITY_MANDATORY_UNTRUSTED_RID = 0,

				/// <summary>SECURITY_MANDATORY_LOW_RID - means low integrity level. It is used by Protected Mode Internet Explorer. Blocks write acess to most objects (such as files and registry keys) on the system. (SID: S-1-16-0x1000)</summary>
				SECURITY_MANDATORY_LOW_RID = 0x1000,

				/// <summary>SECURITY_MANDATORY_MEDIUM_RID - means medium integrity level. It is used by normal applications being launched while UAC is enabled. (SID: S-1-16-0x2000)</summary>
				SECURITY_MANDATORY_MEDIUM_RID = 0x2000,

				/// <summary>SECURITY_MANDATORY_HIGH_RID - means high integrity level. It is used by administrative applications launched through elevation when UAC is enabled, or normal applications if UAC is disabled and the user is an administrator. (SID: S-1-16-0x3000)</summary>
				SECURITY_MANDATORY_HIGH_RID = 0x3000,

				/// <summary>SECURITY_MANDATORY_SYSTEM_RID - means system integrity level. It is used by services and other system-level applications (such as Wininit, Winlogon, Smss, etc.)  (SID: S-1-16-0x4000)</summary>
				SECURITY_MANDATORY_SYSTEM_RID = 0x4000
			}






			/// <summary>The DuplicateToken function creates an impersonation token, 
			/// which you can use in functions such as SetThreadToken and ImpersonateLoggedOnUser. 
			/// The token created by DuplicateToken cannot be used in the CreateProcessAsUser function, which requires a primary token. 
			/// To create a token that you can pass to CreateProcessAsUser, use the DuplicateTokenEx function.</summary>
			/// <param name="ExistingTokenHandle">A handle to an access token opened with TOKEN_DUPLICATE access.</param>
			/// <param name="ImpersonationLevel">Specifies a SECURITY_IMPERSONATION_LEVEL enumerated type that supplies the impersonation level of the new token.</param>
			/// <param name="DuplicateTokenHandle">Outputs a handle to the duplicate token. </param>
			[DllImport(core.WINDLL_ADVAPI32, CharSet = CharSet.Auto, SetLastError = true)]
			[SecurityCritical]
			internal static extern bool DuplicateToken(
				Microsoft.Win32.SafeHandles.SafeFileHandle ExistingTokenHandle,
				SECURITY_IMPERSONATION_LEVEL ImpersonationLevel,
				[In, Out] ref Microsoft.Win32.SafeHandles.SafeFileHandle DuplicateTokenHandle);

			/// <summary>The DuplicateToken function creates an impersonation token, 
			/// which you can use in functions such as SetThreadToken and ImpersonateLoggedOnUser. 
			/// The token created by DuplicateToken cannot be used in the CreateProcessAsUser function, which requires a primary token. 
			/// To create a token that you can pass to CreateProcessAsUser, use the DuplicateTokenEx function.</summary>
			/// <param name="ExistingTokenHandle">A handle to an access token opened with TOKEN_DUPLICATE access.</param>
			/// <param name="ImpersonationLevel">Specifies a SECURITY_IMPERSONATION_LEVEL enumerated type that supplies the impersonation level of the new token.</param>
			internal static Microsoft.Win32.SafeHandles.SafeFileHandle DuplicateToken(Microsoft.Win32.SafeHandles.SafeFileHandle ExistingTokenHandle, SECURITY_IMPERSONATION_LEVEL ImpersonationLevel)
			{
				//var hToken2 = IntPtr.Zero;
				//WinAPI.Security.DuplicateToken(hToken, WinAPI.Security.SECURITY_IMPERSONATION_LEVEL.SecurityIdentification, ref hToken2).e_ThrowLastWin32Exception_AssertFalse();
				//hTokenToCheck = new(hToken2, true);

				Microsoft.Win32.SafeHandles.SafeFileHandle hToken2 = new(IntPtr.Zero, true);
				DuplicateToken(ExistingTokenHandle, SECURITY_IMPERSONATION_LEVEL.SecurityIdentification, ref hToken2).e_ThrowLastWin32Exception_AssertFalse();
				return hToken2;
			}


			/// <summary>The function retrieves a specified type of information about an access token. The calling process must have appropriate access rightsto obtain the information.</summary>
			/// <param name="hToken">A handle to an access token from which information is retrieved.</param>
			/// <param name="tokenInfoClass">Specifies a value from the TOKEN_INFORMATION_CLASS enumerated type to identify the type of information the function retrieves.</param>
			/// <param name="pTokenInfo">A pointer to a buffer the function fills with the requested information.</param>
			/// <param name="tokenInfoLength">Specifies the size, in bytes, of the buffer pointed to by the TokenInformation parameter.</param>
			/// <param name="returnLength">A pointer to a variable that receives the number of bytes needed for the buffer pointed to by the TokenInformation parameter.</param>
			[DllImport(core.WINDLL_ADVAPI32, CharSet = CharSet.Auto, SetLastError = true), SecurityCritical]
			public static extern bool GetTokenInformation(
				Microsoft.Win32.SafeHandles.SafeFileHandle hToken,
				TOKEN_INFORMATION_CLASS tokenInfoClass,
				IntPtr pTokenInfo,
				int tokenInfoLength,
				[In, Out] ref int returnLength);


			[DllImport(core.WINDLL_ADVAPI32, EntryPoint = "GetTokenInformation", CharSet = CharSet.Auto, SetLastError = true), SecurityCritical]
			public static extern bool GetTokenInformation_Int32(
				Microsoft.Win32.SafeHandles.SafeFileHandle hToken,
				TOKEN_INFORMATION_CLASS tokenInfoClass,
				[In, Out] ref Int32 pTokenInfo,
				int tokenInfoLength,
				[In, Out] ref int returnLength);

			/// <summary>Determine token type: limited, elevated, or default. </summary>
			internal static TOKEN_ELEVATION_TYPE GetTokenInformation_Elevation(Microsoft.Win32.SafeHandles.SafeFileHandle hToken)
			{
				Int32 iElevationType = 0; int cbSize = sizeof(Int32);
				GetTokenInformation_Int32(hToken, TOKEN_INFORMATION_CLASS.TokenElevationType, ref iElevationType, cbSize, ref cbSize).e_ThrowLastWin32Exception_AssertFalse();
				var eElevationType = (WinAPI.Security.TOKEN_ELEVATION_TYPE)iElevationType;// Marshal the TOKEN_ELEVATION_TYPE enum from native to .NET.
				return eElevationType;
			}

			[DllImport(core.WINDLL_ADVAPI32, EntryPoint = "GetTokenInformation", CharSet = CharSet.Auto, SetLastError = true), SecurityCritical]
			public static extern bool GetTokenInformation_IntPtr(
			 Microsoft.Win32.SafeHandles.SafeFileHandle hToken,
			  TOKEN_INFORMATION_CLASS tokenInfoClass,
			  [In, Out] ref IntPtr pTokenInfo,
			  int tokenInfoLength,
			  [In, Out] ref int returnLength);


			/// <summary>The function returns a pointer to a specified subauthority in a security identifier (SID). The subauthority value is a relative identifier (RID).</summary>
			/// <param name="pSid">A pointer to the SID structure from which a pointer to a subauthorityis to be returned.</param>
			/// <param name="nSubAuthority">Specifies an index value identifying the subauthority array element whose address the function will return.</param>
			/// <returns>If the function succeeds, the return value is a pointer to the specified SID subauthority. To get extended error information, call
			/// GetLastError. If the function fails, the return value is undefined.
			/// The function fails if the specified SID structure is not valid or if 
			/// the index value specified by the nSubAuthority parameter is [Out ] of
			/// bounds. 
			/// </returns>
			[DllImport(core.WINDLL_ADVAPI32, CharSet = CharSet.Auto, SetLastError = true)]
			[SecurityCritical]
			public static extern IntPtr GetSidSubAuthority(IntPtr pSid, uint nSubAuthority);
		}


		//[SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]
		internal static partial class strings
		{


			/// <summary>The lstrlen function returns the length in bytes (ANSI version) or WCHAR values (Unicode version) of the specified string (not including the terminating null character). 
			/// ms-help://MS.MSDNQTR.2003APR.1033/winui/winui/windowsuserinterface/resources/strings/stringreference/stringfunctions/lstrlen.htm
			/// WARN: Security Alert  Using this function incorrectly can compromise the security of your System.Windows.Forms.Application. 
			/// lstrlen assumes that lpString is a NULL-terminated string. If it is not, this could lead to a buffer overrun or a denial of service attack against your System.Windows.Forms.Application. Consider using one of the following alternatives: StringCbLength or StringCchLength. You should review Security Considerations: Windows User Interface before continuing.
			/// </summary>
			/// <returns></returns>
			[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
			internal static extern int lstrlen([MarshalAs(UnmanagedType.LPTStr)] IntPtr lpString);

		}


		//[SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]
		internal static partial class math
		{


			/// <summary>The MulDiv function multiplies two 32-bit values and then divides the 64-bit result by a third 32-bit value. The return value is rounded up or down to the nearest integer.</summary>
			[DllImport(core.WINDLL_KERNEL, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
			internal static extern int MulDiv(int nNumber, int nNumerator, int nDenominator);





		}


		//[SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]
		internal static partial class Shell
		{
			[DllImport(core.WINDLL_SHELL, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
			private static extern int PickIconDlg(
				IntPtr hwnd,
				[In, Out, MarshalAs(UnmanagedType.LPTStr)] StringBuilder pszIconPath,
				[In] int cchIconPath,
				[In, Out] ref int piIconIndex);

			internal static (DialogResult DislogResult, string? IconFile, int IconIndex)
				PickIconDlg(
				IWin32Window hWnd,
				string? iconFile = null,
				int iIconIndex = 0)
			{
				const int C_DEFAULT_BUFFER_SIZE = 2000;
				StringBuilder sbPath = (null != iconFile) ? new StringBuilder(iconFile, C_DEFAULT_BUFFER_SIZE) : new StringBuilder(C_DEFAULT_BUFFER_SIZE);
				int iResult = PickIconDlg(hWnd.Handle, sbPath, sbPath.Capacity, ref iIconIndex);
				if (iResult == 0) return (DialogResult.Cancel, null, -1);
				iconFile = Environment.ExpandEnvironmentVariables(sbPath.ToString());
				return (DialogResult.OK, iconFile, iIconIndex);
			}






			#region StrFormatByteSize

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			[DllImport(WinAPI.core.WINDLL_SHLWAPI, SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
			internal static extern IntPtr StrFormatByteSize64(
				 long FileSize,
				[MarshalAs(UnmanagedType.LPStr)] StringBuilder Buffer,
				int BufferSize);






			// <DllImport(UOM.Win32.WINDLL_SHLWAPI, _
			// SetLastError:=True, _
			// CharSet:=CharSet.Auto, _
			// ExactSpelling:=False, _
			// CallingConvention:=CallingConvention.Winapi)> _
			// Private Overloads Shared Function StrFormatKBSize( _
			// ByVal SizeInBytes As Long, _
			// <MarshalAs(UnmanagedType.LPTStr)> ByVal Buffer As System.Text.StringBuilder, _
			// ByVal BufferSize As Integer) As IntPtr
			// '
			// End Function 

			#endregion


			#region SHMessageBoxCheck

			//// Public Enum MessageBoxCheckFlags As UInteger
			//// MB_OK = &H0
			//// MB_OKCANCEL = &H1
			//// MB_YESNO = &H4
			//// MB_ICONHAND = &H10
			//// MB_ICONQUESTION = &H20
			//// MB_ICONEXCLAMATION = &H30
			//// MB_ICONINFORMATION = &H40
			//// End Enum

			//[DllImport("shlwapi.dll", CharSet = CharSet.Auto)]
			//// The SHMessageBoxCheck Is exported by ordinal in shlwapi.dll
			//// SHMessageBoxCheckA: 185 
			//// SHMessageBoxCheckW: 191

			//// The Windows Shell (Explorer) stores your preference in the following registry key:
			//// HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\DontShowMeThisDialogAgain
			//private static extern MsgBoxResult SHMessageBoxCheck(
			//    [In] IntPtr hwnd,
			//    [In,MarshalAs(UnmanagedType.LPTStr)] string pszText,
			//    [In,MarshalAs(UnmanagedType.LPTStr)] string pszTitle,
			//    [In] MsgBoxStyle uType,
			//    [In] MsgBoxResult iDefault,
			//    [In,MarshalAs(UnmanagedType.LPTStr)] string pszRegVal);

			//private static string BuildMessageID(string MessageID)
			//{
			//    if (string.IsNullOrWhiteSpace(MessageID)) throw new ArgumentNullException(nameof(MessageID));
			//    return Application.ProductName + "_" + MessageID; // This Is the value Of the registry key
			//}

			/////// <summary>Displays a message box that gives the user the option of suppressing further occurrences. If the user has already opted to suppress the message box, the function does not display a dialog box and instead simply returns the default value.</summary>
			/////// <param name="MessageID">ID под которым в реестре храниться результат установки галочки "не показывать более"</param>
			/////// <param name="iDefault">Это значение возвращается в конце функции, если в предыдущем вызове, была установлена галочка.</param>
			/////// <returns>В текущем вызове ВСЕГДА вернётся код нажатой кнопки (независимо от состояния галочки).
			/////// Если галочку установили сейчас, то в этом вызове вернётся код нажатой кнопки, а во всех последющих будет возвращаться iDefault и диалог не будет показываться.</returns>
			////internal static MsgBoxResult SHMessageBoxCheck(
			////    IWin32Window WND,
			////    string pszText,
			////    string MessageID,
			////    string pszTitle = null,
			////    MsgBoxStyle.vbYesNo | MsgBoxStyle.Information, MsgBoxResult iDefault = MsgBoxResult.Abort)
			////{
			////    IntPtr hwnd = WND.Handle;
			////    if (string.IsNullOrWhiteSpace(pszTitle)) pszTitle = Application.ProductName;
			////    string sID = BuildMessageID(MessageID); // This Is the value Of the registry key
			////    return SHMessageBoxCheck(hwnd, pszText, pszTitle, uType, iDefault, sID);
			////}

			///// <summary>SHMessageBoxCheckCleanup will reset the state of the message box (i.e. the users choice wether or not to see the message box again will be reset).</summary>
			///// <param name="MessageID">ID под которым в реестре храниться результат установки галочки "не показывать более"</param>
			//internal static void SHMessageBoxCheckCleanup(string MessageID)
			//{
			//    // # delete the registry key that Is used To store the checkbox status so we can start fresh Next time
			//    // DeleteRegValue HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\DontShowMeThisDialogAgain" "${_PSZ_REG_VAL}"
			//    const string C_KEY_PATH = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\DontShowMeThisDialogAgain";
			//    string sID = BuildMessageID(MessageID); // This Is the value Of the registry key
			//    try
			//    {
			//        using (var hKey = Registry.CurrentUser.OpenSubKey(C_KEY_PATH, true))
			//        {
			//            if (hKey?.GetValue(sID) != null)
			//            {
			//                hKey?.DeleteValue(sID);
			//                hKey?.Flush();
			//            }
			//        }
			//    }
			//    catch (Exception ex) { }                    // Ignore Any Errors
			//}

			#endregion

			#region SHFileOperation


			public enum FO_Func : int
			{
				FO_MOVE = 1,
				FO_COPY = 2,
				FO_DELETE = 3,
				FO_RENAME = 4
			}

			[Flags()]
			public enum FILEOP_FLAGS : int
			{
				/// <summary>The pTo member specifies multiple destination files (one for each source file in pFrom) rather than one directory where all source files are to be deposited. </summary>
				FOF_MULTIDESTFILES = 0x1,

				/// <summary>Not used.</summary>
				FOF_CONFIRMMOUSE = 0x2,

				/// <summary>Don't create progress/report</summary>
				FOF_SILENT = 0x4,

				/// <summary></summary>
				FOF_RENAMEONCOLLISION = 0x8,

				/// <summary>Respond with Yes to All for any dialog box that is displayed. </summary>
				FOF_NOCONFIRMATION = 0x10,

				/// <summary>Fill in SHFILEOPSTRUCT.hNameMappings Must be freed using SHFreeNameMappings</summary>
				FOF_WANTMAPPINGHANDLE = 0x20,

				/// <summary>Preserve undo information, if possible. Prior to Windows Vista, operations could be undone only from the same process that performed the original operation.In Windows Vista and later systems, the scope of the undo is a user session. Any process running in the user session can undo another operation. The undo state is held in the Explorer.exe process, and as long as that process is running, it can coordinate the undo functions.If the source file parameter does not contain fully qualified path and file names, this flag is ignored.</summary>
				FOF_ALLOWUNDO = 0x40,

				/// <summary>Perform the operation only on files (not on folders) if a wildcard file name (*.*) is specified.</summary>
				FOF_FILESONLY = 0x80,

				/// <summary>Means don't show names of files</summary>
				FOF_SIMPLEPROGRESS = 0x100,

				/// <summary>Do not ask the user to confirm the creation of a new directory if the operation requires one to be created.</summary>
				FOF_NOCONFIRMMKDIR = 0x200,

				/// <summary>Do not display a dialog to the user if an error occurs.</summary>
				FOF_NOERRORUI = 0x400,

				/// <summary>Version 4.71. Do not copy the security attributes of the file. The destination file receives the security attributes of its new folder. </summary>
				FOF_NOCOPYSECURITYATTRIBS = 0x800

				// FOF_NO_CONNECTED_ELEMENTS'Version 5.0. Do not move connected files as a group. Only move the specified files.
				// FOF_NORECURSEREPARSE'    Not used.
				// FOF_NORECURSION'Only perform the operation in the local directory. Don't operate recursively into subdirectories, which is the default behavior.
			}

			/*			 			 

			[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Auto)]
			public partial struct SHFILEOPSTRUCT_x32
			{
				public IntPtr hwnd;
				public FO_Func wFunc;
				[MarshalAs(UnmanagedType.LPTStr)]
				public string pFrom;
				[MarshalAs(UnmanagedType.LPTStr)]
				public string pTo;
				public FILEOP_FLAGS fFlags;
				public bool fAnyOperationsAborted;
				public IntPtr hNameMappings;
				[MarshalAs(UnmanagedType.LPTStr)]
				public string? lpszProgressTitle; // only used if FOF_SIMPLEPROGRESS      
			}

			[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
			public partial struct SHFILEOPSTRUCT_x64
			{
				public IntPtr hwnd;
				public FO_Func wFunc;
				[MarshalAs(UnmanagedType.LPTStr)]
				public string pFrom;
				[MarshalAs(UnmanagedType.LPTStr)]
				public string pTo;
				public FILEOP_FLAGS fFlags;
				public bool fAnyOperationsAborted;
				public IntPtr hNameMappings;
				[MarshalAs(UnmanagedType.LPTStr)]
				public string? lpszProgressTitle; // only used if FOF_SIMPLEPROGRESS      
			}

			[DllImport(core.WINDLL_SHELL, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, EntryPoint = "SHFileOperation", CallingConvention = CallingConvention.Winapi)]
			private static extern int SHFileOperation_x64([In] ref SHFILEOPSTRUCT_x64 lpFileOp);

			[DllImport(core.WINDLL_SHELL, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, EntryPoint = "SHFileOperation", CallingConvention = CallingConvention.Winapi)]
			private static extern int SHFileOperation_x32([In] ref SHFILEOPSTRUCT_x32 lpFileOp);
			 */

			[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
			private struct SHFILEOPSTRUCT
			{
#pragma warning disable IDE1006 // Naming Styles
				public IntPtr hwnd;
				public FO_Func wFunc;
				[MarshalAs(UnmanagedType.LPTStr)] public string pFrom;
				[MarshalAs(UnmanagedType.LPTStr)] public string pTo;
				public FILEOP_FLAGS fFlags;
				public bool fAnyOperationsAborted;
				public IntPtr hNameMappings;
				[MarshalAs(UnmanagedType.LPTStr)] public string? lpszProgressTitle; // only used if FOF_SIMPLEPROGRESS      
#pragma warning restore IDE1006 // Naming Styles
			}


			[DllImport(core.WINDLL_SHELL, SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			private static extern int SHFileOperation([In] ref SHFILEOPSTRUCT lpFileOp);


			public static bool SHFO_Delete(IntPtr hWndOwner, IEnumerable<string> ItemsToDelete, FILEOP_FLAGS Options = FILEOP_FLAGS.FOF_ALLOWUNDO, string? title = null)
			{
				string sFilesToDelete = ItemsToDelete.e_ToAPIMultiStringZ();
				SHFILEOPSTRUCT fo = new()
				{
					hwnd = hWndOwner,
					lpszProgressTitle = title,
					wFunc = FO_Func.FO_DELETE,
					pFrom = sFilesToDelete,
					fFlags = Options
				};
				return (SHFileOperation(ref fo) == 0) && !fo.fAnyOperationsAborted;

				//if (!Environment.Is64BitOperatingSystem)
				/*
				SHFILEOPSTRUCT_x32 FO = new()
				{
					hwnd = hWndOwner,
					lpszProgressTitle = title,
					wFunc = FO_Func.FO_DELETE,
					pFrom = sFilesToDelete,
					fFlags = Options
				};
				return SHFileOperation_x32(ref FO) == 0;
				 */
			}


			public static bool SHFO_Move(IntPtr hWndOwner, IEnumerable<string> aFrom, IEnumerable<string> aTo, FILEOP_FLAGS Options = FILEOP_FLAGS.FOF_ALLOWUNDO, string? title = null)
			{
				var sFrom = aFrom.e_ToAPIMultiStringZ();
				var sTo = aTo.e_ToAPIMultiStringZ();

				SHFILEOPSTRUCT fo = new()
				{
					hwnd = hWndOwner,
					lpszProgressTitle = title,
					wFunc = FO_Func.FO_MOVE,
					pFrom = sFrom,
					pTo = sTo,
					fFlags = Options
				};
				return (SHFileOperation(ref fo) == 0) && !fo.fAnyOperationsAborted;

				/*

				if (Environment.Is64BitOperatingSystem)
				{

					var FO = new SHFILEOPSTRUCT_x64() { hwnd = hWndOwner, lpszProgressTitle = title, wFunc = FO_Func.FO_MOVE };
					{
						var withBlock = FO;
						withBlock.pFrom = sFrom;
						withBlock.pTo = sTo;
						withBlock.fFlags = Options;
					}

					return SHFileOperation_x64(ref FO) == 0;
				}
				else
				{
					var FO = new SHFILEOPSTRUCT_x32() { hwnd = hWndOwner, lpszProgressTitle = title, wFunc = FO_Func.FO_MOVE };
					{
						var withBlock1 = FO;
						withBlock1.pFrom = sFrom;
						withBlock1.pTo = sTo;
						withBlock1.fFlags = Options;
					}

					return SHFileOperation_x32(ref FO) == 0;
				}
				*/
			}


			/// <summary>Копирование в заданную ОДНУ папку, без перенименования!</summary>
			public static bool SHFO_Copy(IntPtr hWndOwner, string[] aFrom, string sTargetFolder, string? title = null)
			{
				string sFrom = aFrom.e_ToAPIMultiStringZ();
				var Options = FILEOP_FLAGS.FOF_ALLOWUNDO;

				SHFILEOPSTRUCT fo = new()
				{
					hwnd = hWndOwner,
					lpszProgressTitle = title,
					wFunc = FO_Func.FO_COPY,
					pFrom = sFrom,
					pTo = sTargetFolder,
					fFlags = Options
				};
				return (SHFileOperation(ref fo) == 0) && !fo.fAnyOperationsAborted;

				/*

				if (Environment.Is64BitOperatingSystem)
				{
					var FO = new SHFILEOPSTRUCT_x64()
					{
						hwnd = hWndOwner,
						lpszProgressTitle = title,
						wFunc = FO_Func.FO_COPY
					};
					{
						var withBlock = FO;
						withBlock.pFrom = sFrom;
						withBlock.pTo = sTargetFolder;
						withBlock.fFlags = Options;
					}

					return SHFileOperation_x64(ref FO) == 0;
				}
				else
				{
					var FO = new SHFILEOPSTRUCT_x32()
					{
						hwnd = hWndOwner,
						lpszProgressTitle = title,
						wFunc = FO_Func.FO_COPY
					};
					{
						var withBlock1 = FO;
						withBlock1.pFrom = sFrom;
						withBlock1.pTo = sTargetFolder;
						withBlock1.fFlags = Options;
					}

					return SHFileOperation_x32(ref FO) == 0;
				}
								 */
			}


			/// <summary>Копирование массива исходных файлов с переименованием</summary>
			public static bool SHFO_Copy(IntPtr HwndOwner, string[] aFrom, string[] aTo, string? title = null)
			{
				string sFrom = aFrom.e_ToAPIMultiStringZ();
				string sTo = aTo.e_ToAPIMultiStringZ();
				var Options = FILEOP_FLAGS.FOF_ALLOWUNDO | FILEOP_FLAGS.FOF_MULTIDESTFILES;

				SHFILEOPSTRUCT fo = new()
				{
					hwnd = HwndOwner,
					lpszProgressTitle = title,
					wFunc = FO_Func.FO_COPY,
					pFrom = sFrom,
					pTo = sTo,
					fFlags = Options
				};
				return (SHFileOperation(ref fo) == 0) && !fo.fAnyOperationsAborted;

				/*



				if (Environment.Is64BitOperatingSystem)
				{
					var FO = new SHFILEOPSTRUCT_x64()
					{
						hwnd = HwndOwner,
						lpszProgressTitle = title,
						wFunc = FO_Func.FO_COPY
					};
					{
						var withBlock = FO;
						withBlock.pFrom = sFrom;
						withBlock.pTo = sTo;
						withBlock.fFlags = Options;
					}

					return SHFileOperation_x64(ref FO) == 0;
				}
				else
				{
					var FO = new SHFILEOPSTRUCT_x32()
					{
						hwnd = HwndOwner,
						lpszProgressTitle = title,
						wFunc = FO_Func.FO_COPY
					};
					{
						var withBlock1 = FO;
						withBlock1.pFrom = sFrom;
						withBlock1.pTo = sTo;
						withBlock1.fFlags = Options;
					}
					return SHFileOperation_x32(ref FO) == 0;
				}
				*/
			}


			#endregion

			#region SHGetItemInfo

			// '	Function SHGetItemInfo2(ByVal PPIDL As Integer, ByVal Flags As E_SHGFI_Flags, Optional ByVal ret_FileAttributes As Integer = 0, Optional ByRef ret_hIcon As Integer = 0, Optional ByRef ret_iIcon As Integer = 0, Optional ByRef ret_DisplayName As String = "", Optional ByRef ret_szTypeName As String = "") As Integer
			// '		'UPGRADE_WARNING: Arrays in structure FI may need to be initialized before they can be used. Click for more: 'ms-help://MS.VSCC/commoner/redir/redirect.htm?keyword="vbup1063"'
			// '		Dim FI As Win.SHFILEINFO
			// '		Dim L As Integer
			// '		Dim B As Boolean
			// '		'UPGRADE_ISSUE: COM expression not supported: Module methods of COM objects. Click for more: 'ms-help://MS.VSCC/commoner/redir/redirect.htm?keyword="vbup1060"'
			// '		L = Win.SHGetItemInfo(PPIDL, ret_FileAttributes, FI, Len(FI), Flags)
			// '		B = CBool(L) : SHGetItemInfo2 = B
			// '		If Not B Then Exit Function
			// '		SHGetItemInfo2 = L
			// '		With FI
			// '			ret_FileAttributes = FI.dwAttributes
			// '			ret_hIcon = .hIcon
			// '			ret_iIcon = .iIcon
			// '			ret_DisplayName = MMem.StrFromBArray(.szDisplayName)
			// '			ret_szTypeName = MMem.StrFromBArray(.szTypeName)
			// '		End With
			// '	End Function
			// '	Function SHGetSpecialFolderInfo2(ByVal CLSID As Win.ECSIDL, ByVal Flags As E_SHGFI_Flags, Optional ByVal ret_FileAttributes As Integer = 0, Optional ByRef ret_hIcon As Integer = 0, Optional ByRef ret_iIcon As Integer = 0, Optional ByRef ret_DisplayName As String = "", Optional ByRef ret_szTypeName As String = "") As Integer
			// '		'UPGRADE_WARNING: Arrays in structure FI may need to be initialized before they can be used. Click for more: 'ms-help://MS.VSCC/commoner/redir/redirect.htm?keyword="vbup1063"'
			// '		Dim FI As Win.SHFILEINFO
			// '		Dim L As Integer
			// '		Dim B As Boolean
			// '		Dim PPIDL As Integer
			// '		'UPGRADE_ISSUE: COM expression not supported: Module methods of COM objects. Click for more: 'ms-help://MS.VSCC/commoner/redir/redirect.htm?keyword="vbup1060"'
			// '		Call Win.SHGetSpecialFolderLocation(0, CLSID, PPIDL)
			// '		'UPGRADE_ISSUE: COM expression not supported: Module methods of COM objects. Click for more: 'ms-help://MS.VSCC/commoner/redir/redirect.htm?keyword="vbup1060"'
			// '		L = Win.SHGetItemInfo(PPIDL, ret_FileAttributes, FI, Len(FI), Flags Or E_SHGFI_Flags.SHGFI_PIDL)
			// '		B = CBool(L) : SHGetSpecialFolderInfo2 = B
			// '		If Not B Then Exit Function
			// '		SHGetSpecialFolderInfo2 = L
			// '		With FI
			// '			ret_FileAttributes = FI.dwAttributes
			// '			ret_hIcon = .hIcon
			// '			ret_iIcon = .iIcon
			// '			ret_DisplayName = MMem.StrFromBArray(.szDisplayName)
			// '			ret_szTypeName = MMem.StrFromBArray(.szTypeName)
			// '		End With
			// '	End Function
			// #End Region

			#endregion

			#region SHGetFileInfo
			// ' * The SHGetFileInfo API provides an easy way to get attributes
			// ' * for a file given a pathname.
			// ' *
			// ' *   PARAMETERS
			// ' *
			// ' *     pszPath              file name to get info about
			// ' *     dwFileAttributes     file attribs, only used with SHGFI_USEFILEATTRIBUTES
			// ' *     psfi                 place to return file info
			// ' *     cbFileInfo           size of structure
			// ' *     uFlags               flags
			// ' *
			// ' *   RETURN
			// ' *     TRUE if things worked
			// ' */
			// '
			[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
			public partial struct SHFILEINFO
			{
				public IntPtr hIcon;
				public int iIcon;
				public int dwAttributes;
				// <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=260)> Public szDisplayName As String
				[MarshalAs(UnmanagedType.ByValTStr, SizeConst = WinAPI.IO.MAX_PATH)]
				public string szDisplayName;
				[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]
				public string szTypeName;

				// 'typedef struct _SHFILEINFOA
				// '{
				// '        HICON       hIcon                       'out: icon
				// '        int         iIcon                       'out: icon index
				// '        DWORD       dwAttributes                'out: SFGAO_ flags
				// '        CHAR        szDisplayName[MAX_PATH]     'out: display name (or path)
				// '        CHAR        szTypeName[80]              'out: type name
				// '} SHFILEINFOA
				// 'typedef struct _SHFILEINFOW
				// '{
				// '        HICON       hIcon                       'out: icon
				// '        int         iIcon                       'out: icon index
				// '        DWORD       dwAttributes                'out: SFGAO_ flags
				// '        WCHAR       szDisplayName[MAX_PATH]     'out: display name (or path)
				// '        WCHAR       szTypeName[80]              'out: type name
				// '} SHFILEINFOW
			}

			public enum SHGFI_FLAGS : int
			{
				/// <summary>get icon</summary>
				SHGFI_ICON = 0x100,

				/// <summary>get display name</summary>
				SHGFI_DISPLAYNAME = 0x200,

				/// <summary>get type name</summary>
				SHGFI_TYPENAME = 0x400,

				/// <summary>get attributes</summary>
				SHGFI_ATTRIBUTES = 0x800,

				/// <summary>get icon location</summary>
				SHGFI_ICONLOCATION = 0x1000,

				/// <summary>return exe type</summary>
				SHGFI_EXETYPE = 0x2000,

				/// <summary>get system icon index</summary>
				SHGFI_SYSICONINDEX = 0x4000,

				/// <summary>put a link overlay on icon</summary>
				SHGFI_LINKOVERLAY = 0x8000,

				/// <summary>show icon in selected state</summary>
				SHGFI_SELECTED = 0x10000,

				/// <summary>get only specified attributes</summary>
				SHGFI_ATTR_SPECIFIED = 0x20000,

				/// <summary>get large icon</summary>
				SHGFI_LARGEICON = 0x0,

				/// <summary>get small icon</summary>
				SHGFI_SMALLICON = 0x1,

				/// <summary>get open icon</summary>
				SHGFI_OPENICON = 0x2,

				/// <summary>get shell size icon</summary>
				SHGFI_SHELLICONSIZE = 0x4,

				/// <summary>pszPath is a pidl</summary>
				SHGFI_PIDL = 0x8,

				/// <summary>use passed dwFileAttribute </summary>
				SHGFI_USEFILEATTRIBUTES = 0x10,

				/// <summary>apply the appropriate overlays</summary>
				SHGFI_ADDOVERLAYS = 0x20,

				/// <summary>Get the index of the overlay in the upper 8 bits of the iIcon</summary>
				SHGFI_OVERLAYINDEX = 0x40
			}


			/// <summary>
			/// 
			/// </summary>
			/// <param name="pszPath">A pointer to a null-terminated string of maximum length MAX_PATH that contains the path and file name. Both absolute and relative paths are valid.
			/// If the uFlags parameter includes the SHGFI_PIDL flag, this parameter must be the address Of an ITEMIDLIST (PIDL) Structure that contains the list Of item identifiers that uniquely identifies the file within the Shell's namespace. The PIDL must be a fully qualified PIDL. Relative PIDLs are not allowed.
			/// If the uFlags parameter includes the SHGFI_USEFILEATTRIBUTES flag, this parameter does Not have To be a valid file name. The Function will proceed As If the file exists With the specified name And With the file attributes passed In the dwFileAttributes parameter. This allows you To obtain information about a file type by passing just the extension For pszPath And passing FILE_ATTRIBUTE_NORMAL In dwFileAttributes.
			/// This string can use either short (the 8.3 form) Or long file names.</param>
			/// <param name="dwFileAttributes">A combination of one or more file attribute flags (FILE_ATTRIBUTE_ values as defined in Winnt.h). If uFlags does not include the SHGFI_USEFILEATTRIBUTES flag, this parameter is ignored.</param>
			/// <param name="psfi">Pointer to a SHFILEINFO structure to receive the file information.</param>
			/// <param name="cbFileInfo">The size, in bytes, of the SHFILEINFO structure pointed to by the psfi parameter.</param>
			/// <param name="uFlags">The flags that specify the file information to retrieve. This parameter can be a combination of the following values.</param>
			/// <returns></returns>
			[DllImport(core.WINDLL_SHELL, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
			public static extern IntPtr SHGetFileInfo([In, MarshalAs(UnmanagedType.LPStr)] string pszPath, [In] int dwFileAttributes, [In] ref SHFILEINFO psfi, [In] int cbFileInfo, [In] SHGFI_FLAGS uFlags);

			// '
			// '#define SHGetDiskFreeSpace SHGetDiskFreeSpaceEx
			// '
			// 'SHSTDAPI_(BOOL) SHGetDiskFreeSpaceExA(LPCSTR pszDirectoryName, ULARGE_INTEGER* pulFreeBytesAvailableToCaller, ULARGE_INTEGER* pulTotalNumberOfBytes, ULARGE_INTEGER* pulTotalNumberOfFreeBytes)
			// 'SHSTDAPI_(BOOL) SHGetDiskFreeSpaceExW(LPCWSTR pszDirectoryName, ULARGE_INTEGER* pulFreeBytesAvailableToCaller, ULARGE_INTEGER* pulTotalNumberOfBytes, ULARGE_INTEGER* pulTotalNumberOfFreeBytes)
			// '#ifdef UNICODE
			// '#define SHGetDiskFreeSpaceEx  SHGetDiskFreeSpaceExW
			// '#Else
			// '#define SHGetDiskFreeSpaceEx  SHGetDiskFreeSpaceExA
			// '#endif '!UNICODE
			// 'SHSTDAPI_(BOOL) SHGetNewLinkInfoA(LPCSTR pszLinkTo, LPCSTR pszDir, LPSTR pszName, BOOL *pfMustCopy, UINT uFlags)
			// 'SHSTDAPI_(BOOL) SHGetNewLinkInfoW(LPCWSTR pszLinkTo, LPCWSTR pszDir, LPWSTR pszName, BOOL *pfMustCopy, UINT uFlags)
			// '#ifdef UNICODE
			// '#define SHGetNewLinkInfo  SHGetNewLinkInfoW
			// '#Else
			// '#define SHGetNewLinkInfo  SHGetNewLinkInfoA
			// '#endif '!UNICODE
			// '
			// '#define SHGNLI_PIDL             &h000000001     'pszLinkTo is a pidl
			// '#define SHGNLI_PREFIXNAME       &h000000002     'Make name "Shortcut to xxx"
			// '#define SHGNLI_NOUNIQUE         &h000000004     'don't do the unique name generation
			// '#if (_WIN32_IE >= &h0501)
			// '#define SHGNLI_NOLNK            &h000000008     'don't add ".lnk" extension
			// '#endif '_WIN2_IE >= &h0501
			// '
			// '
			// '''
			#endregion

			// Function GetSysImageList(ByVal Flags As E_SHGFI_Flags, Optional ByVal Refresh As bool  = False) As Integer
			// 'UPGRADE_WARNING: Couldn't resolve default property of object lHSysImL. Click for more: 'ms-help://MS.VSCC/commoner/redir/redirect.htm?keyword="vbup1037"'
			// 'UPGRADE_WARNING: Arrays in structure FI may need to be initialized before they can be used. Click for more: 'ms-help://MS.VSCC/commoner/redir/redirect.htm?keyword="vbup1063"'
			// Dim FI As Win.SHFILEINFO
			// If Refresh Or lHSysImL = 0 Then
			// 'UPGRADE_ISSUE: COM expression not supported: Module methods of COM objects. Click for more: 'ms-help://MS.VSCC/commoner/redir/redirect.htm?keyword="vbup1060"'
			// 'UPGRADE_WARNING: Couldn't resolve default property of object lHSysImL. Click for more: 'ms-help://MS.VSCC/commoner/redir/redirect.htm?keyword="vbup1037"'
			// lHSysImL = Win.SHGetFileInfo("", 0, FI, Len(FI), E_SHGFI_Flags.SHGFI_SYSICONINDEX Or Flags)
			// End If
			// 'UPGRADE_WARNING: Couldn't resolve default property of object lHSysImL. Click for more: 'ms-help://MS.VSCC/commoner/redir/redirect.htm?keyword="vbup1037"'
			// GetSysImageList = lHSysImL
			// End Function


			#region InetIsOffline
			[DllImport(core.WINDLL_URL, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
			// ms-help://MS.MSDNQTR.2003APR.1033/shellcc/platform/shell/reference/shlwapi/path/pathfileexists.htm
			private static extern bool InetIsOffline(int dwFlags);

			internal static bool InetIsOffline()
			{
				return InetIsOffline(0);
			}
			#endregion

			#region Path APIs...

			#region PathCompactPath
			[DllImport(core.WINDLL_SHLWAPI, SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
			private static extern bool PathCompactPath(
				[In] IntPtr hdc,
				[In, Out, MarshalAs(UnmanagedType.LPTStr)] StringBuilder Path,
				[In] int PixelWidth);

			/// <summary>Truncates a file path to fit within a given pixel width by replacing path components with ellipses like: "c:\system...."</summary>
			internal static string PathCompactPath(string Path, IntPtr HDC, int PixelWidth)
			{
				var SB = new StringBuilder(Path, Path.Length + uom.WinAPI.IO.MAX_PATH);
				PathCompactPath(HDC, SB, PixelWidth);
				return SB.ToString();
			}

			/// <summary>Truncates a path to fit within a certain number of characters by replacing path components with ellipses.</summary>
			[DllImport(core.WINDLL_SHLWAPI, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
			private static extern bool PathCompactPathEx(
				[In, Out, MarshalAs(UnmanagedType.LPTStr)] StringBuilder PathOut,
				[In, MarshalAs(UnmanagedType.LPTStr)] string PathIn,
				uint NeedCahrCount,
				int Flags);


			/// <summary>Truncates a path to fit within a certain number of characters by replacing path components with ellipses.</summary>
			/// <param name="PathIn">the path to be altered.</param>
			/// <param name="NeedCahrCount">The maximum number of characters to be contained in the new string, including the terminating null character. 
			/// For example, if cchMax = 8, the resulting string can contain a maximum of 7 characters plus the terminating null character.</param>
			internal static String PathCompactPathEx(string PathIn, uint NeedCahrCount)
			{
				var SB = new StringBuilder((int)NeedCahrCount * 2);
				PathCompactPathEx(SB, PathIn, NeedCahrCount, 0).e_ThrowLastWin32Exception_AssertFalse();
				return SB.ToString();
			}
			#endregion


			/// <summary>Parses a path and returns the portion of that path that follows the first backslash.
			///             // OUTPUT:
			// ===========
			// The path c:\path1\path2\file.txt returns path1\path2\file.txt
			// The path path1\path2\file.txt returns path2\file.txt
			// The path path2\file.txt returns file.txt
			// The path file.txt returns a pointer to the terminating null character
			// The terminating null character returns NULL
			// The path \path1 returns path1
			// The path \path1\path2 returns path1\path2
			// The path path1\path2 returns path2
			// The path c:\file.txt returns file.txt
			/// </summary>
			[DllImport(core.WINDLL_SHLWAPI, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
			private static extern IntPtr PathFindNextComponent([MarshalAs(UnmanagedType.LPTStr)] string lpszPath);
			internal static String? PathFindNextComponent_(string lpszPath)
			{
				IntPtr ptrStr = PathFindNextComponent(lpszPath);
				return ptrStr.e_IsValid()
					? Marshal.PtrToStringUni(ptrStr)
					: string.Empty;
			}

			/// <summary>Finds the command line arguments within a given path.
			///             // OUTPUT:
			// ===========
			// The path passed to the function was : test.exe temp.txt sample.doc
			// The arg(s)found in path 1 were      : temp.txt sample.doc

			// The path passed to the function was : test.exe 1 2 3
			// The arg(s)found in path 2 were      : 1 2 3

			// The path passed to the function was : test.exe sample All 15
			// The arg(s)found in path 3 were      : sample All 15

			// The path passed to the function was : test.exe
			// The arg(s)found in path 4 were      :

			/// </summary>
			[DllImport(core.WINDLL_SHLWAPI, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
			private static extern IntPtr PathGetArgs([In, MarshalAs(UnmanagedType.LPTStr)] string lpszPath);

			internal static String? PathGetArgs_(string lpszPath)
			{
				IntPtr ptrStr = PathGetArgs(lpszPath);
				return ptrStr.e_IsValid()
				   ? Marshal.PtrToStringUni(ptrStr)
				   : string.Empty;
			}



			/// <summary>Determines whether a path to a file system object such as a file or folder is valid</summary>
			[DllImport(core.WINDLL_SHLWAPI, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
			internal static extern bool PathFileExists([In, MarshalAs(UnmanagedType.LPTStr)] string lpszPath);

			/// <summary>Searches a path and determines if it is relative.</summary>
			[DllImport(core.WINDLL_SHLWAPI, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
			internal static extern bool PathIsRelative([In, MarshalAs(UnmanagedType.LPTStr)] string lpszPath);


			[DllImport(core.WINDLL_SHLWAPI, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
			internal static extern bool PathCanonicalize(
				[In, Out, MarshalAs(UnmanagedType.LPTStr)] StringBuilder PathDst,
				[In, MarshalAs(UnmanagedType.LPTStr)] string PathSrc);


			[DllImport(core.WINDLL_SHLWAPI, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
			internal static extern int PathCommonPrefix(
				[In, MarshalAs(UnmanagedType.LPTStr)] string Path1,
				[In, MarshalAs(UnmanagedType.LPTStr)] string Path2,
				[In, Out, MarshalAs(UnmanagedType.LPTStr)] StringBuilder CommonPath);


			[DllImport(core.WINDLL_SHLWAPI, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
			internal static extern bool PathIsFileSpec([In, MarshalAs(UnmanagedType.LPTStr)] string Path);

			/// <summary> Removes the trailing file name and backslash from a path, if they are present.
			/// This function is deprecated. We recommend the use of the PathCchRemoveFileSpec function in its place.</summary>
			/// <param name="Path">A pointer to a null-terminated string of length MAX_PATH that contains the path from which to remove the file name.</param>
			/// <returns>Returns nonzero if something was removed, or zero otherwise.</returns>
			[Obsolete("This function is deprecated. We recommend the use of the PathCchRemoveFileSpec function in its place.")]
			[DllImport(core.WINDLL_SHLWAPI, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
			private static extern bool PathRemoveFileSpec([In, Out, MarshalAs(UnmanagedType.LPTStr)] StringBuilder Path);
			/// <summary> Removes the trailing file name and backslash from a path, if they are present.
			/// This function is deprecated. We recommend the use of the PathCchRemoveFileSpec function in its place.</summary>
			[Obsolete("This function is deprecated. We recommend the use of the PathCchRemoveFileSpec function in its place.")]
			internal static string PathRemoveFile(string Path)
			{
				var SB = Path.e_toStringBuilder();
				PathRemoveFileSpec(SB).e_ThrowLastWin32Exception_AssertFalse();
				return SB.ToString();
			}

			// <DllImport(UOM.Win32.WINDLL_SHLWAPI, SetLastError:=True, CharSet:=CharSet.Auto, ExactSpelling:=False, CallingConvention:=CallingConvention.Winapi)>
			// Friend Function PathCchRemoveFileSpec(<MarshalAs(UnmanagedType.LPTStr)> ByVal pszPath As String,
			// cchPath As Integer) As IntPtr
			// End Function





			[DllImport(core.WINDLL_SHLWAPI, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
			internal static extern bool PathIsNetworkPath(
				[In, MarshalAs(UnmanagedType.LPTStr)] string Path);

			[DllImport(core.WINDLL_SHLWAPI, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
			internal static extern bool PathIsHTMLFile(
				[In, MarshalAs(UnmanagedType.LPTStr)] string Path);

			/// <summary>The return from function is : 1
			/// The contents of String 1:  C:\path1\one
			/// The contents of String 2:  C:\path2\two
			/// These both have the same root part
			/// 
			/// The return from function is : 0
			/// The contents of String 1:  C:\path1\one
			/// The contents of String 3:  E:\acme\three
			/// These do not have the same root part</summary>
			[DllImport(core.WINDLL_SHLWAPI, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
			internal static extern bool PathIsSameRoot(
				[In, MarshalAs(UnmanagedType.LPTStr)] string Path1,
				[In, MarshalAs(UnmanagedType.LPTStr)] string Path2);

			/// <summary>The contents of String 1: http:'www.microsoft.com/software/index.html
			/// The return value from the function is 1 = TRUE
			/// The contents of String 2: http:'www.microsoft.com
			/// The return value from the function is 1 = TRUE
			/// The contents of String 3: microsoft.com
			/// The return value from the function is 0 = FALSE</summary>
			/// <returns></returns>
			[DllImport(core.WINDLL_SHLWAPI, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
			internal static extern bool PathIsURL([MarshalAs(UnmanagedType.LPTStr)] string Path1);
			[DllImport(core.WINDLL_SHLWAPI, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
			internal static extern bool PathIsDirectory([MarshalAs(UnmanagedType.LPTStr)] string pszPath);

			/// <summary>Creates a relative path from one file or folder to another.</summary>
			/// <param name="pszPath">A pointer to a string that receives the relative path. This buffer is assumed to be at least MAX_PATH characters in size.</param>
			/// <param name="pszFrom">A pointer to a null-terminated string of maximum length MAX_PATH that contains the path that defines the start of the relative path.</param>
			/// <param name="dwAttrFrom">The file attributes of pszFrom. If this value contains FILE_ATTRIBUTE_DIRECTORY, pszFrom is assumed to be a directory; otherwise, pszFrom is assumed to be a file.</param>
			/// <param name="pszTo">A pointer to a null-terminated string of maximum length MAX_PATH that contains the path that defines the endpoint of the relative path.</param>
			/// <param name="dwAttrTo">The file attributes of pszTo. If this value contains FILE_ATTRIBUTE_DIRECTORY, pszTo is assumed to be directory; otherwise, pszTo is assumed to be a file.</param>
			[DllImport(core.WINDLL_SHLWAPI, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
			private static extern bool PathRelativePathTo(
				[In, Out, MarshalAs(UnmanagedType.LPTStr)] StringBuilder pszPath,
				[In, MarshalAs(UnmanagedType.LPTStr)] string pszFrom,
				[In] FileAttributes dwAttrFrom,
				[In, MarshalAs(UnmanagedType.LPTStr)] string pszTo,
				[In] FileAttributes dwAttrTo);


			internal static string GetRelativePathTo(string PathFrom, FileAttributes dwAttrFrom, string PathTo, FileAttributes dwAttrTo)
			{
				StringBuilder SB = new(WinAPI.IO.MAX_PATH + 100);
				PathRelativePathTo(SB, PathFrom, dwAttrFrom, PathTo, dwAttrTo).e_ThrowLastWin32Exception_AssertFalse();
				return SB.ToString();
			}


			#region PathIsSlow
			[DllImport(core.WINDLL_SHLWAPI, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
			internal static extern bool PathIsSlow([MarshalAs(UnmanagedType.LPTStr)] string pszFile, [MarshalAs(UnmanagedType.LPTStr)] string pszIconPath);

			internal static bool PathIsSlow([MarshalAs(UnmanagedType.LPTStr)] string pszFile)
			{
				return PathIsSlow(pszFile, "-1");
			}
			#endregion


			#region StrFromTimeInterval
			/// <summary>Converts a time interval, specified in milliseconds, to a string.</summary>
			/// <param name="pszOut">A pointer to a character buffer that receives the converted string.</param>
			/// <param name="cchMax">The size of pszOut, in characters. If cchMax is set to zero, StrFromTimeInterval will return the minimum size of the character buffer needed to hold the converted string. In this case, pszOut will not contain the converted string.</param>
			/// <param name="dwTimeMS">The time interval, in milliseconds.</param>
			/// <param name="Digits">The maximum number of significant digits to be represented in pszOut.</param>
			[DllImport(core.WINDLL_SHLWAPI, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
			private static extern int StrFromTimeInterval(
				[In, Out, MarshalAs(UnmanagedType.LPTStr)] StringBuilder? pszOut,
				[In] int cchMax,
				[In] int dwTimeMS,
				[In] int Digits);

			/// <summary>Converts a time interval, specified in milliseconds, to a string.</summary>
			/// <param name="dwTimeMS">The time interval, in milliseconds.</param>
			internal static string StrFromTimeInterval(int dwTimeMS, int Digits = 3)
			{
				// dwTimeMS	digits	pszOut 
				// 34000		3		34 sec 
				// 34000		2		34 sec 
				// 34000		1		30 sec 
				// 74000		3		1 min 14 sec 
				// 74000		2		1 min 10 sec 
				// 74000		1		1 min 

				int iBuffSize = StrFromTimeInterval(null, 0, dwTimeMS, Digits);
				if (iBuffSize > 0)
				{
					var sbBuffer = new StringBuilder(iBuffSize + 1);
					int iRet = StrFromTimeInterval(sbBuffer, sbBuffer.Capacity, dwTimeMS, Digits);
					if (iRet > 0) return sbBuffer.ToString().Trim();
				}
				return "";
			}
			#endregion


			[DllImport(core.WINDLL_SHELL, SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)]
			internal static extern int RestartDialog(IntPtr hParent, [MarshalAs(UnmanagedType.LPWStr)] string pszPromp, int dwFlags);

			#endregion

			// <DllImport(UOM.Win32.WINDLL_SHELL, _
			// SetLastError:=True, _
			// CharSet:=CharSet.Auto, _
			// ExactSpelling:=False, _
			// CallingConvention:=CallingConvention.Winapi)> _
			// Friend Overloads shared Function SHGetDesktopFolder(ByRef ppshf As UOM.Shell.Interfaces.IShellFolder) As Integer
			// End Function
			// Friend Overloads shared Function SHGetDesktopFolder() As UOM.Shell.Interfaces.IShellFolder
			// Dim SH As UOM.Shell.Interfaces.IShellFolder
			// Call SHGetDesktopFolder(SH)
			// Return SH
			// End Function



		}


	}
	#endregion

}
