AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Vista: CreateProcess mit Admin-Rechten
Thema durchsuchen
Ansicht
Themen-Optionen

Vista: CreateProcess mit Admin-Rechten

Ein Thema von Zacherl · begonnen am 14. Mär 2007 · letzter Beitrag vom 15. Mär 2007
Antwort Antwort
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

Vista: CreateProcess mit Admin-Rechten

  Alt 14. Mär 2007, 23:04
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
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#2

Re: Vista: CreateProcess mit Admin-Rechten

  Alt 14. Mär 2007, 23:09
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
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

Re: Vista: CreateProcess mit Admin-Rechten

  Alt 15. Mär 2007, 12:46
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);
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#4

Re: Vista: CreateProcess mit Admin-Rechten

  Alt 15. Mär 2007, 13:34
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?
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:34 Uhr.
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