Звідки беруться змінні середовища для підвищеного cmd.exe процесу?


2

Змінні середовища, показані командою SET, можуть помітно відрізнятися залежно від рівня привілеїв сеансу командного рядка. Крім того, здається, що будь-яка програма, запущена з адміністративними обліковими даними тим самим користувачем, може створювати змінні середовища, які зберігатимуться довгий час після закінчення цього процесу, і встановлюватимуться в будь-якому наступному підвищеному процесі, запущеному цим користувачем (і ТІЛЬКИ в тих підвищених процесах). Мені не вдалося знайти ці змінні на вкладці "Навколишнє середовище", що відображається Process Explorer, для жодного процесу, пов'язаного з сеансом входу користувачів. Моє запитання: де зберігаються ці значення, і чому процес Explorer не має доступу до них (звичайно, оскільки Process Explorer за замовчуванням працює підвищеним, ці змінні відображаються на його власній вкладці "Середовище")? Або я просто їх не помітив?

Відповіді:


2

Звідки беруться змінні середовища для підвищеного cmd.exe процесу?

Як і всі процеси, воно отримує своє оточення від процесу, який породив екземпляр командно-рядкового рядка.

Коли процес породжує інший процес, дочірній процес успадковує батьківське середовище. Якщо батько отримав привілей, то він, ймовірно, має більше / різних змінних, ніж якщо його немає. Коли вона породжує дитячий процес, дитина отримує той самий набір, щоб почати.

Змінні середовища, показані командою SET, можуть помітно відрізнятися залежно від рівня привілеїв сеансу командного рядка.

Тому що, коли Explorer фактично не породив привілейовані процеси, це робить CSRSS. Запускаючи програму «як адміністратор», ви отримуєте підказку UAC, яка затемнює екран. Це пояснюється тим, що CSRSS - це системний процес, який обробляє підказки UAC та підвищення процесу. Тож як у Провідника та його дочірніх процесів є одне середовище, підвищений командний рядок (який породжений системним процесом з високими привілеями за бажанням Провідника) отримує дещо інший набір з деякими додатковими / різними змінними.

Крім того, здається, що будь-яка програма, запущена з адміністративними обліковими даними тим самим користувачем, може створювати змінні середовища, які зберігатимуться довгий час після закінчення цього процесу і встановлюватимуться в будь-якому наступному підвищеному процесі, запущеному цим користувачем (і ТІЛЬКИ в цих підвищених процесах).

Ні. setКоманда тільки на час сеансу. Щойно ви закриєте цей командний рядок, будь-які внесені вами зміни починаються з пусту Щоб вносити постійні зміни, потрібно використовувати зовнішній інструмент, як стороння утиліта або програма інструментів Microsoft setx. Це стосується навіть підвищених командних підказок; setкоманда просто не має функціональних можливостей для зміни навколишнього середовища в реєстрі.

Мені не вдалося знайти ці змінні на вкладці "Навколишнє середовище", що відображається Process Explorer, для жодного процесу, пов'язаного з сеансом входу користувачів.

Тому що будь-які зміни, які ви вносите, setбудуть видимі лише в тій конкретній командному рядку та будь-яких процесах, які ви запускаєте з цієї конкретної командної лінії; зміни не поширюються на інші процеси.

Моє запитання полягає в тому, де зберігаються ці значення, і чому процесор Explorer не може отримати доступ до них (звичайно, оскільки Process Explorer за замовчуванням працює піднятим, ці змінні відображаються на його власній вкладці "Середовище")? Або я просто їх не помітив?

Змінні сеансу зберігаються в конкретному середовищі командного рядка. Провідник процесів може бачити їх для конкретного примірника cmd, але вони не будуть в жодному іншому процесі. Якщо ви запускаєте програму з цього командного рядка, ви можете побачити ці зміни на вкладці « Довкілля процесу» у «Проводнику процесів», оскільки вона отримала їх у спадок від цього командного рядка.

Якщо ви використовуєте таку програму, як setxдля встановлення стійкої змінної, вони будуть зберігатися в реєстрі. Якщо встановити змінну рівня користувача (для поточного користувача), вона буде зберігатися в HKCU\Environment(або HKU\<USER>\Environmentдля інших користувачів). Якщо встановити змінну на рівні системи, вона буде зберігатися в HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment.

Майте на увазі, що якщо ви вручну модифікуєте середовище за допомогою реєстру, зміни вибиратимуть лише нові процеси. Щоб отримати існуючий процес, щоб побачити зміни, потрібно або перезапустити їх, або транслювати WM_SETTINGCHANGEповідомлення. (Такі засоби, як setxтрансляція повідомлення у всі вікна верхнього рівня.)


0

Я думаю, що результат SETможе бути іншим лише тоді, коли ви не ввійшли в систему як член адміністратора. Ось чому ви запитуєте користувача / пароль у такому випадку, ви фактично увійдете як адміністратор цього процесу.

Якщо ви вже є членом групи адміністраторів, то вихід SET для обох випадків для мене однаковий.

Тому, якщо моя гіпотеза правдива, підвищені привілеї змінні визначаються як змінні користувача для адміністратора.


0

Не зовсім зрозуміло, як саме встановлюються змінні середовища в новоствореному підвищеному процесі, але більшість з них походить із наявного набору поточного користувача (як показано командою SET, не підвищеним cmd.exe SET), а також будь-якого, що існують у ключі реєстру HKCU / Volatile Environment, які були створені з початку поточного сеансу входу (або поточний екземпляр Explorer?) і не відображаються у непідвищеному списку SET. У моєму Windows 10 є кілька змінних, які зустрічаються у списку, що не підвищений, але не підвищеному.

Це питання мотивовано поведінкою старих версій Macrium Reflect, про яку йдеться на веб- сайті https://forum.macrium.com/Topic752-1.aspx Поточна версія цієї програми тепер створює ці проблемні змінні в HKU / .DEFAULT / Летке середовище (AKA HKU / S-1-5-18 / Volatile Environment) замість клавіші HKCU.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.