diff --git a/DiscImageChef.CommonTypes.csproj b/DiscImageChef.CommonTypes.csproj index 97ceb8b..25ca881 100644 --- a/DiscImageChef.CommonTypes.csproj +++ b/DiscImageChef.CommonTypes.csproj @@ -93,6 +93,7 @@ + diff --git a/Interop/DetectOS.cs b/Interop/DetectOS.cs index 004e969..1f8071f 100644 --- a/Interop/DetectOS.cs +++ b/Interop/DetectOS.cs @@ -40,6 +40,7 @@ using System; using System.Diagnostics; using System.IO; using System.Runtime.InteropServices; +using System.Security.Principal; namespace DiscImageChef.CommonTypes.Interop { @@ -57,6 +58,11 @@ namespace DiscImageChef.CommonTypes.Interop /// public static readonly bool Is32Bit = IntPtr.Size == 4; + public static bool IsWindows => + GetRealPlatformID() == PlatformID.Win32NT || GetRealPlatformID() == PlatformID.Win32S || + GetRealPlatformID() == PlatformID.Win32Windows || GetRealPlatformID() == PlatformID.WinCE || + GetRealPlatformID() == PlatformID.WindowsPhone || GetRealPlatformID() == PlatformID.Xbox; + [DllImport("libc", SetLastError = true)] static extern int uname(out utsname name); @@ -270,6 +276,28 @@ namespace DiscImageChef.CommonTypes.Interop } } + public static bool IsAdmin + { + get + { + if(!IsWindows) return Environment.UserName == "root"; + + bool isAdmin; + WindowsIdentity user = null; + try + { + user = WindowsIdentity.GetCurrent(); + WindowsPrincipal principal = new WindowsPrincipal(user); + isAdmin = principal.IsInRole(WindowsBuiltInRole.Administrator); + } + catch(UnauthorizedAccessException ex) { isAdmin = false; } + catch(Exception ex) { isAdmin = false; } + finally { user?.Dispose(); } + + return isAdmin; + } + } + /// /// POSIX uname structure, size from OSX, big enough to handle extra fields /// @@ -302,10 +330,5 @@ namespace DiscImageChef.CommonTypes.Interop [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] public string machine; } - - public static bool IsWindows => - GetRealPlatformID() == PlatformID.Win32NT || GetRealPlatformID() == PlatformID.Win32S || - GetRealPlatformID() == PlatformID.Win32Windows || GetRealPlatformID() == PlatformID.WinCE || - GetRealPlatformID() == PlatformID.WindowsPhone || GetRealPlatformID() == PlatformID.Xbox; } } \ No newline at end of file