![Woher kommen die Umgebungsvariablen für einen erhöhten cmd.exe-Prozess?](https://rvso.com/image/1330226/Woher%20kommen%20die%20Umgebungsvariablen%20f%C3%BCr%20einen%20erh%C3%B6hten%20cmd.exe-Prozess%3F.png)
Die vom SET-Befehl angezeigten Umgebungsvariablen können je nach Berechtigungsstufe der Eingabeaufforderungssitzung erheblich unterschiedlich sein. Darüber hinaus scheint es, dass jedes Programm, das vom selben Benutzer mit Administratorberechtigungen ausgeführt wird, Umgebungsvariablen erstellen kann, die lange nach Beendigung dieses Prozesses bestehen bleiben und in jedem nachfolgenden erhöhten Prozess festgelegt werden, der von diesem Benutzer gestartet wird (und NUR in diesen erhöhten Prozessen). Ich konnte diese Variablen in der Registerkarte „Umgebung“ von Process Explorer für keinen Prozess finden, der mit der Benutzeranmeldesitzung verknüpft ist. Meine Frage ist: Wo sind diese Werte gespeichert und warum kann Process Explorer nicht auf sie zugreifen (da Process Explorer standardmäßig erhöht ausgeführt wird, erscheinen diese Variablen natürlich in seiner eigenen Registerkarte „Umgebung“)? Oder habe ich sie einfach übersehen?
Antwort1
Woher kommen die Umgebungsvariablen für einen erhöhten cmd.exe-Prozess?
Wie alle Prozesse erhält es seine Umgebung von dem Prozess, der die Eingabeaufforderungsinstanz erzeugt hat.
Wenn ein Prozess einen anderen Prozess erzeugt, erbt der Kindprozess die Umgebung des übergeordneten Prozesses. Wenn der übergeordnete Prozess privilegiert war, hat er wahrscheinlich mehr/andere Variablen als wenn er es nicht war. Wenn er einen Kindprozess erzeugt, erhält der untergeordnete Prozess von Anfang an denselben Satz.
Die vom SET-Befehl angezeigten Umgebungsvariablen können je nach Berechtigungsstufe der Eingabeaufforderungssitzung erheblich unterschiedlich sein.
Denn wenn der Explorer keine privilegierten Prozesse erzeugt, tut dies der CSRSS. Wenn Sie ein Programm „als Administrator“ ausführen, erhalten Sie eine UAC-Eingabeaufforderung, die den Bildschirm abdunkelt. Dies liegt daran, dass der CSRSS ein Systemprozess ist, der UAC-Eingabeaufforderungen und Prozesserhöhungen verarbeitet. Während der Explorer und seine untergeordneten Prozesse also eine Umgebung haben, eine Eingabeaufforderung mit erhöhten Rechten (die vom hochprivilegierten Systemprozess erzeugt wird)auf Geheißdes Explorers) erhält einen leicht anderen Satz mit einigen zusätzlichen/anderen Variablen.
Darüber hinaus scheint es, dass jedes Programm, das vom selben Benutzer mit Administratorrechten ausgeführt wird, Umgebungsvariablen erstellen kann, die noch lange nach Beendigung des Prozesses bestehen bleiben und in jedem nachfolgenden Prozess mit erhöhten Rechten festgelegt werden, der von diesem Benutzer gestartet wird (und NUR in diesen Prozessen mit erhöhten Rechten).
Nein. Der set
Befehl ist nur für die Sitzung gültig. Sobald Sie die Eingabeaufforderung schließen, sind alle vorgenommenen Änderungen verloren. Um dauerhafte Änderungen vorzunehmen, müssen Sie ein externes Tool wie ein Dienstprogramm eines Drittanbieters oder das Microsoft-Tool-Programm verwenden setx
. Dies gilt sogar für Eingabeaufforderungen mit erhöhten Rechten; der set
Befehl verfügt einfach nicht über die Funktion, die Umgebung in der Registrierung zu ändern.
Ich konnte diese Variablen in der Registerkarte „Umgebung“, die vom Process Explorer angezeigt wird, für keinen der mit der Benutzeranmeldesitzung verknüpften Prozesse finden.
Denn alle Änderungen, die Sie mit vornehmen, set
sind nur sichtbar indas spezifischeEingabeaufforderung und alle Prozesse, die Sie starten vonDas spezifischeEingabeaufforderung; die Änderungen werden nicht auf andere Prozesse übertragen.
Meine Frage ist, wo diese Werte gespeichert sind und warum Process Explorer nicht auf sie zugreifen kann (da Process Explorer standardmäßig mit erhöhten Rechten ausgeführt wird, werden diese Variablen natürlich auf der eigenen Registerkarte „Umgebung“ angezeigt)? Oder habe ich sie einfach übersehen?
Die Sitzungsvariablen werden in der Umgebung dieser bestimmten Eingabeaufforderung gespeichert. Process Explorer kann sie für diese bestimmte Instanz von sehen cmd
, sie sind jedoch in keinem anderen Prozess vorhanden. Wenn Sie ein Programm von dieser Eingabeaufforderung aus starten, können Sie diese Änderungen im untergeordneten Prozess sehen.UmfeldRegisterkarte im Process Explorer, da sie von dieser Eingabeaufforderung geerbt wurden.
Wenn Sie ein Programm wie verwenden, setx
um eine persistente Variable festzulegen, wird diese in der Registrierung gespeichert. Wenn Sie eine Variable auf Benutzerebene festlegen (für den aktuellen Benutzer), wird sie in HKCU\Environment
(oder HKU\<USER>\Environment
für andere Benutzer) gespeichert. Wenn Sie eine Variable auf Systemebene festlegen, wird sie in gespeichert HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
.
Beachten Sie, dass, wenn Sie die Umgebung manuell über die Registrierung ändern, nur neue Prozesse die Änderungen übernehmen. Damit vorhandene Prozesse die Änderungen sehen, müssen Sie sie entweder neu starten oder eine WM_SETTINGCHANGE
Nachricht senden. (Tools wie setx
senden die Nachricht an alle Fenster der obersten Ebene.)
Antwort2
Ich denke, die Ausgabe SET
kann nur dann anders sein, wenn Sie nicht als Mitglied der Administratorgruppe angemeldet sind. Aus diesem Grund werden Sie in diesem Fall nach einem Benutzernamen/Passwort gefragt. Tatsächlich melden Sie sich für diesen Vorgang als Administrator an.
Wenn du bereits Mitglied der Administratorgruppe bist, dann ist die Ausgabe von SET bei mir in beiden Fällen gleich.
Wenn meine Hypothese zutrifft, werden die Variablen mit erhöhten Berechtigungen als Benutzervariablen für den Administrator definiert.
Antwort3
Es ist nicht ganz klar, wie genau die Umgebungsvariablen in einem neu erstellten erhöhten Prozess festgelegt werden, aber die meisten von ihnen stammen aus dem vorhandenen Set des aktuellen Benutzers (wie durch den nicht erhöhten cmd.exe-SET-Befehl angezeigt) sowie alle, die im HKCU/Volatile Environment-Registrierungsschlüssel des Benutzers vorhanden sind, die seit dem Beginn der aktuellen Anmeldesitzung (oder der aktuellen Explorer-Instanz?) erstellt wurden und nicht in der nicht erhöhten SET-Liste angezeigt werden. Es gibt einige Variablen in meinem Windows 10, die in der nicht erhöhten Liste vorkommen, aber nicht in der erhöhten.
Diese Frage wurde durch das Verhalten älterer Versionen von Macrium Reflect motiviert, das unterhttps://forum.macrium.com/Topic752-1.aspxDie aktuelle Version dieses Programms erstellt diese problematischen Variablen jetzt unter HKU/.DEFAULT/Volatile Environment (auch bekannt als HKU/S-1-5-18/Volatile Environment) statt unter dem Schlüssel HKCU.