Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi CreateProcessAsUser ERROR_PRIVILEGE_NOT_HELD (https://www.delphipraxis.net/140934-createprocessasuser-error_privilege_not_held.html)

Dezipaitor 12. Okt 2009 21:43

Re: CreateProcessAsUser ERROR_PRIVILEGE_NOT_HELD
 
Die SaferAPI kann man dafür verwenden, allerdings ist sie nicht mit dem Vista Integritäts Level kompatibel.

madas 18. Mär 2013 09:54

AW: Re: CreateProcessAsUser ERROR_PRIVILEGE_NOT_HELD
 
Zitat:

Zitat von Dezipaitor (Beitrag 959924)
Ich hab doch glatt Kays Senf übersehen :)

http://kay-bruns.de/wp/2007/03/01/runasloggedonuser

Hat das eventuell schon mal jemand nach Delphi portiert?

Danke.

madas

CodeX 29. Mär 2013 20:56

AW: Re: CreateProcessAsUser ERROR_PRIVILEGE_NOT_HELD
 
Ich nutze die Gelegenheit, um nach einem anderen Posting aus diesem Thread nochmal nachzufragen:
Zitat:

Zitat von psyone (Beitrag 960300)
Interessant. In den Comments findet sich ein Link zu DropMyRights, wo gezeigt wird wie einem Admin Token die Rechte genommen werden können.

Gibt es dazu schon eine Delphi-Portierung?

madas 3. Apr 2013 13:11

AW: Re: CreateProcessAsUser ERROR_PRIVILEGE_NOT_HELD
 
Zitat:

Zitat von CodeX (Beitrag 1209397)
Ich nutze die Gelegenheit, um nach einem anderen Posting aus diesem Thread nochmal nachzufragen:
Zitat:

Zitat von psyone (Beitrag 960300)
Interessant. In den Comments findet sich ein Link zu DropMyRights, wo gezeigt wird wie einem Admin Token die Rechte genommen werden können.

Gibt es dazu schon eine Delphi-Portierung?

Diese Variante hatte ich auch versucht. Hat jedoch bei mir nicht geklappt. D.h. der Prozess lief trotzdem mit Admin-Rechten. Kann aber auch an der Umsetzung selbst liegen.

Hier der Code:

Delphi-Quellcode:
function StartUserProcess(ApplicationName, CommandLine, WorkingDir: PAnsiChar): DWORD;
  var
    hSaferLevel: DWORD;
    hAuthzLevel: SAFER_LEVEL_HANDLE;
    hToken: THandle;
    si:STARTUPINFO;
    pi: PROCESS_INFORMATION;
  begin
    Result := ERROR_SUCCESS;
    hSaferLevel := SAFER_LEVELID_NORMALUSER;
    hAuthzLevel := 0;
    if (SaferCreateLevel(SAFER_SCOPEID_USER, hSaferLevel, 0, @hAuthzLevel, nil)) then
    begin
      hToken := 0;
      if (SaferComputeTokenFromLevel(hAuthzLevel, 0, @hToken, 0, nil)) then
      begin
        ZeroMemory(@si, sizeof(STARTUPINFO));
        si.cb := sizeof(STARTUPINFO);
        si.lpDesktop := nil;
        if (CreateProcessAsUser(hToken, ApplicationName, CommandLine, nil, nil, False, CREATE_NEW_CONSOLE, nil, WorkingDir, si, pi)) then
        begin
           CloseHandle(pi.hProcess);
           CloseHandle(pi.hThread);
        end else
          Result := GetLastError;
      end else
        Result := GetLastError;
      SaferCloseLevel(hAuthzLevel);
    end else
      Result := GetLastError;
  end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:29 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz