Prozesse auslesen wenn gesperrt

22/09/2009 - 10:18 von Dominik | Report spam
Hallo

Wir haben in der Firma ein Problem, dass man sich nach dem Ziehen der
Smartcard sich nicht mehr anmelden kann. Steckt man die Smartcard
wieder in den Rechner, reagiert der PC nicht mehr.

Nun sind die Admins mit dem Wunsch an mich heran getreten,
herauszufinden, welche Prozesse zu dieser Zeit laufen.

Ich hab mal kurz nachgesehen, wie das klappen könnte und hab ganz
schnell folgendes progammiert:

Process[] processes = Process.GetProcesses();

foreach (Process process in processes)
{
try
{
Console.WriteLine("Name {0}, Resp {1}, StartTime
{2}", process.ProcessName, process.Responding, process.StartTime);
}
catch { }
}
Console.ReadLine();

1) Wobei ich nicht auf alle Prozesse zugreifen kann (Vermutlich weil
sie als SYSTEM laufen?) - Ich nehme an, dies kann ich umgehen, in dem
ich das Programm auch als SYSTEM laufen lasse?

2) Wie erkenne ich ob der Computer zur Zeit gesperrt ist (Windows
VISTA Enterprise SP1)

Vielen Dank,
Dominik
 

Lesen sie die antworten

#1 Kerem Gümrükcü
22/09/2009 - 10:43 | Warnen spam
Hallo Dominik,

1) Wobei ich nicht auf alle Prozesse zugreifen kann (Vermutlich weil
sie als SYSTEM laufen?) - Ich nehme an, dies kann ich umgehen, in dem
ich das Programm auch als SYSTEM laufen lasse?



Einige Prozesse sind vollstàndig vom System (zumindest vom Usermode)
gesperrt und Du hast so gut wie keinen Zugriff darauf. Wenn Du das dennoch
willst, musst Du dein Program entweder als System laufen lassen, oder
als Administrator, bzw. Benutzer, der bestimmte Rechte und aktivierte
Privilegien hat. Es gibt auch Pseudoprozesse, die keine richtigen Prozesse
sind, von daher geben die auch nix richtiges zurück. Generall gilt, das Du
solche Informationen immer mit einem try/catch block abfragen solltest!

Suche im Netz nach beispielen zu folgendem Begriff:
"Adjust Token Privileges C#" und dann hangele dich durch die Beispiele.
Eines meiner Programe benutz eine derartige Technik: restarts

Hier zu bekommen:

[restarts - The powerfull alternative to SC Command]
http://restarts.codeplex.com/

Schau Dir mal die Function "EnableAllPossiblePriviliges(...)" genauer an
und alle dazugehörigen Aufrufe innerhalb der Funktion an.

2) Wie erkenne ich ob der Computer zur Zeit gesperrt ist (Windows
VISTA Enterprise SP1)



Schnelles Beispiel, ohne PInvoke und (sichtbare) Windows API:


public static bool IsSystemLocked()
{
if (Microsoft.Win32.SessionSwitchReason ==
SessionSwitchReason.SessionLock)
{
//mach hier was du willst
return true;
}
else
{
//mach hier was du willst
return false;
}
}

Schau dir das halt mal genau an: Microsoft.Win32.SessionSwitchReason

Grüße

Kerem


Beste Grüsse / Best regards / Votre bien devoue
Kerem Gümrükcü
Latest Project: http://www.pro-it-education.de/soft...iceremover
Latest Open-Source Projects: http://entwicklung.junetz.de
"This reply is provided as is, without warranty express or implied."

Ähnliche fragen