/// <summary> /// Implementation of <see cref="T:Waffle.Windows.AuthProvider.IWindowsAuthProvider.LogonDomainUserEx" />. /// </summary> public IWindowsIdentity LogonDomainUserEx( string username, string domain, string password, Advapi32.LogonType logonType, Advapi32.LogonProvider logonProvider) { IntPtr hToken = IntPtr.Zero; try { if (!Advapi32.LogonUser(username, domain, password, (int)logonType, (int)logonProvider, out hToken)) { throw new Win32Exception(Marshal.GetLastWin32Error()); } return(new WindowsIdentityImpl(new WindowsIdentity(hToken))); } finally { if (hToken != null) { Kernel32.CloseHandle(hToken); hToken = IntPtr.Zero; } } }
/// <summary> /// Allows you to get the user token from a user logon /// </summary> /// <param name="username">The username</param> /// <param name="password">The password to login</param> /// <param name="logonTyp">The logon type</param> /// <returns>A <see cref="TokenHelper"/> or null if no valid sessions was found.</returns> public static SafeAccessTokenHandle GetUserTokenFromLogon(string username, SecureString password, Advapi32.LogonType logonTyp) { IntPtr passwordHandle = Marshal.SecureStringToGlobalAllocUnicode(password); try { if (!Advapi32.LogonUser(DaemonMasterUtils.GetLoginFromUsername(username), DaemonMasterUtils.GetDomainFromUsername(username), passwordHandle, logonTyp, Advapi32.LogonProvider.Default, out SafeAccessTokenHandle token)) { throw new Win32Exception(Marshal.GetLastWin32Error()); } return(token); } finally { Marshal.ZeroFreeGlobalAllocUnicode(passwordHandle); } }