TL; DR - jedyną opcją jest odrodzenie innego procesu. (Nowa cmd.exe
.) W przypadku wiersza polecenia uruchomienie nowej instancji za pomocą tokena dostępu, który ma wyższe uprawnienia , zawsze spowoduje utworzenie nowego okna .
Nie można przyznać dodatkowych uprawnień już działającemu procesowi.
Gdy użytkownik z uprawnieniami administracyjnymi loguje się na komputerze z systemem Windows z włączoną kontrolą konta użytkownika (UAC), tworzone są dwa oddzielne tokeny dostępu :
- Jeden z pełnym dostępem administratora i
- Drugi „token filtrowany” ze standardowym dostępem użytkownika
W momencie tworzenia procesu (np. CMD.EXE
) Jest mu przypisywany jeden z tych dwóch tokenów dostępu . Jeśli proces jest uruchamiany jako „podniesiony” jako Administrator, używany jest niefiltrowany token dostępu. Jeśli procesowi nie przyznano uprawnień administratora, używany jest odfiltrowany standardowy token użytkownika.
Po utworzeniu procesu nie można zastąpić tokena dostępu . 1 W tym wątku MSDN Application Security dla Windows Desktop plakat przedstawiający się jako członek zespołu jądra systemu Windows stwierdza:
Jądro NT nigdy nie miało na celu umożliwienia przełączania tokenów po uruchomieniu procesu. Wynika to z faktu, że uchwyty itp. Mogły zostać otwarte w starym kontekście bezpieczeństwa, operacje inflight mogą wykorzystywać niespójne konteksty bezpieczeństwa itp. W związku z tym zazwyczaj nie ma sensu przełączać tokena procesu po jego rozpoczęciu. Nie było to jednak egzekwowane do Visty . [nacisk kopalni] (źródło dzięki do @Ben N )
Uwaga: Kontrola konta użytkownika została wprowadzona wraz z wydaniem systemu Windows Vista .
Ta odpowiedź superużytkownika przytacza dwa dodatkowe źródła potwierdzające to samo:
Dlatego po prostu nie można podnieść wiersza polecenia ani żadnego innego procesu w miejscu. Jedyną opcją jest odrodzenie innego procesu z nowym tokenem dostępu (w razie potrzeby może to być kolejna instancja oryginalnego procesu). W przypadku wiersza polecenia uruchomienie nowej instancji z tokenem dostępu, który ma wyższe uprawnienia, zawsze spowoduje utworzenie nowego okna, a jeśli w systemie zostaną włączone monity UAC, zostaną one również uruchomione.
1 Możesz dostosować uprawnienia w istniejącym tokenie dostępu za pomocą funkcji AdjustTokenPrivileges , ale zgodnie z MSDN :
Funkcja AdjustTokenPrivileges nie może dodawać nowych uprawnień do tokena dostępu. Może jedynie włączać i wyłączać istniejące uprawnienia tokena.