Przeczytałem wszystkie posty dotyczące przepełnienia stosu dotyczące CreateProcessAsUser i jest bardzo mało pytań, więc nie wstrzymuję się od tego. Ale wygląda na to, że zdecydowanie czegoś brakuje, więc może to być łatwe.LogonUser -> CreateProcessAsUser ze usługi systemowej
Docelowy system operacyjny to Windows XP. Mam usługę działającą jako "System lokalny", z której chcę utworzyć proces działający jako inny użytkownik. Dla tego użytkownika mam nazwę użytkownika i hasło, więc LogonUser idzie dobrze i dostaję token dla użytkownika (w tym przypadku konto administratora). Następnie próbuję użyć tokena do wywołania CreateProcessAsUser, ale nie powiedzie się, ponieważ token nie ma SeAssignPrimaryTokenPrivilege - jednak ma SeIncreaseQuotaPrivilege. (Użyłem funkcji GetTokenInformation do zrzucenia wszystkich uprawnień związanych z tym tokenem.) Zgodnie ze stroną MSDN dla CreateProcessAsUser, aby uzyskać połączenie z programem CreateProcessAsUser, potrzebne są oba uprawnienia.
Mówi także, że nie potrzebujesz SeAssignPrimaryTokenPrivilege, jeśli token, który przekazujesz do CreateProcessAsUser(), jest "podstawową tokenem procesu", który można utworzyć za pomocą CreateRestrictedToken(), ale potem zostanie skojarzony z użytkownikiem systemu lokalnego, a nie użytkownikiem docelowym, który próbuję uruchomić proces jako.
Jak utworzyć znacznik logowania, który jest jednocześnie ograniczoną wersją podstawowego tokena procesu wywołującego, ORAZ jest powiązany z innym użytkownikiem? Dzięki!
Zauważ, że nie ma potrzeby ingerencji użytkownika w tutaj - to wszystko bez nadzoru - nie ma więc potrzeby, aby robić rzeczy, jak chwytając WINSTA0 itp
Co powoduje zwrot GetLastError po niepowodzeniu CreateProcessAsUser? – Anders
Rozwiązałeś to? Potrzebuję też rozwiązania :) – AgentFire
Chłopaki z Google Chrome rozwiązali ten problem również za pomocą nieudokumentowanego interfejsu API serwera uruchomieniowego, który istnieje aż do XP. Jeśli możesz zdobyć token dla użytkownika, który chcesz utworzyć proces ten można śledzić tutaj: http://src.chromium.org/chrome/trunk/src/remoting/host/win/launch_process_with_token.cc –