public void Main_authenticate() { FreeRdpGlue.Main(new MainOptions { Hostname = RdpTargetHostname, Username = RdpTargetUsername, Password = null, EntryPoints = new EntryPoints { OnContextCreated = (IntPtr frgContext) => { _frgContext = frgContext; }, OnAuthenticate = (IntPtr usernameUtf8, IntPtr passwordUtf8, IntPtr domainUtf8) => { var username = MarshalHelper.ReadUtf8IntPtr(usernameUtf8); var usernameEntered = false; var password = MarshalHelper.ReadUtf8IntPtr(passwordUtf8); var passwordEntered = false; var domain = MarshalHelper.ReadUtf8IntPtr(domainUtf8); var domainEntered = false; if (username == null) { username = RdpTargetUsername; usernameEntered = true; } if (password == null) { password = RdpTargetPassword; passwordEntered = true; } if (domain == null) { domain = ""; domainEntered = true; } return(new FrgOnAuthenticateResult { UsernameUtf8 = usernameEntered ? MarshalHelper.AllocUtf8(username) : usernameUtf8, PasswordUtf8 = passwordEntered ? MarshalHelper.AllocUtf8(password) : passwordUtf8, DomainUtf8 = domainEntered ? MarshalHelper.AllocUtf8(domain) : domainUtf8, PasswordEntered = usernameEntered || passwordEntered || domainEntered, }); }, OnVerifyCertificate = (IntPtr x509CertBytes, UIntPtr x509CertBytesLength, IntPtr hostnameUtf8, ushort port, uint flags) => { FreeRdpGlue.Disconnect(_frgContext); return(FrgVerifyCertResult.TemporarilyTrusted); } } }); }