GeezerVisonThe World Wide Web, restored to 800 pixels of glory. |
| Home|About|Gaming cabinet|Archives|How it works|Starter sites |
GeezerVison is showing github.com — sqlSchemaCompare/impersonate.cs at master · tempjs/sqlSchemaCompare Expand file tree/ Copy pathimpersonate.csMore file actions 122 lines (95 loc) · 4.24 KB / Copy pathimpersonate.csFile metadata and controls122 lines (95 loc) · 4.24 KB 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 using Microsoft.Win32.SafeHandles; using System; using System.ComponentModel; using System.IO; using System.Linq; using System.Runtime.ConstrainedExecution; using System.Runtime.InteropServices; using System.Security; using System.Security.Permissions; using System.Security.Principal; namespace SqlDbSchemaCompare { internal class ImpersonateIt : IDisposable { public const int LOGON32_PROVIDER_DEFAULT = 0; public const int LOGON32_LOGON_INTERACTIVE = 2; public const int LOGON32_LOGON_NETWORK = 3; public const int LOGON32_LOGON_BATCH = 4; public const int LOGON32_LOGON_SERVICE = 5; public const int LOGON32_LOGON_UNLOCK = 7; public const int LOGON32_LOGON_NETWORK_CLEARTEXT = 8; public const int LOGON32_LOGON_NEW_CREDENTIALS = 9; [DllImport("advapi32.dll", CharSet = CharSet.Unicode, SetLastError = true)] public static extern bool LogonUser(string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, out SafeTokenHandle phToken); [DllImport("kernel32.dll", CharSet = CharSet.Auto)] public static extern bool CloseHandle(IntPtr handle); WindowsIdentity windowsIdentity; WindowsImpersonationContext impersonationContext; SafeTokenHandle identityToken; [PermissionSet(SecurityAction.Demand, Name = "FullTrust")] internal void Impersonate(string userName, string password, string domain="FM") { if (string.IsNullOrWhiteSpace(userName)) throw new ArgumentNullException("ÜserName is required to impersonate"); if (string.IsNullOrWhiteSpace(password)) throw new ArgumentNullException("User's Password is required to impersonate"); Console.WriteLine("ImpersonateIt Executor utility is starting..."); try { string lpszUsername = userName; string lpszDomain = "FM"; if (userName.ToString().Contains("\\")) { var userNameWithDomain = userName.Split('\\'); lpszDomain = userNameWithDomain.First(); lpszUsername = userNameWithDomain.Last(); } string lpszPassword = password; //int result = 3600; Console.WriteLine("calling LogonUser."); bool flag = LogonUser(lpszUsername, lpszDomain, lpszPassword, 8, 0, out identityToken); // Console.WriteLine("LogonUser called succesfully and retuned value is " + flag); if (!flag) { int lastWin32Error = Marshal.GetLastWin32Error(); Console.WriteLine("LogonUser failed with error code : {0}", lastWin32Error); throw new Win32Exception(lastWin32Error); } Console.WriteLine("Value of Windows NT token: " + identityToken); Console.WriteLine("Before impersonation: " + WindowsIdentity.GetCurrent().Name); windowsIdentity = new WindowsIdentity(identityToken.DangerousGetHandle()); impersonationContext = windowsIdentity.Impersonate(); Console.WriteLine("Using " + WindowsIdentity.GetCurrent().Name + " Identity"); } catch (Exception ex) { Console.WriteLine("Exception occurred. " + ex.Message); throw ex; } } public void Dispose() { Console.WriteLine("Closeing Impersonation context"); impersonationContext?.Dispose(); windowsIdentity?.Dispose(); identityToken.Dispose(); } } public sealed class SafeTokenHandle : SafeHandleZeroOrMinusOneIsInvalid { private SafeTokenHandle() : base(ownsHandle: true) { } [DllImport("kernel32.dll")] [SuppressUnmanagedCodeSecurity] [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool CloseHandle(IntPtr handle); protected override bool ReleaseHandle() { return CloseHandle(handle); } } } |
| You are visitor 01402520 — GeezerVison does not store the pages you look up. Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required. |