예제 #1
0
        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);
                    }
                }
            });
        }