From 2cf257571cf102f8071a8e483bec4c024b8d99b3 Mon Sep 17 00:00:00 2001 From: Meivyn <793322+Meivyn@users.noreply.github.com> Date: Fri, 19 May 2023 13:08:15 -0400 Subject: [PATCH] Cleanup of console code --- IPA.Loader/Logging/ConsoleWindow.cs | 77 +++++++++++------------------ 1 file changed, 29 insertions(+), 48 deletions(-) diff --git a/IPA.Loader/Logging/ConsoleWindow.cs b/IPA.Loader/Logging/ConsoleWindow.cs index 89f07fb2..5f72e6dc 100644 --- a/IPA.Loader/Logging/ConsoleWindow.cs +++ b/IPA.Loader/Logging/ConsoleWindow.cs @@ -26,10 +26,10 @@ namespace IPA.Logging { bool consoleAttached = true; if (alwaysCreateNewConsole - || (AttachConsole(AttachParent) == 0 + || (AttachConsole(AttachParent) && Marshal.GetLastWin32Error() != ErrorAccessDenied)) { - consoleAttached = AllocConsole() != 0; + consoleAttached = AllocConsole(); } if (consoleAttached) @@ -39,7 +39,7 @@ namespace IPA.Logging } } - public static void InitializeStreams() + private static void InitializeStreams() { InitializeOutStream(); InitializeInStream(); @@ -62,7 +62,7 @@ namespace IPA.Logging if (!SetConsoleMode(handle, mode)) { UseVTEscapes = false; - Console.Error.WriteLine("Could not enable VT100 escape code processing (maybe you're running an old Windows?): " + + Console.Error.WriteLine("Could not enable VT100 escape code processing (maybe you're running an old Windows?): " + new Win32Exception(Marshal.GetLastWin32Error()).Message); } } @@ -87,18 +87,11 @@ namespace IPA.Logging private static FileStream CreateFileStream(string name, uint win32DesiredAccess, uint win32ShareMode, FileAccess dotNetFileAccess, out SafeFileHandle handle) { - var file = new SafeFileHandle(CreateFileW(name, win32DesiredAccess, win32ShareMode, IntPtr.Zero, OpenExisting, FileAttributeNormal, IntPtr.Zero), true); + var file = new SafeFileHandle(CreateFile(name, win32DesiredAccess, win32ShareMode, IntPtr.Zero, OpenExisting, FileAttributeNormal, IntPtr.Zero), true); if (!file.IsInvalid) { handle = file; -#if NET4 var fs = new FileStream(file, dotNetFileAccess); -#elif NET3 -#pragma warning disable CS0618 - // this is marked obsolete, and shouldn't need to be used, but the constructor used in .NET 4 doesn't exist in Unity's mscorlib.dll - var fs = new FileStream(file.DangerousGetHandle(), dotNetFileAccess); -#pragma warning restore -#endif return fs; } @@ -106,43 +99,31 @@ namespace IPA.Logging return null; } -#region Win API Functions and Constants - [DllImport("kernel32.dll", - EntryPoint = "AllocConsole", - SetLastError = true, - CharSet = CharSet.Auto, - CallingConvention = CallingConvention.StdCall)] - private static extern int AllocConsole(); - - [DllImport("kernel32.dll", - EntryPoint = "AttachConsole", - SetLastError = true, - CharSet = CharSet.Auto, - CallingConvention = CallingConvention.StdCall)] - private static extern uint AttachConsole(uint dwProcessId); - - [DllImport("kernel32.dll", - EntryPoint = "CreateFileW", - SetLastError = true, - CharSet = CharSet.Unicode, - CallingConvention = CallingConvention.StdCall)] - private static extern IntPtr CreateFileW( - string lpFileName, - uint dwDesiredAccess, - uint dwShareMode, - IntPtr lpSecurityAttributes, - uint dwCreationDisposition, - uint dwFlagsAndAttributes, - IntPtr hTemplateFile - ); - - [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] + #region Win API Functions and Constants + + [DllImport("kernel32.dll")] + [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] + private static extern bool AllocConsole(); + + [DllImport("kernel32.dll")] + [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] + private static extern bool AttachConsole(int dwProcessId); + + [DllImport("kernel32.dll", CharSet = CharSet.Unicode)] + [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] + private static extern IntPtr CreateFile(string lpFileName, uint dwDesiredAccess, uint dwShareMode, + IntPtr lpSecurityAttributes, uint dwCreationDisposition, uint dwFlagsAndAttributes, IntPtr hTemplateFile); + + [DllImport("kernel32.dll", SetLastError = true)] + [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] private static extern bool GetConsoleMode(IntPtr hConsoleHandle, out uint lpMode); - [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] + [DllImport("kernel32.dll", SetLastError = true)] + [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] private static extern bool SetConsoleMode(IntPtr hConsoleHandle, uint dwMode); - [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] + [DllImport("kernel32.dll")] + [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] private static extern IntPtr GetStdHandle(int nStdHandle); private const uint EnableVTProcessing = 0x0004; @@ -154,9 +135,9 @@ namespace IPA.Logging private const uint OpenExisting = 0x00000003; private const uint FileAttributeNormal = 0x80; private const uint ErrorAccessDenied = 5; - - private const uint AttachParent = 0xFFFFFFFF; -#endregion + private const int AttachParent = -1; + + #endregion } } \ No newline at end of file