Конференция "WinAPI" » CreateProcessAsUser + UAC... [D7]
 
  • istok (02.05.11 15:56) [0]
    данная функция спользуется процессом под учеткой system для запуска другого процесса под учеткой юзера. проблема в том, что под uac (win7, дефолтный уровень uac) не работает, getlasterror возвращает 720ю ошибку. пробовал поиграть с token, не вышло..


    function RunProcessAsCurrentUser(FileName: string): Boolean;
    var
     ProcessId: Integer;
     hWindow, hProcess, TokenHandle: THandle;
     si: Tstartupinfo;
     p: Tprocessinformation;
    begin
       Result := False;
       hWindow := FindWindow('Progman', 'Program Manager');
       GetWindowThreadProcessID(hWindow, @ProcessID);
       hProcess := OpenProcess (PROCESS_ALL_ACCESS, FALSE, ProcessID);
       if OpenProcessToken(hProcess, TOKEN_ALL_ACCESS, TokenHandle) then
       begin

         FillChar(si,SizeOf(si),0);
         with Si do begin
           cb := SizeOf( Si);
           dwFlags := startf_UseShowWindow;
           wShowWindow := SW_NORMAL;
           lpDesktop := PChar('winsta0\default');
         end;

         Result :=  CreateProcessAsUser(TokenHandle, nil,
           PChar(FileName),
           nil, nil, false, Create_default_error_mode, nil, nil, si, p);
       end;
    end;

  • istok (02.05.11 15:57) [1]
    забыл уточнить - не срабатывает именно CreateProcessAsUser
  • Rouse_ © (02.05.11 18:33) [2]
  • istok (02.05.11 22:35) [3]

    > http://rouse.drkb.ru/winapi.php#servicenotifyer

    без uac у меня проблем нет, т.е. этот пример точно сработает? можете объяснить в чем принципиальная разница?
  • Rouse_ © (04.05.11 20:14) [4]
    Пример сработает точно, только есть одно условие: создаваемый процесс не должен требовать повышения прав, т.е. asInvoker
    Основное различие в том что ты токен не совсем верно получаешь
 
Конференция "WinAPI" » CreateProcessAsUser + UAC... [D7]
Есть новые Нет новых   [134431   +12][b:0][p:0.001]