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 CreateProcessAsUser (https://www.delphipraxis.net/66697-createprocessasuser.html)

renekr 2. Apr 2006 18:57


CreateProcessAsUser
 
Hi,

habe so meine Probleme mit der Function CreateProcessAsUser.

Will im Prinzip zb. die Registry ändern,Dateien schreiben,ändern in denen User nix machen dürfen und sollen (nur das Tool ).

zb. Für Autologin ,usw.

Lokalen Admin und PA und Domäne kenne ich.

Danke.

Ultimator 2. Apr 2006 18:59

Re: CreateProcessAsUser
 
Hallo renekr,

wo liegen denn die Probleme, die du mit der Funktion hast?

renekr 2. Apr 2006 19:45

Re: CreateProcessAsUser
 
Hallo,

also beim aufruf: :wall:

Ich will im Prinzip nur etwas ausführen als User aber mit Rechte von Admin.
Also nicht ein Programm Starten mit Admin Rechten.


zb. Autologin Write auf Local MAchine in Registry, oder User auslesen,ändern usw.
Delphi-Quellcode:
CreateProcessAsLogon('Administrator', 'passwort', 'Notepad.exe', 'c:\boot.ini')
Was muss ich dann zb angeben wenn ich eine Funtion ausführen will

Delphi-Quellcode:
SetAutoLogin(const Machine, User, PW: string): LongInt;
Danke.

Luckie 2. Apr 2006 22:28

Re: CreateProcessAsUser
 
Habe ich dir doch schon per PN geschrieben: MSDN-Library durchsuchenImpersonateLoggedOnUser-

renekr 3. Apr 2006 08:35

Re: CreateProcessAsUser
 
Danke,
habe leider damit noch nix gemacht und Blick nicht so durch.


Dem ImpersonateLoggedOnUser muss ich ja ein Access Token mitgeben?
muß i dann vorher LogonUser machen?


PS: gibt es auch ne möglichkeit ev. das User Passwort zu prüfen ob es ok ist?Also das Windows ( Domänen ) Login Passwort !!
Ich will es nicht auslesen nur Checken ob das eingegebene das selbe ist und ein Logon gehn würde.

Danke.
:gruebel:

microtronx 9. Apr 2006 21:21

Re: CreateProcessAsUser
 
Hallo Renekr,

probier mal folgendes:

Delphi-Quellcode:
function WinExecAsUser(FileName, Commandline: string; domain:string; username: string; password:string; Visibility:integer; var errormessage:string):boolean;
var
        StartupInfo      : _startupinfow;
        ProcessInfo      : TProcessInformation;
        h                : thandle;
        vtmp             : string;
        wcurdir, wfilename, wcommandline, wdomain, wusername, wpassword:pwidechar;
begin
        GetStartupInfoW(startupinfo);
        FillChar(StartupInfo, Sizeof(StartupInfo), #0);
        StartupInfo.cb := Sizeof(StartupInfo);
        StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
        StartupInfo.wShowWindow := Visibility;
        // if not LogonUser(pchar(username), pchar(domain), pchar(Password),LOGON32_LOGON_INTERACTIVE,LOGON32_PROVIDER_DEFAULT, h) then ShowMessage(SysErrorMessage(GetLastError));

        vtmp:=extractfilepath(filename);
        GetMem( wcurdir, length(vtmp) * SizeOf( WideChar ) + SizeOf(WideChar ) ) ;
        StringToWideChar( vtmp, wcurdir, Length( vtmp ) * SizeOf(WideChar ) + SizeOf( WideChar ) ) ;

        commandline:=' '+trim(trim(filename)+' '+trim(commandline));
        filename:='';

        GetMem( wpassword, length(password) * SizeOf( WideChar ) + SizeOf(WideChar ) ) ;
        GetMem( wusername, length(username) * SizeOf( WideChar ) + SizeOf(WideChar ) ) ;
        GetMem( wdomain, length(domain) * SizeOf( WideChar ) + SizeOf(WideChar ) ) ;
        GetMem( wFileName, length(FileName) * SizeOf( WideChar ) + SizeOf(WideChar ) ) ;
        GetMem( wCommandline, length(Commandline) * SizeOf( WideChar ) + SizeOf(WideChar ) ) ;

        StringToWideChar( password, wpassword, Length( password ) * SizeOf(WideChar ) + SizeOf( WideChar ) ) ;
        StringToWideChar( username, wusername, Length( username ) * SizeOf(WideChar ) + SizeOf( WideChar ) ) ;
        StringToWideChar( domain, wdomain, Length( domain ) * SizeOf(WideChar ) + SizeOf( WideChar ) ) ;
        StringToWideChar( FileName, wFileName, Length( FileName ) * SizeOf(WideChar ) + SizeOf( WideChar ) ) ;
        StringToWideChar( Commandline, wCommandline, Length( Commandline ) * SizeOf(WideChar ) + SizeOf( WideChar ) ) ;

        result:=false; errormessage:='';

        result:=CreateProcessWithLogonW(wusername,wdomain,wpassword,0, nil, wcommandline,0, nil, wcurdir,StartupInfo , ProcessInfo);
        if result=false then errormessage:=sysErrorMessage(Getlasterror);
end;
Das hatte ich mir irgendwann mal zusammengestellt und ich glaube das das auch funktioniert hat. Probiers einfach.

Mfg.

renekr 10. Apr 2006 09:43

Re: CreateProcessAsUser
 
Danke.
Werde ich tun,aber das ist nicht genau das was ich will.

Ich will nix öffnen,also keinen Explorer ,Registry usw.

Ich will quasi in der Registry einen Wert ändern,löschn das nur mit admin Rechten geht.
Aktuell bin ich aber User.
oder
Die Datei Berechtigungen ändern.


Ich kenne aber den Admin und das Passwort.

Also nur im Hintergrund.


Danke


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:04 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