File: WindowsErrorReporting.cs
Web Access
Project: src\src\LanguageServer\Microsoft.CodeAnalysis.LanguageServer\Microsoft.CodeAnalysis.LanguageServer.csproj (Microsoft.CodeAnalysis.LanguageServer)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
 
using System.Diagnostics;
using System.Runtime.InteropServices;
 
internal class WindowsErrorReporting
{
    internal static void SetErrorModeOnWindows()
    {
        if (!OperatingSystem.IsWindows())
        {
            return;
        }
 
        SetErrorMode(ErrorModes.SYSTEM_DEFAULT);
 
        // There have been reports that SetErrorMode wasn't working correctly, so double
        // check in Debug builds that it actually set
        Debug.Assert(GetErrorMode() == (uint)ErrorModes.SYSTEM_DEFAULT);
    }
 
    [DllImport("kernel32.dll")]
    private static extern ErrorModes SetErrorMode(ErrorModes uMode);
 
    [DllImport("kernel32.dll")]
    private static extern uint GetErrorMode();
 
    [Flags]
    private enum ErrorModes : uint
    {
        SYSTEM_DEFAULT = 0x0,
        SEM_FAILCRITICALERRORS = 0x0001,
        SEM_NOGPFAULTERRORBOX = 0x0002,
        SEM_NOALIGNMENTFAULTEXCEPT = 0x0004,
        SEM_NOOPENFILEERRORBOX = 0x8000
    }
}