Di mana variabel lingkungan untuk proses cmd.exe tinggi berasal?

2

Variabel lingkungan yang ditunjukkan oleh perintah SET bisa sangat berbeda tergantung pada tingkat hak istimewa dari sesi prompt perintah. Selain itu, tampaknya setiap program yang dijalankan dengan kredensial administratif oleh pengguna yang sama dapat membuat variabel lingkungan yang akan bertahan lama setelah proses itu berakhir, dan akan ditetapkan dalam setiap proses peningkatan selanjutnya yang diluncurkan oleh pengguna tersebut (dan HANYA dalam proses yang ditinggikan). Saya belum dapat menemukan variabel-variabel itu di tab Lingkungan yang ditunjukkan oleh Process Explorer untuk proses apa pun yang terkait dengan sesi login pengguna. Pertanyaan saya adalah: di mana nilai-nilai itu disimpan, dan mengapa Process Explorer tidak dapat mengaksesnya (tentu saja, karena Proses Explorer berjalan dinaikkan secara default variabel-variabel tersebut muncul di tab Lingkungan sendiri)? Atau apakah saya hanya mengabaikan mereka?

kreemoweet
sumber

Jawaban:

2

Di mana variabel lingkungan untuk proses cmd.exe tinggi berasal?

Seperti semua proses, ia mendapatkan lingkungannya dari proses yang menelurkan instance command-prompt.

Ketika suatu proses memunculkan proses lain, proses anak mewarisi lingkungan orangtua. Jika orang tua diistimewakan, maka mungkin memiliki variabel lebih / berbeda daripada jika tidak. Ketika memunculkan proses anak, anak mendapatkan set yang sama untuk memulai.

Variabel lingkungan yang ditunjukkan oleh perintah SET bisa sangat berbeda tergantung pada tingkat hak istimewa dari sesi prompt perintah.

Karena ketika Explorer tidak benar-benar menelurkan proses istimewa, CSRSS melakukannya. Ketika Anda menjalankan program "sebagai admin", Anda mendapatkan prompt UAC yang meredupkan layar. Ini karena CSRSS adalah proses sistem yang menangani permintaan dan peningkatan proses UAC. Jadi sementara Explorer dan proses anaknya memiliki satu lingkungan, command-prompt yang ditinggikan (yang dihasilkan oleh proses sistem privilege tinggi atas perintah Explorer) mendapatkan set yang sedikit berbeda dengan beberapa variabel ekstra / berbeda.

Selain itu, tampaknya setiap program yang dijalankan dengan kredensial administratif oleh pengguna yang sama dapat membuat variabel lingkungan yang akan bertahan lama setelah proses itu berakhir dan akan ditetapkan dalam setiap proses lanjutan berikutnya yang diluncurkan oleh pengguna tersebut (dan HANYA dalam proses yang ditinggikan).

Nggak. The setperintah sesi-satunya. Setelah Anda menutup command-prompt itu, segala perubahan yang Anda lakukan menjadi sia-sia. Untuk membuat perubahan terus-menerus, Anda harus menggunakan alat eksternal seperti utilitas pihak ketiga atau program alat Microsoft setx. Ini berlaku bahkan untuk perintah-perintah yang ditinggikan; yang setperintah hanya tidak memiliki fungsi untuk memodifikasi lingkungan dalam registri.

Saya belum dapat menemukan variabel-variabel itu di tab Lingkungan yang ditunjukkan oleh Process Explorer untuk proses apa pun yang terkait dengan sesi login pengguna.

Karena setiap perubahan yang Anda buat dengan sethanya akan terlihat di yang spesifik command prompt dan setiap proses yang Anda memulai dari yang spesifik command prompt; perubahan tidak merambat ke proses lain.

Pertanyaan saya adalah di mana nilai-nilai itu disimpan, dan mengapa Process Explorer tidak dapat mengaksesnya (tentu saja, karena Proses Explorer berjalan dinaikkan secara default variabel-variabel tersebut muncul di tab Lingkungan sendiri)? Atau apakah saya hanya mengabaikan mereka?

Variabel sesi disimpan di lingkungan prompt perintah tertentu itu. Process Explorer dapat melihatnya untuk contoh spesifik tersebut cmd, tetapi mereka tidak akan berada dalam proses lain. Jika Anda meluncurkan program dari prompt perintah itu, maka Anda dapat melihat perubahan itu di tab Lingkungan proses anak di Process Explorer karena itu akan mewarisinya dari prompt perintah itu.

Jika Anda menggunakan program suka setxmengatur variabel persisten, maka mereka akan disimpan dalam registri. Jika Anda menetapkan variabel tingkat pengguna (untuk pengguna saat ini), variabel itu akan disimpan di HKCU\Environment(atau HKU\<USER>\Environmentuntuk pengguna lain). Jika Anda mengatur variabel tingkat sistem, maka variabel itu akan disimpan HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment.

Ketahuilah bahwa jika Anda memodifikasi lingkungan secara manual melalui registri, hanya proses baru yang akan mengambil perubahan. Untuk mendapatkan proses yang ada untuk melihat perubahan, Anda harus me-restart atau menyiarkan WM_SETTINGCHANGEpesan. (Alat seperti setxmenyiarkan pesan ke semua jendela tingkat atas.)

Synetech
sumber
0

Saya pikir output SEThanya bisa berbeda ketika Anda tidak masuk sebagai anggota grup Administrator. Itu sebabnya Anda diminta untuk pengguna / kata sandi dalam kasus itu, Anda benar-benar masuk sebagai Administrator untuk proses itu.

Jika Anda sudah menjadi anggota grup administrator, maka output SET sama dalam kedua kasus untuk saya.

Oleh karena itu, jika hipotesis saya benar, variabel privilege tinggi didefinisikan sebagai Variabel Pengguna untuk Administrator.

Juan Mendes
sumber
0

Tidak begitu jelas bagaimana variabel lingkungan diatur dalam proses tinggi yang baru dibuat, tetapi kebanyakan dari mereka berasal dari set yang ada pengguna saat ini (seperti yang ditunjukkan oleh perintah SET cmd.exe non-ditinggikan), serta semua yang ada di kunci registri HKCU / Volatile Environment pengguna, yang telah dibuat sejak awal sesi login saat ini (atau instance Explorer saat ini?) dan tidak ditampilkan dalam daftar SET yang tidak ditinggikan. Ada beberapa variabel di Windows 10 saya yang muncul di daftar yang tidak ditinggikan tetapi tidak yang ditinggikan.

Pertanyaan ini dimotivasi oleh perilaku versi Macrium Reflect yang lebih lama, yang dibahas di https://forum.macrium.com/Topic752-1.aspx Versi saat ini dari program tersebut sekarang menciptakan variabel-variabel bermasalah tersebut di HKU / .DEFAULT / Lingkungan Volatile (AKA HKU / S-1-5-18 / Volatile Environment) bukan di bawah kunci HKCU.

kreemoweet
sumber