Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Vista: CreateProcess mit Admin-Rechten (https://www.delphipraxis.net/88382-vista-createprocess-mit-admin-rechten.html)

Zacherl 14. Mär 2007 23:04


Vista: CreateProcess mit Admin-Rechten
 
Hi,

wie kann ich mittels CreateProcess unter Vista eine Anwendung mit Admin-Rechten starten? Die Manifest Lösung scheidet für mich aus, da ich nur dann den zweiten Prozess mit Admin Rechten starten will, wenn der erste Prozess mit Admin Rechten läuft.

Florian

JasonDX 14. Mär 2007 23:09

Re: Vista: CreateProcess mit Admin-Rechten
 
Zitat:

Zitat von Florian Bernd
wie kann ich mittels CreateProcess unter Vista eine Anwendung mit Admin-Rechten starten? Die Manifest Lösung scheidet für mich aus, da ich nur dann den zweiten Prozess mit Admin Rechten starten will, wenn der erste Prozess mit Admin Rechten läuft.

Wenn der ausführende Prozess mit AdminRechten läuft, dürfte der ausgeführte Prozess mit den selben Rechten laufen, oder nicht? Zumindest steht das im MSDN so:
Zitat:

Creates a new process and its primary thread. The new process runs in the security context of the calling process
greetz
Mike

Zacherl 15. Mär 2007 12:46

Re: Vista: CreateProcess mit Admin-Rechten
 
Leider kann ich das nicht bestätigen. Also ich habe ide UAC deaktiviert und starte meinen Prozess, der auch alle Admin Rechte hat. Dann rufe ich in diesem CreateProcess auf und erzeuge einen weiteren Prozess. Dieser zweite Prozess allerdings läuft mit eingeschränkten Rechten .. kann man da was machen?

//Edit: Ja bin selbst drauf gekommen .. so geht es:

Delphi-Quellcode:
var
  hToken: Cardinal;
{...}
  OpenProcessToken(GetCurrentProcess, TOKEN_QUERY, hToken);
  CreateProcessAsUser(hToken, nil, PChar('"' + Process + '"'), nil, nil, False, 0,
    nil, nil, StartupInfo, ProcessInfo);

Zacherl 15. Mär 2007 13:34

Re: Vista: CreateProcess mit Admin-Rechten
 
Ah verdammt .. Fehlanzeige .. ich hatte ausversehen nur CreateProcess geschrieben. Es geht nicht so .. das habe ich noch gefunden, bekomme es aber nicht so ganz portiert:

Code:
CHandle processToken;

VERIFY(::OpenProcessToken(::GetCurrentProcess(),
                          TOKEN_DUPLICATE,
                          &processToken.m_h));

CHandle duplicateToken;

VERIFY(::DuplicateTokenEx(processToken,
                          MAXIMUM_ALLOWED,
                          0, // token attributes
                          SecurityAnonymous,
                          TokenPrimary,
                          &duplicateToken.m_h));

WellKnownSid integrityLevelSid(WellKnownSid::MandatoryLabelAuthority,
                               SECURITY_MANDATORY_LOW_RID);

TOKEN_MANDATORY_LABEL tokenIntegrityLevel = { 0 };
tokenIntegrityLevel.Label.Attributes = SE_GROUP_INTEGRITY;
tokenIntegrityLevel.Label.Sid = &integrityLevelSid;

VERIFY(::SetTokenInformation(duplicateToken,
                             TokenIntegrityLevel,
                             &tokenIntegrityLevel,
                             sizeof (TOKEN_MANDATORY_LABEL) + ::GetLengthSid(&integrityLevelSid)));

STARTUPINFO startupInfo = { sizeof (STARTUPINFO) };
ProcessInfo processInfo;

VERIFY(::CreateProcessAsUser(duplicateToken,
                             L"C:\\Windows\\Notepad.exe",
                             0, // cmd line
                             0, // process attributes
                             0, // thread attributes
                             FALSE, // don't inherit handles
                             0, // flags
                             0, // inherit environment
                             0, // inherit current directory
                             &startupInfo,
                             &processInfo));
Kann mir da jemand helfen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:46 Uhr.

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