🙂 İNSANLARIN EN HAYIRLISI INSANLARA FAYDALI OLANDIR 🙂

Ramazan HABER / C# RMOS / paylasima izin verilmemis klasöre kullanıcı adı ve sifre ile girip dosya kopyalama

1-) C# RMOS - paylasima izin verilmemis klasöre kullanıcı adı ve sifre ile girip dosya kopyalama

BİRİNCİ YOL

 

CMD YE ->

 

echo %userdomain%

 

 echo %username%

 

 

1. -> WrappedImpersonationContext.cs

using System;

using System.ComponentModel;

using System.Diagnostics;

using System.Runtime.InteropServices;

using System.Security.Permissions;

using System.Security.Principal;

 

namespace specialFileCopy

{

    public sealed class WrappedImpersonationContext

    {

        public enum LogonType : int

        {

            Interactive = 2,

            Network = 3,

            Batch = 4,

            Service = 5,

            Unlock = 7,

            NetworkClearText = 8,

            NewCredentials = 9

        }

 

        public enum LogonProvider : int

        {

            Default = 0,  // LOGON32_PROVIDER_DEFAULT

            WinNT35 = 1,

            WinNT40 = 2,  // Use the NTLM logon provider.

            WinNT50 = 3   // Use the negotiate logon provider.

        }

 

        [DllImport("advapi32.dll", EntryPoint = "LogonUserW", SetLastError = true, CharSet = CharSet.Unicode)]

        public static extern bool LogonUser(String lpszUsername, String lpszDomain,

            String lpszPassword, LogonType dwLogonType, LogonProvider dwLogonProvider, ref IntPtr phToken);

 

        [DllImport("kernel32.dll")]

        public extern static bool CloseHandle(IntPtr handle);

 

        private string _domain, _password, _username;

        private IntPtr _token;

        private WindowsImpersonationContext _context;

 

        private bool IsInContext

        {

            get { return _context != null; }

        }

 

        public WrappedImpersonationContext(string domain, string username, string password)

        {

            _domain = String.IsNullOrEmpty(domain) ? "." : domain;

            _username = username;

            _password = password;

        }

 

        // Changes the Windows identity of this thread. Make sure to always call Leave() at the end.

        [PermissionSetAttribute(SecurityAction.Demand, Name = "FullTrust")]

        public void Enter()

        {

            if (IsInContext)

                return;

 

            _token = IntPtr.Zero;

            bool logonSuccessfull = LogonUser(_username, _domain, _password, LogonType.NewCredentials, LogonProvider.WinNT50, ref _token);

            if (!logonSuccessfull)

            {

                throw new Win32Exception(Marshal.GetLastWin32Error());

            }

            WindowsIdentity identity = new WindowsIdentity(_token);

            _context = identity.Impersonate();

 

            Debug.WriteLine(WindowsIdentity.GetCurrent().Name);

        }

 

        [PermissionSetAttribute(SecurityAction.Demand, Name = "FullTrust")]

        public void Leave()

        {

            if (!IsInContext)

                return;

 

            _context.Undo();

 

            if (_token != IntPtr.Zero)

            {

                CloseHandle(_token);

            }

            _context = null;

        }

    }

}

 

2. -> Form1.cs (KULLANIMI)

 

using System;

using System.IO;

using System.Windows.Forms;

 

namespace specialFileCopy

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        WrappedImpersonationContext impersonationContext;

        private void btnKopyala_Click(object sender, EventArgs e)

        {

            try

            {

                string user = txtUser.Text;

                string domain = txtDomain.Text;

                string password = txtSifre.Text;

                impersonationContext = new WrappedImpersonationContext(domain, user, password);

                impersonationContext.Enter();

                if (File.Exists(txtNereye.Text))

                {

                    MessageBox.Show("Dosya Zaten var");

                }

                else

                {

                    File.Copy(txtNeyi.Text, txtNereye.Text);

                    MessageBox.Show("Dosya Gönderildi");

                }

            }

            catch (Exception ex)

            {

                MessageBox.Show("HATA " + ex.Message);

            }

            finally

            {

                impersonationContext.Leave();

            }

        }

    }

}

 

 

 

2-) paylasima izin verilmemis klasöre kullanıcı adı ve sifre ile girip dosya kopyalama

İKİNCİ YOL bunu kullanma ama dursun

 

-------------------KULLANIMI--------------------

private void button1_Click(object sender, EventArgs e)

        {

            try

            {

                using (new Impersonator(txtUser.Text, txtDomain.Text, txtPasswrod.Text))

                {

                    File.Copy(textBox1.Text, textBox2.Text);

                }

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.Message);

            }

 

        }

 

 

---------------Impersonator.cs----------------

 

