Programm ausführen als xxxx

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Barratator
Beiträge: 17
Registriert: 26.04.2008 09:48

Programm ausführen als xxxx

Beitrag von Barratator »

Hallo,
ich suche jetzt bestimmt schon seit 2 Stunden nach einem Beispiel, aber ich finde einfach nichts verwertbares (bin noch zimlicher Anfänger in Purebasic, ich programmiere aber schon etwas länger in anderen Sprachen). Das einzigste, was ich gefunden habe ist die WinAPI Funktion CreateprocesswithlogonW, damit kann ich allerdings nicht viel Anfangen :-(

Ich möchte ein Programm als Administrator (lokal) starten, das Passwort habe ich natürlich. Wie könnte ich dies jetzt am besten lösen?

Betriebsystem:
Windows XP, nach möglichkeit auch Win2K :-)


Gruß
Bastian
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Code: Alles auswählen

ShellExecute_(#Null, @"runas", @"notepad", @"", @"", #SW_SHOWNORMAL) 
http://tinyurl.com/4aseu3
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Barratator
Beiträge: 17
Registriert: 26.04.2008 09:48

Beitrag von Barratator »

Ja, das klappt zwar schon, aber ich möchte nicht diesen Dialog haben, sondern, dass das ganze Programmintern gemacht wird (Pass liegt in einer Variable)

Gruß
Bastian
Barratator
Beiträge: 17
Registriert: 26.04.2008 09:48

Beitrag von Barratator »

Mein Code sieht jetzt so aus:

Code: Alles auswählen

Debug OpenLibrary(0,"Advapi32.dll")
Debug CallFunction(0, "CreateProcessWithLogonW","Administrator",".","*********",2, "","C:\test.exe ",CREATE_DEFAULT_ERROR_MODE,null,null,StartupInfo,ProcessInfo)
Debug GetLastError_()
GetLastError gibt immer 2 zurück (ERROR_FILE_NOT_FOUND; The system cannot find the file specified.) .
Die Datei existiert allerdings...Auch die explorer.exe konnte er nicht finden :-(
Danke für eure Hilfe im vorraus :)


Gruß
Bastian
Benutzeravatar
Rings
Beiträge: 977
Registriert: 29.08.2004 08:48

Beitrag von Rings »

w am ende des Namens bedeutet bei Api-Funktionen meist widechar, also unicode !!!
Rings hat geschrieben:ziert sich nich beim zitieren
Barratator
Beiträge: 17
Registriert: 26.04.2008 09:48

Beitrag von Barratator »

Ok, das hab' ich jetzt soweit verstanden (klappt auch super), allerdings muss ich das ganze als ANSI haben, weil ich die Procedure als DLL in einem anderem Programm brauche, welches nur ANSI unterstütz (ich weiß nicht wieso, aber PureBasic-DLLs mit Unicode klappen da nicht :( )

Laut WinAPI gibt es auch keinCreateProcessWithLogonA; was könnte man da jetzt machen? :)

Vielen Dank im vorraus!


Gruß
Bastian
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Barratator hat geschrieben: Laut WinAPI gibt es auch keinCreateProcessWithLogonA; was könnte man da jetzt machen? :)

Vielen Dank im vorraus!


Gruß
Bastian
Stichwort: Prototype, Pseudotype p-unicode

DLL Funktionen sollten sowieso immer geprototyped werden! Um den
Lerneffekt zu erhalten, kein Beispiel :mrgreen:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Barratator
Beiträge: 17
Registriert: 26.04.2008 09:48

Beitrag von Barratator »

Ok :-) Danke^^

Jetzt gibt es aber das Problem, dass selbst wenn die Benutzernamen und Passwörter richtig sind, das ganze als "User" (aktueller Benutzername) ausgeführt wird.
Wenn ich jetzt aber die Benutzernamen und Passwörter ändere, sodass sie nichtmehr richtig an die Funktion übergeben werden, wird trotzdem 1 (Erfolgreich) zurückgegeben und das Programm als "User" geöffnet o.O

Wie kommt das?? Danke im vorraus :)


Gruß
Bastian
Benutzeravatar
Rings
Beiträge: 977
Registriert: 29.08.2004 08:48

Beitrag von Rings »

hmm,
Bild
Rings hat geschrieben:ziert sich nich beim zitieren
Barratator
Beiträge: 17
Registriert: 26.04.2008 09:48

Beitrag von Barratator »

...
Hier ist der Code:

Code: Alles auswählen

Procedure RunAs(file.s,user.s,pass.s)
  Define StartupInfo.StartupInfo
  Define ProcessInfo.PROCESS_INFORMATION
  OpenLibrary(0,"Advapi32.dll")
  r= CallFunction(0, "CreateProcessWithLogonW",user,".",pass,2, file,"",CREATE_DEFAULT_ERROR_MODE,null,null,StartupInfo,ProcessInfo) 
  CloseLibrary(0)
  ProcedureReturn r
EndProcedure
Gruß
Bastian
Antworten