Administratorrechte programmieren



  • Hallo,
    gibt es eine Möglichkeit Adminrechte zu programmieren. d.h. dass das Programm als Admin ausgeführt wird. Kann mir jemand helfen? Ich brauche das für ein Programm, welches Streams auf einen Client schreibt. Ohne Adminrechte geht in diesem Fall nichts. Und damit das alle Benutzergruppen können wäre das ganz nützlich.

    Danke für Antworten

    MfG Red



  • Dieser Thread wurde von Moderator/in Jansen aus dem Forum Borland C++ Builder (VCL/CLX) in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Das bestimmt der User unter welchen Rechten ein Programm ausgeführt wird. Aber du kannst ihn, falls er keine Administratorrechte hat darauf hinweisen und das Programm beenden. Oder suchst du nach etwas anderem?

    MfG SideWinder



  • Man kann Programme beim starten auch unter anderen Benutzerrechten ausführen, hierfür benötigt man dann natürlich das Passwort des entsprechenden Accounts.



  • @ SirLant:

    Genau das brauche ich. Das Passwort ist kein Problem, das hab ich ja.
    Nur wie geht das, dass das Programm nach dem Passwort "fragt" und ich es dann eingeben kann?

    Bitte helft mir, wenn ihr wisst, wie das funktioniert 👍



  • CreateProcessAsUser



  • Such mal auf codeguru.com nach runas, dort hab ich mal sowas gesehen.



  • Ringding schrieb:

    Such mal auf codeguru.com nach runas, dort hab ich mal sowas gesehen.

    genau das ist es



  • @ RingDing:
    das hilft mir nicht richtig weiter, aber trotzdem danke für die Antwort. 🙂

    @ Token:
    Könntest du mir bitte ein Codebeispiel dazu geben, weil ich nicht weiß wie man die ganzen Parameter belegen muss.

    [code]
    BOOL CreateProcessAsUser(

    HANDLE hToken, // handle to a token that represents a logged-on user
    LPCTSTR lpApplicationName, // pointer to name of executable module
    LPTSTR lpCommandLine, // pointer to command line string
    LPSECURITY_ATTRIBUTES lpProcessAttributes, // pointer to process security attributes
    LPSECURITY_ATTRIBUTES lpThreadAttributes, // pointer to thread security attributes
    BOOL bInheritHandles, // new process inherits handles
    DWORD dwCreationFlags, // creation flags
    LPVOID lpEnvironment, // pointer to new environment block
    LPCTSTR lpCurrentDirectory, // pointer to current directory name
    LPSTARTUPINFO lpStartupInfo, // pointer to STARTUPINFO
    LPPROCESS_INFORMATION lpProcessInformation // pointer to PROCESS_INFORMATION
    );



  • Konnte man dem Betriebssystem nicht irgendwie sagen das er das ganze Prog als admin starten soll ohne das der Programmierer was machen musste. Ich meine da gabs bei Windows mal so ne Einstellung.



  • Mach ich sicherlich nicht. Dafür gibt es google oder die Suchfunktion hier.



  • Direkt kann man sowas nicht sagen. Man kann ja als "normaler" Benutzer nicht einfach einen Prozess als Adminuser erstellen ohne das Passwort zu haben. Wär ja ziemlich unsicher.
    Der einzige User der das kann, ist der System-User oder mit ein paar Tricks ein Benutzer mit Adminrechten bzw. ein Benutzer der das SE_CREATE_TOKEN_NAME Privileg besitzt.

    Der Benutzer, der dein Programm starten kann aber ein Prozess unter einem anderen Namen starten. Natürlich mit dessen Passwort.



  • @ScriptGod: Ich glaube wir meinen beide das selbe.



  • Das Passwort is ja kein Problem, das hab ich ja. Das läuft ja auf meinem Rechner --> Ich hab auch das Adminpasswort. Ich brauch nur was, mit dem ich dem Os das Passwort geben kann und das Prog dafür Adminrechte "bekommt"(ihr wisst ja was ich meine)

    MfG Red



  • Red{C++} schrieb:

    Das Passwort is ja kein Problem, das hab ich ja. Das läuft ja auf meinem Rechner --> Ich hab auch das Adminpasswort. Ich brauch nur was, mit dem ich dem Os das Passwort geben kann und das Prog dafür Adminrechte "bekommt"(ihr wisst ja was ich meine)

    MfG Red

    Genau da liegt das Problem...

    Die Administrator-Rechte (oder Rechte allgemein) werden durch ein Token repräsentiert, das der Prozess besitzt. Ein neues Token zu erstellen oder den Benutzer eines Tokens zu ändern, hat standardmäßig nur der "System"-User. CreateProcessAsUser rufte deshalb intern einen Dienst auf (Diensete laufen ja unter dem "System"-User) dieser erstellt dann das Token und den Prozess.

    Solltest du aber einstellen, dass der User auch dieses Rechte besitzt, kannst du mit LogonUser ein Token erstellen und dieses setzen. Dabei schalltest du aber sämtliche Sicherheitsvorkehrungen für den User ab. Den mit den internen APIs kann man auch ein Token erstellen ohne das Passwort zu kennen. Dadurch kann dann der User die Identität aller anderen User annehmen. Deshalb ist das normalweise auf den "System"-User beschrängt.



  • OK, danke für alle Antworten! 👍
    Ich kapier jetzt das Prinzip auf jeden Fall mal.
    Ich probier einfach so lange bis es klappt.

    NfG Red



  • ScriptGod das interressiert mich jetzt aber, also es kann jedes Programm egal unter welchen Rechten es läuft sich ein Token "besorgen" mit welchem man uneingeschränkten Zugriff hat?



  • SirLant schrieb:

    ScriptGod das interressiert mich jetzt aber, also es kann jedes Programm egal unter welchen Rechten es läuft sich ein Token "besorgen" mit welchem man uneingeschränkten Zugriff hat?

    nein, nur mit Debug-Rechten kann man sich ein System-Token hohlen



  • ScriptGod schrieb:

    SirLant schrieb:

    ScriptGod das interressiert mich jetzt aber, also es kann jedes Programm egal unter welchen Rechten es läuft sich ein Token "besorgen" mit welchem man uneingeschränkten Zugriff hat?

    nein, nur mit Debug-Rechten kann man sich ein System-Token hohlen

    Ich kann doch auch als Gast in den Debug-Mode wechseln, nur habe ich eben weniger Rechte als nen Administrator im Debug-Mode



  • Debug-Mode und Debug-Recht sind 2 verschiedene Sachen, unter Windows hat normalerweise, soviel ich weiß, standardmäßig nur der Administrator das Recht Prozesse zu debuggen. Zumindest bei Prozesse die nicht vom User selbest gestartet werden.

    Der Benutzer muss das Recht dazu haben einen System-Process (z.B. winlogon) mit RPROCESS_DUP_HANDLE Recht zu öffnen. Dazu ist das Debug-Recht notwendig.


Anmelden zum Antworten