Exemplo n.º 1
0
        /// <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;
                }
            }
        }
Exemplo n.º 2
0
        /// <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);
            }
        }