none
[DllImport("advapi32.dll")] nedir RRS feed

  • Genel Tartışma

  • merhaba çalıştığım proje local intranet ortamında web üzerinden çalışıyor 192.168.xx.xx gibi

    projenin bir cs dosyasında şu kodları gördüm yetkilendirmeyle ilgili bir şey ama tam çözemedim

    buradaki import kısımları nedir ve mantık olarak nasıl çalışır 

    public class ImpersonateManager
        {
            static string _YETKILI_KULLANICI_ADI = EGUtil.Decrypt(ConfigurationManager.AppSettings["DOCUMENT_CREATOR_NAME"]);
            static string _YETKILI_KULLANICI_SIFRE = EGUtil.Decrypt(ConfigurationManager.AppSettings["DOCUMENT_CREATOR_PWD"]);
            static int LOGON32_LOGON_INTERACTIVE = 2;
            static int LOGON32_PROVIDER_DEFAULT = 0;
    
            [DllImport("advapi32.dll")]
            public static extern int LogonUserA(String lpszUserName,
                String lpszDomain,
                String lpszPassword,
                int dwLogonType,
                int dwLogonProvider,
                ref IntPtr phToken);
    
            [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
            public static extern int DuplicateToken(IntPtr hToken,
                int impersonationLevel,
                ref IntPtr hNewToken);
    
            [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
            public static extern bool RevertToSelf();
    
            [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
            public static extern bool CloseHandle(IntPtr handle);
    
            static WindowsImpersonationContext impersonationContext;
    
            public static bool Impersonate()
            {
                return true;
                return impersonateValidUser(_YETKILI_KULLANICI_ADI, _YETKILI_KULLANICI_SIFRE);
            }
    
            private static bool impersonateValidUser(String userName, String password)
            {
                WindowsIdentity tempWindowsIdentity;
                IntPtr token = IntPtr.Zero;
                IntPtr tokenDuplicate = IntPtr.Zero;
                string domain = ".";
    
                if (RevertToSelf())
                {
                    if (LogonUserA(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();
                            if (impersonationContext != null)
                            {
                                CloseHandle(token);
                                CloseHandle(tokenDuplicate);
                                return true;
                            }
                        }
                    }
                }
                if (token != IntPtr.Zero)
                    CloseHandle(token);
                if (tokenDuplicate != IntPtr.Zero)
                    CloseHandle(tokenDuplicate);
                return false;
            }
    
            public static void undoImpersonation()
            {
                return;
                impersonationContext.Undo();
            }
        }

    6 Ağustos 2013 Salı 12:53