private void AcquireCredentials()
        {
            this.continueProcessing = true;
            int num = MySqlWindowsAuthenticationPlugin.AcquireCredentialsHandle(null, "Negotiate", 2, IntPtr.Zero, IntPtr.Zero, 0, IntPtr.Zero, ref this.outboundCredentials, ref this.lifetime);

            if (num != 0)
            {
                throw new MySqlException("AcquireCredentialsHandle failed with errorcode" + num);
            }
        }
        private void InitializeClient(out byte[] clientBlob, byte[] serverBlob, out bool continueProcessing)
        {
            clientBlob         = null;
            continueProcessing = true;
            SecBufferDesc    secBufferDesc    = new SecBufferDesc(12288);
            SECURITY_INTEGER sECURITY_INTEGER = new SECURITY_INTEGER(0);
            int num = -1;

            try
            {
                uint num2 = 0u;
                if (serverBlob == null)
                {
                    num = MySqlWindowsAuthenticationPlugin.InitializeSecurityContext(ref this.outboundCredentials, IntPtr.Zero, this.targetName, 0, 0, 0, IntPtr.Zero, 0, out this.clientContext, out secBufferDesc, out num2, out sECURITY_INTEGER);
                }
                else
                {
                    SecBufferDesc secBufferDesc2 = new SecBufferDesc(serverBlob);
                    try
                    {
                        num = MySqlWindowsAuthenticationPlugin.InitializeSecurityContext(ref this.outboundCredentials, ref this.clientContext, this.targetName, 0, 0, 0, ref secBufferDesc2, 0, out this.clientContext, out secBufferDesc, out num2, out sECURITY_INTEGER);
                    }
                    finally
                    {
                        secBufferDesc2.Dispose();
                    }
                }
                if (4115 == num || 4116 == num)
                {
                    MySqlWindowsAuthenticationPlugin.CompleteAuthToken(ref this.clientContext, ref secBufferDesc);
                }
                if (num != 0 && num != 590610 && num != 4115 && num != 4116)
                {
                    throw new MySqlException("InitializeSecurityContext() failed  with errorcode " + num);
                }
                clientBlob = secBufferDesc.GetSecBufferByteArray();
            }
            finally
            {
                secBufferDesc.Dispose();
            }
            continueProcessing = (num != 0 && num != 4115);
        }
 protected override byte[] MoreData(byte[] moreData)
 {
     if (moreData == null)
     {
         this.AcquireCredentials();
     }
     byte[] array = null;
     if (this.continueProcessing)
     {
         this.InitializeClient(out array, moreData, out this.continueProcessing);
     }
     if (!this.continueProcessing || array == null || array.Length == 0)
     {
         MySqlWindowsAuthenticationPlugin.FreeCredentialsHandle(ref this.outboundCredentials);
         MySqlWindowsAuthenticationPlugin.DeleteSecurityContext(ref this.clientContext);
         return(null);
     }
     return(array);
 }