windows - Hvordan bruger du LsaEnumerateLogonSessions i C #?

Indlæg af Hanne Mølgaard Plasc

Problem



I et C # Windows Forms-program forsøger jeg at få en liste over de brugere, der er logget ind på en arbejdsstation (både lokale og domænebrugere). Hver søgning om dette har ført mig til tråde, der nævner 'brug kun LsaEnumerateLogonSessions'. [4]


Så ... hvordan bruger du faktisk dette? MSDN-siden er meget sparsom og synes ikke at tilbyde nogen spor.

Bedste reference


Du skal bruge Cassia, en open source wrapper. [5]


ITerminalServicesManager manager = new TerminalServicesManager();
using (ITerminalServer server = manager.GetRemoteServer("your-server-name"))
{
    server.Open();
    foreach (ITerminalServicesSession session in server.GetSessions())
    {
        Console.WriteLine("Session ID: " + session.SessionId);
        Console.WriteLine("User: " + session.UserAccount);
        Console.WriteLine("State: " + session.ConnectionState);
        Console.WriteLine("Logon Time: " + session.LoginTime);
    }
}


Jeg er ikke sikker på, hvordan dette vil håndtere domænebrugere, prøv det i LINQPad.


For at besvare dit spørgsmål skal du erklære det som en P/Invoke metode, der tager en out in og en out long[].

Andre referencer 1


Denne artikel viser, hvordan du bruger LsaEnumerateLogonSessons:

http://www.codeproject.com/Articles/18179/Using-the-Local-Security-Authority-to-Enumerate-Us[6]