Entwickler-Ecke

Windows API - Autostart: Auslesen alle Autostartprogramme


schitho - Fr 12.11.04 01:51
Titel: Autostart: Auslesen alle Autostartprogramme
Hi,

wo finde ich in der Registry überall Einträge, die einen Autostart bewirken?

Ich kenne folgende Stellen:

Autostart für alle User:
HKLM\Software\Windows\CurrentVersion\Run

Autostartprogramm für alle User deaktiviert
HKLM\Software\Windows\CurrentVersion\Run-

Einmaliger Autostart für alle User
HKLM\Software\Windows\CurrentVersion\RunOnce

Einmaliger Autostart für alle User deaktiviert
HKLM\Software\Windows\CurrentVersion\RunOnce

Autostart vor Login für alle User
HKLM\Software\Windows\CurrentVersion\RunService

Autostart vor Login für alle User deaktiviert
HKLM\Software\Windows\CurrentVersion\RunService-

Für den aktuellen User verwende man HKCU

Dazu hab ich nun folgende Fragen:

  1. Stimmt die Liste?
  2. Ist die Liste vollständig?
  3. Stimmen diese Eintragungen unter "allen" Windows Versionen (98, Me, NT, 2000, XP)?

Danke

Gruß
Thomas


Delete - Fr 12.11.04 09:33

Ich schau noch mal in eins meiner Programme, aber die "deaktivierten" Autostarts sind kein zwingendes Muss. Sie gelten nur für den Fall, dass jemand unter 98 das eingebaute "msconfig" benutzt hat. Ob das unter 2000/XP auch so ist, ... AFAIR nein. Aber wie gesagt, ich muss mal nachschauen.


MartinPb - Fr 12.11.04 09:46

@Mathias. Die Aussage ist richtig. Die Pfade mit dem Bindestrich sind eine Marotte von msconfig. Sie werden aber noch von andernen Programmen benutzt.

Es sind also keine Autostart Pfade.

Es gibt aber auch Autostart Pfade (Reg) die erst beim beenden von Windows abgearbeitet werden.

Dann gibt es den Autostart Ordner.

Dann gibt es bei einigen Systemen noch den Load und Run Berech bei Win.ini oder Sys.ini.

Dann bibt es noch einige Tricks, die aber nicht offiziel sind.


Delete - Fr 12.11.04 10:34

Das mit dem Autostart-Ordner usw. stimmt schon, aber Thomas schrieb ja, es ginge ihm nur um die Starts in der Registry. :) Das Problem ist, dass eben keinen Standard gibt. MSConfig macht´s so. Kaufst du dir ein Autostart-Tool, dann geht das u.U. wieder völlig anders vor, usw. Du hast also kaum eine Chance, wirklich 100% aller Einträge zu finden.


Und das MSConfig von XP ist richtig besch****. Also, die Einträge werden aus ihren ursprünglichen Schlüsseln entfernt und unter

Quelltext
1:
HKLM\Software\Microsoft\Shared Tools\MSConfig\startupreg                    

gesichert. Jedes Programm hat dabei seinen eigenen Schlüssel. Der Schlüssel selbst enthält dann folgende wichtige Einträge

Quelltext
1:
2:
3:
key     = ursprünglicher Pfad ("Software\Microsoft\...\Run" bspw.)
hkey    = ursprünglicher Root in Kurzform (HKLM, HKCU)
command = Programm inkl. Pfad

Es gibt noch ein paar, die aber nicht unbedingt von Interesse sind.


Erkennst du das Problem, @schitho? Wenn du Benutzer bist, hast du normalerweise keine Berechtigung in den HKLM-Schlüssel zu schreiben. Du kannst diesen Weg also nur mit Admin-Rechten verwenden.

Noch schlimmer wird es, wenn dein Benutzer nicht der Administrator ist, aber selbst Admin-Rechte hat. Dann kannst du zwar in den o.g. Schlüssel schreiben, aber du kannst nicht unterscheiden wem ein deaktivierter HKCU-Eintrag gehört. Jeder Benutzer hat ja seinen eigenen HKCU-Zweig. Aber nur beim angemeldeten Benutzer heißt er auch so. Ist ein Benutzer nicht angemeldet, steckt sein HKCU-Zweig irgendwo unter HKEY_USERS.

Beispiel: Der Admin ist angemeldet und entfernt mit "msconfig" den Messenger aus seinem HKCU-Zweig. Er meldet sich ab, und ein Benutzer mit Admin-Rechten meldet sich an und startet "msconfig". Er setzt den Haken beim deaktivierten Messenger rein, und das Programm wird in seinen HKCU-Zweig geschrieben und nicht in den des Admin.


Um wirklich 100% auf Nummer Sicher zu gehen, müsste man auslesen, wie viele Benutzer es gibt und wie viele von denen Admin-Rechte haben. Beim Versuch, einen HKCU-Eintrag wiederherzustellen, müsste man dann diese Liste mit den Admin-Benutzern einblenden und fragen, für welchen er geschrieben werden soll. Dann müsste man die SID des ausgewählten Benutzers ermitteln, damit man das Programm unter HKEY_USERS eintragen kann. Ansonsten landet es überall, nur nicht beim gewünschten Benutzer. ;)

Du kannst natürlich auch den alten Weg mit dem Minus im Namen verwenden (etwa "Run-"). Aber der Haken ist, dass dein Programm dann die mit "msconfig" deaktivierten Einträge nicht findet. Und umgekehrt findet "msconfig" dann natürlich auch nicht die von dir deaktivierten Einträge.

Ein Teufelskreis ... :)


schitho - Sa 13.11.04 00:27

Danke für die ausführlichen Infos

Gruß
Thomas