Avatar billede rasmuslh Nybegynder
24. marts 2008 - 21:04 Der er 11 kommentarer og
1 løsning

kald af dll'er

Hejsa

Jeg har overtaget ansvaret for noget C# software som jeg genrelt har fået ok styr på. Der er dog noget syntaks jeg ikke forstår. Jeg (tror) det bliver brugt til at definere en connectionsstring, men hvis der er der kan foreklare mig hvad dll'er praktisk gør ville det hjælpe meget:

der er først en række variabler der erklæres.

        private SqlConnection con;
        private string configFile;
        private const bool debug_info = false;
        private ArrayList errors = new ArrayList();
        private const int LOGON32_LOGON_BATCH = 4;
        private const int LOGON32_LOGON_INTERACTIVE = 2;
        private const int LOGON32_LOGON_NETWORK = 3;
        private const int LOGON32_LOGON_NETWORK_CLEARTEXT = 8;
        private const int LOGON32_LOGON_NEW_CREDENTIALS = 9;
        private const int LOGON32_LOGON_SERVICE = 5;
        private const int LOGON32_LOGON_UNLOCK = 7;
        private const int LOGON32_PROVIDER_DEFAULT = 0;
        private Page page;
        private StreamWriter sw;
        private const bool UseDosDTSExecution = true;



        [DllImport("kernel32.dll", SetLastError=true)]
        private static extern int CloseHandle(IntPtr hObject);

        [DllImport("advapi32.dll", SetLastError=true)]
        public static extern int ImpersonateLoggedOnUser(IntPtr hToken);
 
        [DllImport("advapi32.dll", SetLastError=true)]
        public static extern int LogonUser(string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, out IntPtr phToken);

        [DllImport("advapi32.dll", SetLastError=true)]
        private static extern int RevertToSelf();


De eksterne metoder bliver brugt i selve funktionen.

public string runXXX(string packageName, string password)
        {
            try
            {
                IntPtr ptr;
                this.con = this.DBconnect();
                if (!this.con.State.ToString().Equals("Open"))
                {
                    return this.formatErrors();
                }
                SqlDataReader reader = new SqlCommand(("select errorcode from msdb..sysdtspackagelog where name = '" + this.request("package_name") + "' ") + "and starttime >= all (select starttime from msdb..sysdtspackagelog where name='" + packageName + "')", this.con).ExecuteReader();
                while (reader.Read())
                {
                    if (reader.IsDBNull(0))
                    {
                        return "";
                    }
                }
                reader.Close();
                reader = new SqlCommand("select name, typeid from " + this.getConfigField("PARAM_TABLE") + " where job_name='" + packageName + "'", this.con).ExecuteReader();
                string str2 = "";
                while (reader.Read())
                {
                    object obj2 = str2;
                    str2 = string.Concat(new object[] { obj2, " /A ", reader["name"], ":", reader["typeid"], "=", this.request("" + reader["name"]) });
                }
                reader.Close();
                reader = new SqlCommand("select dtspassword from WEB_joblist where [name] = '" + packageName + "'", this.con).ExecuteReader();
                reader.Read();
                string str3 = reader[0].ToString();
                this.con.Close();
                string str = "dtsrun /S " + this.getConfigField("DB_SERVER") + " /E ";
                if (str3 != "")
                {
                    str = str + " /M " + str3;
                }
                str = str + " /N " + packageName + str2;
                if (LogonUser(this.getConfigField("DB_USER2"), "Fjernet", this.getConfigField("DB_PASSWORD2"), 3, 0, out ptr) > 0)
                {
                    ImpersonateLoggedOnUser(ptr);
                    string str4 = "dtsrun";
                    string str5 = " /S " + this.getConfigField("DB_SERVER") + " /E ";
                    if (str3 != "")
                    {
                        str5 = str5 + " /M " + str3;
                    }
                    str5 = str5 + " /N " + packageName + str2;
                    Process process = new Process();
                    process.StartInfo.FileName = str4;
                    process.StartInfo.Arguments = str5;
                    process.StartInfo.UseShellExecute = true;
                    process.StartInfo.CreateNoWindow = false;
                    process.StartInfo.WindowStyle =        ProcessWindowStyle.Normal;
                    process.Start();
                    RevertToSelf();
                    CloseHandle(ptr);
                }
                return "<html><head></head></html>";
            }
            catch (Exception exception)
            {
                string message = exception.Message;
            }
            return "";
        }
Avatar billede rasmuslh Nybegynder
24. marts 2008 - 21:06 #1
Det er primært dll'erne og deres formål der driller mig. Det er ikke en syntaks jeg har set før.
Avatar billede arne_v Ekspert
24. marts 2008 - 21:09 #2
DllImport attributten bruges naar du fra noget .NET kode (C# eller et andet sprog som
VB.NET) skal kalde en funktion i en Win32 DLL (typisk skrevet i C eller C++).
Avatar billede arne_v Ekspert
24. marts 2008 - 21:10 #3
Her skal man bruge noget funktionalitet fra Win32 API til at skifte identitet med.
Avatar billede arne_v Ekspert
24. marts 2008 - 21:11 #4
[DllImport("advapi32.dll", SetLastError=true)]
        public static extern int LogonUser(string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, out IntPtr phToken);

laeses som:

kald funktionen LogonUser i advapi.dll med brugernavn, domain, password, logon type og returner et token der kan bruges i de andre kald
Avatar billede rasmuslh Nybegynder
24. marts 2008 - 21:16 #5
Ok - det giver nogenlunde mening. Er der et sted man kan læser om de brugte funktionerne?
Avatar billede rasmuslh Nybegynder
24. marts 2008 - 21:18 #6
Jeg prøvede lige at google win32 dll'er - hvad er specielt for dem?
Avatar billede arne_v Ekspert
24. marts 2008 - 21:22 #7
De er alle i MSDN docs.

LogonUser kan findes online er:
  http://msdn2.microsoft.com/en-us/library/aa378184(VS.85).aspx
Avatar billede arne_v Ekspert
24. marts 2008 - 21:28 #8
De andre er nemme at finde.

Der findes 3 forskellige slags DLL'er paa Windows:
* .NET DLL'er
* Win32 DLL'er
* COM/ActiveX DLL'er
Avatar billede rasmuslh Nybegynder
24. marts 2008 - 21:29 #9
Tak for det hurtige svar Arne. Jeg må igang med at google lidt. Nu ved jeg ihvertflad hvad jeg skal søge på. :D

Smider du et svar?
Avatar billede arne_v Ekspert
24. marts 2008 - 21:30 #10
kommer her
Avatar billede arne_v Ekspert
24. marts 2008 - 21:31 #11
Har du kodet i noget andet foer C# ?
Avatar billede rasmuslh Nybegynder
24. marts 2008 - 21:40 #12
Nej, jeg har kun erfaring med Java. Jeg ahr egentligt bare fået "aben" fordi en kollega har sagt op og jeg skal have overblik over den kørende løsning. :D
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester