TL; DR - Єдиний варіант - це породити інший процес. (Новий cmd.exe
.) У випадку з командним рядком, запуск нового примірника з маркером доступу, який має більш високі дозволи , завжди призведе до створення нового вікна .
Надати додаткові дозволи на вже запущений процес неможливо .
Коли користувач з правами адміністратора входить до машини Windows з увімкненим контролем облікових записів користувачів (UAC), створюються два окремих маркери доступу :
- Один із повним доступом адміністратора та
- Другий "відфільтрований маркер" зі стандартним доступом користувачів
Під час створення процесу (наприклад CMD.EXE
) йому присвоюється один з цих двох маркерів доступу . Якщо процес запускається "підвищеним" як адміністратор, використовується нефільтрований маркер доступу. Якщо процесу не надано прав адміністратора, використовується відфільтрований стандартний маркер користувача.
Після створення процесу неможливо замінити його маркер доступу . 1 У цій темі безпеки програми MSDN для робочого столу Windows плакат, що ідентифікує себе як члена Команди Windows Kernel:
Ядро NT ніколи не передбачалося дозволяти перемикати маркер, як тільки процес почався. Це пов’язано з тим, що ручки тощо можуть бути відкриті в старому контексті безпеки, операції польотів можуть використовувати невідповідні контексти безпеки тощо. Як правило, зазвичай не має сенсу перемикати маркер процесу після того, як він розпочато виконання. Однак це не було застосовано до Vista . [Курсив мій] (Джерело завдяки до @Ben N )
Примітка. Контроль облікових записів користувачів був введений з випуском Windows Vista .
Це Super User відповідь призводить два додаткових джерел , які підтверджують той же:
Тому просто неможливо підняти командний рядок або будь-який інший процес на місці. Єдиний варіант - породити інший процес новим маркером доступу (який, за бажанням, може бути ще одним екземпляром початкового процесу). У випадку з командним рядком, запуск нового примірника з маркером доступу, який має більш високі дозволи, завжди призведе до створення нового вікна, і якщо підказки UAC включені в системі, вони також будуть запускатися.
1 Ви можете налаштувати привілеї в існуючому маркері доступу за допомогою функції AdjustTokenPrivileges , але відповідно до MSDN :
Функція AdjustTokenPrivileges не може додавати нові права до маркера доступу. Він може лише вмикати або вимикати наявні привілеї маркера.