markus / KCOM / VistaSecurity.cs @ 53f99751
이력 | 보기 | 이력해설 | 다운로드 (2.03 KB)
1 | 74abcf6f | taeseongkim | using System; |
---|---|---|---|
2 | using System.Collections.Generic; |
||
3 | using System.Text; |
||
4 | using System.Runtime.InteropServices; |
||
5 | using System.Diagnostics; |
||
6 | using System.Windows.Forms; |
||
7 | using System.Security.Principal; |
||
8 | |||
9 | namespace KCOM |
||
10 | { |
||
11 | public static class VistaSecurity |
||
12 | { |
||
13 | [DllImport("user32")] |
||
14 | public static extern UInt32 SendMessage(IntPtr hWnd, UInt32 msg, UInt32 wParam, UInt32 lParam); |
||
15 | |||
16 | internal const int BCM_FIRST = 0x1600; |
||
17 | internal const int BCM_SETSHIELD = (BCM_FIRST + 0x000C); |
||
18 | |||
19 | static internal bool IsVistaOrHigher() |
||
20 | { |
||
21 | return Environment.OSVersion.Version.Major < 6; |
||
22 | } |
||
23 | |||
24 | /// <summary> |
||
25 | /// Checks if the process is elevated |
||
26 | /// </summary> |
||
27 | /// <returns>If is elevated</returns> |
||
28 | static internal bool IsAdmin() |
||
29 | { |
||
30 | WindowsIdentity id = WindowsIdentity.GetCurrent(); |
||
31 | WindowsPrincipal p = new WindowsPrincipal(id); |
||
32 | return p.IsInRole(WindowsBuiltInRole.Administrator); |
||
33 | } |
||
34 | |||
35 | /// <summary> |
||
36 | /// Add a shield icon to a button |
||
37 | /// </summary> |
||
38 | /// <param name="b">The button</param> |
||
39 | static internal void AddShieldToButton(Button b) |
||
40 | { |
||
41 | b.FlatStyle = FlatStyle.System; |
||
42 | SendMessage(b.Handle, BCM_SETSHIELD, 0, 0xFFFFFFFF); |
||
43 | } |
||
44 | |||
45 | /// <summary> |
||
46 | /// Restart the current process with administrator credentials |
||
47 | /// </summary> |
||
48 | internal static void RestartElevated() |
||
49 | { |
||
50 | ProcessStartInfo startInfo = new ProcessStartInfo(); |
||
51 | startInfo.UseShellExecute = true; |
||
52 | startInfo.WorkingDirectory = Environment.CurrentDirectory; |
||
53 | startInfo.FileName = Application.ExecutablePath; |
||
54 | startInfo.Verb = "runas"; |
||
55 | try |
||
56 | { |
||
57 | Process p = Process.Start(startInfo); |
||
58 | } |
||
59 | catch(System.ComponentModel.Win32Exception ex) |
||
60 | { |
||
61 | return; //If cancelled, do nothing |
||
62 | } |
||
63 | |||
64 | Application.Exit(); |
||
65 | } |
||
66 | } |
||
67 | } |