using System;

using System.ComponentModel;

using System.Runtime.InteropServices;

using System.Security.Principal;

 

namespace WindowsFormsApplication4

{

    public class Impersonator :

          IDisposable

    {

        #region Public methods.

        // ------------------------------------------------------------------

 

        /// <summary>

        /// Constructor. Starts the impersonation with the given credentials.

        /// Please note that the account that instantiates the Impersonator class

        /// needs to have the 'Act as part of operating system' privilege set.

        /// </summary>

        /// <param name="userName">The name of the user to act as.</param>

        /// <param name="domainName">The domain name of the user to act as.</param>

        /// <param name="password">The password of the user to act as.</param>

        public Impersonator(

            string userName,

            string domainName,

            string password)

        {

            ImpersonateValidUser(userName, domainName, password);

        }

 

        // ------------------------------------------------------------------

        #endregion

 

        #region IDisposable member.

        // ------------------------------------------------------------------

 

        public void Dispose()

        {

            UndoImpersonation();

        }

 

        // ------------------------------------------------------------------

        #endregion

 

        #region P/Invoke.

        // ------------------------------------------------------------------

 

        [DllImport("advapi32.dll", SetLastError = true)]

        private static extern int LogonUser(

            string lpszUserName,

            string lpszDomain,

            string lpszPassword,

            int dwLogonType,

            int dwLogonProvider,

            ref IntPtr phToken);

 

        [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]

        private static extern int DuplicateToken(

            IntPtr hToken,

            int impersonationLevel,

            ref IntPtr hNewToken);

 

        [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]

        private static extern bool RevertToSelf();

 

        [DllImport("kernel32.dll", CharSet = CharSet.Auto)]

        private static extern bool CloseHandle(

            IntPtr handle);

 

        private const int LOGON32_LOGON_INTERACTIVE = 2;

        private const int LOGON32_PROVIDER_DEFAULT = 0;

 

        // ------------------------------------------------------------------

        #endregion

 

        #region Private member.

        // ------------------------------------------------------------------

 

        /// <summary>

        /// Does the actual impersonation.

        /// </summary>

        /// <param name="userName">The name of the user to act as.</param>

        /// <param name="domainName">The domain name of the user to act as.</param>

        /// <param name="password">The password of the user to act as.</param>

        private void ImpersonateValidUser(

            string userName,

            string domain,

            string password)

        {

            WindowsIdentity tempWindowsIdentity = null;

            IntPtr token = IntPtr.Zero;

            IntPtr tokenDuplicate = IntPtr.Zero;

 

            try

            {

                if (RevertToSelf())

                {

                    if (LogonUser(

                        userName,

                        domain,

                        password,

                        LOGON32_LOGON_INTERACTIVE,

                        LOGON32_PROVIDER_DEFAULT,

                        ref token) != 0)

                    {

                        if (DuplicateToken(token, 2, ref tokenDuplicate) != 0)

                        {

                            tempWindowsIdentity = new WindowsIdentity(tokenDuplicate);

                            impersonationContext = tempWindowsIdentity.Impersonate();

                        }

                        else

                        {

                            throw new Win32Exception(Marshal.GetLastWin32Error());

                        }

                    }

                    else

                    {

                        throw new Win32Exception(Marshal.GetLastWin32Error());

                    }

                }

                else

                {

                    throw new Win32Exception(Marshal.GetLastWin32Error());

                }

            }

            finally

            {

                if (token != IntPtr.Zero)

                {

                    CloseHandle(token);

                }

                if (tokenDuplicate != IntPtr.Zero)

                {

                    CloseHandle(tokenDuplicate);

                }

            }

        }

 

        /// <summary>

        /// Reverts the impersonation.

        /// </summary>

        private void UndoImpersonation()

        {

            if (impersonationContext != null)

            {

                impersonationContext.Undo();

            }

        }

 

        private WindowsImpersonationContext impersonationContext = null;

 

        // ------------------------------------------------------------------

        #endregion

    }

 

    /////////////////////////////////////////////////////////////////////////

}

 

 

 

 

 

 

/////////////////////////////////Sadece Biraz Daha Düzeltilmiş/////////////////////////////////////////

 

AÇIKLAMA : klasöre girerken kullanıcı adı ve şifre sorması gerekir yoksa olmaz.

 

 

 

private void button1_Click(object sender, EventArgs e)

        {

            string user = txtUser.Text;

            string domain = txtDomain.Text;

            string password = txtSifre.Text;

            try

            {

                using (new Impersonator(user, domain, password))

                {

                    File.Copy(txtNeyi.Text, txtNereye.Text);

                }

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.Message);

            }

 

        }

 2021 Ocak 18 Pazartesi
 405