Feedback

C# - Taskmanager deaktivieren bzw. austauschen

Veröffentlicht von am 15.09.2013
(1 Bewertungen)
Einige möchten vielleicht lieber ihr eigenes Programm anstelle des Windows Taskmanagers nutzen. Mithilfe dieser Klasse kann man den Windows-Taskmanager ganz einfach gegen ein anderes Programm austauschen oder den Taskmanager komplett deaktivieren.
Diese Klasse benötigt für alle Funktionen, bis auf das auslesen des Ersatzprogramms, Administrator-Rechte.

Hinweis: Natürlich werden solche Funktionen auch gerne von Schadsoftware (Viren, etc.) verwendet. Ich möchte hier nur zeigen, das es sowieso geht (als Admin (auch für CurrentUser)) aber auch das man es relativ leicht über eine Live-CD rückgängig machen kann. Und wer wissen will, wie man soetwas macht, würde es auch alleine heraus finden. Warum also nicht hier zeigen und jemanden davon abhalten? ;)

Übrigens, Programme wie der Process-Explorer machen es genauso.
http://technet.microsoft.com/de-de/sysinternals/bb896653.aspx

Versionsänderungen
15.09.2013 - 1. Veröffentlichung
21.09.2013 - TaskmanagerStateCurrentUser-Eigenschaft hinzugefügt
    /// <summary>
    /// Stellt Funktionen zum abändern des Windows Taskmanagers bereit.
    /// </summary>
    static class TaskmanagerHelper
    {
        const string key = @"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\taskmgr.exe\";
        const string keyCU = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\";

        /// <summary>
        /// Ruft den Status des Taskmanagers für den aktuellen Benutzer ab oder legt diesen fest.<para/>
        /// <c>True</c>  - Der Windows Taskmanager ist aktiviert.<para/>
        /// <c>False</c> - Der Windows Taskmanager ist deaktiviert.
        /// </summary>
        public static bool TaskmanagerStateCurrentUser
        {
            get
            {
                RegistryKey key = Registry.CurrentUser.OpenSubKey(keyCU);
                if (key == null)
                    return true; //Schlüssel existiert nicht

                object val = key.GetValue("DisableTaskMgr");
                if (val == null || (int)val == 1)//1 = Deaktiviert, 0=Aktiviert
                    return true;//Wert existiert nicht
                return false;
            }
            set
            {
                RegistryKey key = Registry.CurrentUser.OpenSubKey(keyCU, true);
                if (value)
                {//aktivieren
                    if (key != null && key.GetValue("DisableTaskMgr") != null)
                        key.DeleteValue("DisableTaskMgr");//Wert löschen
                }
                else
                {//deaktivieren
                    if (key == null)
                        key = Registry.CurrentUser.CreateSubKey(keyCU);//Schlüssel existiert nicht
                    key.SetValue("DisableTaskMgr", 1, RegistryValueKind.DWord);
                }
            }
        }

        /// <summary>
        /// Ruft einen Wert ab, der angibt welchen Status der Windows Taskmanager gerade hat oder legt diesen fest.<para/>
        /// <c>True</c>  - Der Windows Taskmanager ist aktiviert.<para/>
        /// <c>False</c> - Der Windows Taskmanager ist deaktiviert bzw. ausgetauscht (get).
        /// </summary>
        public static bool TaskmanagerState
        {
            get
            {
                RegistryKey result = Registry.LocalMachine.OpenSubKey(key);
                if (result == null)
                    return true;//Schlüssel existiert nicht
                object val = result.GetValue("Debugger");
                if (val == null)
                    return true;//Wert existiert nicht
                return false;
            }
            set
            {
                if (value)
                {
                    RegistryKey result = Registry.LocalMachine.OpenSubKey(key, true);
                    if (result == null)
                        return;//Schlüssel existiert nicht
                    object val = result.GetValue("Debugger");
                    if (val == null)
                        return;//Wert existiert nicht
                    result.DeleteValue("Debugger");
                }
                else
                {
                    TaskmanagerReplacement = "NONE";
                }
            }
        }

        /// <summary>
        /// Ruft den Taskmanagerersatz ab oder legt diesen fest. 
        /// </summary>
        public static string TaskmanagerReplacement
        {
            get
            {
                RegistryKey result = Registry.LocalMachine.OpenSubKey(key);
                if (result == null)
                    return null;//Schlüssel existiert nicht
                object value = result.GetValue("Debugger");
                if (result == null)
                    return null;//Wert existiert nicht
                return value.ToString();
            }
            set
            {
                RegistryKey result = Registry.LocalMachine.OpenSubKey(key, true);
                if (result == null)
                    result = Registry.LocalMachine.CreateSubKey(key);//Schlüssel existiert nicht
                result.SetValue("Debugger", value, RegistryValueKind.String);
            }
        }

        /// <summary>
        /// Ruft einen Wert ab, der angibt, ob der Ersatz für den Windows Taskmanager einen gültigen Pfad aufweist.<para/>
        /// Ist kein Programm registriert oder der Windows Taskmanager deaktiviert, dann wird <c>False</c> zurück gegeben.
        /// </summary>
        public static bool IsTaskmanagerReplacementValid
        {
            get
            {
                string value = TaskmanagerReplacement;
                if (string.IsNullOrEmpty(value))
                    return false;
                else
                    return File.Exists(value);
            }
        }
    }

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!