Entwickler-Ecke
Windows API - runas - Befehl geht nich
Marco D. - Do 20.10.05 09:03
Titel: runas - Befehl geht nich
Also ich will ein Programm mit admin rechten ausführen
ich gebe auf kommandozeile ein:
runas /profile /user:computername\Admin-Kononame cmd
Dann fragt er mich nach dem passwort aber ich kann da nix eingeben, dercursor bewegt sich nich. ich tippe zwar die richtigen buchstaben aber das kennwort ist laut windows immer falsch. Komisch. Könnt ihr mir weiterhelfen?
Delete - Do 20.10.05 09:57
Versuchst du den Befehl mit einem Account auf einem Remotecomputer auszuführen oder warum stellst du den Computernamen voran? Dass die Eingabe nicht angezeigt wird ist schon richtig, sonst könnte ja jeder dein Passwort lesen, der dir über die Schulter auf den Monitor guckt. Du musst außerdem auch noch ein Programm angeben, gegebenenfalls mit Pfad, sollte es nicht im Suchpfad liegen, welches du unter dem anderen Benutzer Account starten willst:
runas /User:Administrator notepad
Aber was hat das mit der WinAPI Programmierung zu tun?
Marco D. - Do 20.10.05 17:58
Titel: asd
@ Luckie:
Also ich benutzte die Syntax vom ersten Posting weil dass dort in der hilfe stand. Geb mal nur 'runas' ein, da stehen nen paar beispiele darunter auch das. Also wenn ich
runas /User:Administrator notepad eingebe und statt Administrator mein Kontonamen und dann das passwort steht wieder unbekannter benutzername oder falsches Kennwort :gruebel:
Delete - Do 20.10.05 19:10
Keine Sorge, ich kenne den Befehl.
Guck mal, ob der Dienst 'Dienst "ausführen als"' auch gestartet ist. Ansonsten dürfte das Passwort wohl wirklich falsch sein. Das funktioniert übrigens nur, wenn der betreffende Account auch wirklich ein Passwort hat. Sonst, leg mal einen neuen Benutzer mit Passwort an und versuch damit den Befehl mal auzuführen.
Marco D. - Do 20.10.05 19:59
Titel: asd
@ Luckie
Wie heißt denn der Dienst?
UGrohne - Do 20.10.05 23:04
Ich tippe mal auf "Sekundäre Anmeldung".
Wenn Du als übrigens Teil einer Domäne bist, dann kann es unter Umständen sein (je nach Domänenkonfig), dass der lokale Administrationsaccount deaktiviert wurde. Evtl. musst Du dann einen Domänenaccount verwenden.
Aber ich frag mich im Moment auch, was das mit WinAPI-Programmierung zu tun hat?
Delete - Fr 21.10.05 00:12
Titel: Re: asd
Koller hat folgendes geschrieben: |
@ Luckie
Wie heißt denn der Dienst? |
Steht doch da:
| Zitat: |
'Dienst "ausführen als"' |
Und genauso steht es in der Liste der Dienste. Hättest du mal in der Liste geguckt, dann wär der dir auch ins Auge gesprungen. :-?
UGrohne - Fr 21.10.05 00:16
Jetzt ist nur noch die Frage ob er Win2000 oder XP einsetzt, denn so wie es scheint wurde der Dienst in XP umbenannt. Ich habe den auf jeden Fall nicht auf meinem Rechner. Daher habe ich den nächstliegenden mal genannt.
Delete - Fr 21.10.05 01:06
Ach, unter XP heißt das wieder anders? :autsch:
Marco D. - Fr 21.10.05 15:45
Titel: ad
Also der Dienst muss ja aktiv sein, weil ich mit rehter maustaste und ausführen als dass ja machen kann. ABer da mir das zu umständlich ist, will ich eine Batchdatei schreiben, bloß das geht halt net :crying: :crying: :crying: :crying: :crying:
BenBE - Fr 21.10.05 15:56
Warum rufst Du nicht einfach mit deinem Programm es selber mit CreateProcessAsUser intern auf? Wie man den Shell-Dialog dafür aufruft, weiß ich aber ATM nicht ausm Kopf.
RunAs ist ein Befehl unter Win2K...
UGrohne - Sa 22.10.05 04:12
BenBE hat folgendes geschrieben: |
| RunAs ist ein Befehl unter Win2K... |
Gibt's aber auch unter XP, verwende ich fast täglich.
Delete - Sa 22.10.05 04:27
UGrohne hat folgendes geschrieben: |
BenBE hat folgendes geschrieben: | | RunAs ist ein Befehl unter Win2K... |
Gibt's aber auch unter XP, verwende ich fast täglich. |
Und da mir das zu umständlich war, habe ich mir mein
RunAsUser [
http://runasuser.luckie-online.de] geschrieben. ;)
Marco D. - Sa 22.10.05 12:52
@ Luckie:
Kannste mir mal bitte sagen, wie du das dann realisierst, ich meine wie du das geschafft hast, dass man aus einem Programm heraus ein Prog unter einem anderen Benutzernamen ausführen kann.
Delete - Sa 22.10.05 13:27
Nur ganz nebenbei bemerkt, die Sourcen liegen bei. Man braucht nur mal reinzugucken.
Marco D. - Sa 22.10.05 13:49
Titel: asd
Weil stand dass das Freeware ist und ich glaub dass es einen Unterschied zwischen OpenSource und Freeware gibt. Wenn nicht, dann klärt mich bitte auf...
BenBE - Sa 22.10.05 14:12
@Ausführen von Programmen aus eigenem Programm unter anderem Benutzernamen: CreateProcessAsUser ... (Wie ich oben bereits erwähnte)
@OpenSource\Freeware:
Freeware ist kostenlos und hat (meist) keine Sources beilegen. Die Rechte an den Sourcen trägt der Autor des Programms.
Bei Opensource ist der Quelltext für jeden frei verfügbar und darf auch von jedem bearbeitet\geändert werden. OpenSource muss nicht kostenlos sein. (z.B. MPL)
Delete - Sa 22.10.05 14:28
Titel: Re: asd
Koller hat folgendes geschrieben: |
| Weil stand dass das Freeware ist und ich glaub dass es einen Unterschied zwischen OpenSource und Freeware gibt. Wenn nicht, dann klärt mich bitte auf... |
Sicher gibt es da einen Unterschied, aber man könnte sich das ja mal runterladen und angucken wie das funktioniert. Wenn man das aus diesem Grund dann mal entpackt, dürfte einen der Ordner 'Source' ins Auge springen.
@BenBE: Mit CreateProcessAsUser geht es nicht. Dazu brauchst du ein gültiges Token und dazu fehlen dir die nötigen Privilegien um dir eins zu erzeugen. Aber so geht es:
http://www.luckie-online.de/Developer/Delphi/Sonstiges/CreateProcessWithLogonW.html
Marco D. - Sa 22.10.05 19:47
Also ich habe es mit runas geschafft:
runas /noprofile /user:XYZ calc
Dann das PW und der Rechner startet. Aber das geht nur bei eingeschränkten, ich will das auch mit admins machen. Ich bin mir 10000 % sicher dass das pw richtig war :gruebel: :weissnix:
Marco D. - Sa 22.10.05 20:27
@ Luckie:
:shocked: DU hast ja keine Formulare. Das musst du mir genauer erklären!!!!
Deshalb weiß ich auch nichts mit dem Code anzufangen, weil ich nicht weiß, welche Funktion was macht. Allein am Funktionsnamen erkenn ich auch nich alles. KAnnste den betreffenden Codeauszug mal bitte posten?????
Delete - So 23.10.05 20:45
Koller hat folgendes geschrieben: |
| :shocked: DU hast ja keine Formulare. Das musst du mir genauer erklären!!!! |
Ohne VCL eben.
| Zitat: |
Deshalb weiß ich auch nichts mit dem Code anzufangen, weil ich nicht weiß, welche Funktion was macht. Allein am Funktionsnamen erkenn ich auch nich alles. KAnnste den betreffenden Codeauszug mal bitte posten????? |
:autsch:
Nur mal bitte für 5 Sekunden nachdenken. Da dürfte einem die Unit RunDlg.pas auffallen. man könnte sie ja mal auf gut Glück öffnen. Dann sieht man, dass sie genau drei Funktionen beinhaltet:
Delphi-Quelltext
1: 2:
| function CreateProcessAsLogon(const User, PW, Application, CmdLine: WideString): LongWord; |
Delphi-Quelltext
1:
| function GetCompName: string; |
und
Delphi-Quelltext
1: 2:
| function RunDlgFunc(hDlg: hWnd; uMsg: DWORD; wParam: wParam; lParam: lParam): bool; stdcall; |
Und jetzt die absolut schwere Frage: Welche Funktion dürfte wohl dafür verantwortlich sein, einen Prozess unter einem anderen Benutzeraccount zu starten?
Und du willst mir jetzt erzählen, du hättest mal in den Quellcode reingeguckt? Sorry, das nehme ich dir nicht ab.
Wegen deiner E-Mail:
Was das
const in der Parameterdeklaration zu suchen hat, guckst du in der Delphi Hilfe nach.
Ich hätte natürlich auch true oder false zurückgeben können, aber wenn ich dann wissen will, warum es nicht funktioniert hat muss ich ja trotzdem noch mal GetLastError aufrufen und so gebe ich ihn eben gleich zurück und kann ihn auswerten. Wenn er null ist, ist alles in Ordnung, ist er ungleich null kann ich mit SysErrorMessage gleich eine aussagekräftige Fehlermeldung ausgeben.
Marco D. - Mi 26.10.05 19:13
@ Luckie:
Also
Delphi-Quelltext
1: 2:
| function CreateProcessAsLogon(const User, PW, Application, CmdLine: WideString): LongWord; |
Als ich ausprobiert habe, da startete kein Programm. Was muss ich denn schreiben um die kommandozeile als 'Administrator' mit dem PAsswort 'admin' zu öffnen?
MFG KOLLER
Delete - Mi 26.10.05 21:28
Und was gibt GetLastError für einen Fehlercode zurück? Wie ich dir oben erklärt habe, hab eich das ganze doch schon so implementiert, dass man sieht, was nicht geklappt hat, wenn es nicht geht. Aber wen man das nicht nutzt, dann kann ich auch nicht helfen.
Marco D. - Fr 28.10.05 21:26
@ Luckie:
Jetzt check ich was du meinst :autsch: :autsch: :autsch: :autsch: :autsch:
Also nummer 1326: ANmeldung fehlgeschlagen, unbekannter benutzername oder falsches Kennwort. Also dass kann nicht sein, ich werd ja wohl noch mein Kennwort wissen :wink:
:gruebel: Also ich hab mal nen neues konto erstellt und als ich das genommen habe hat es funktioniert :nixweiss:
Das ist sehr komisch
also hier der code
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38:
| var Form1: TForm1; l:longword;
implementation
{$R *.dfm}
function CreateProcessAsLogon( User, PW, Application, CmdLine: WideString): LongWord; var si : TStartupInfoW; pif : TProcessInformation; s: WideString; begin ZeroMemory(@si, sizeof(si)); si.cb := sizeof(si); si.dwFlags := STARTF_USESHOWWINDOW; si.wShowWindow := 1;
SetLastError(0);
if CmdLine = '' then s := Application else s := Application+' "'+CmdLine+'"';
CreateProcessWithLogonW(PWideChar(User), nil, PWideChar(PW), LOGON_WITH_PROFILE, nil, PWideChar(s), CREATE_DEFAULT_ERROR_MODE, nil, nil, @si, @pif); Result := GetLastError; end;
procedure TForm1.Button1Click(Sender: TObject); begin l:=createprocessaslogon('Screenex','nept','C:/WINDOWS/system32/cmd.exe','net send PC104 uschi'); showmessage(inttostr(l)); showmessage(syserrormessage(l)); end; |
Marco D. - Fr 28.10.05 22:44
ALso jetzt funktioniert alles :D
Marco D. - Sa 29.10.05 20:02
Also dat geht jetzt irgendwie nicht mehr :bawling:
Ich weiß wie gesagt nicht, was man in die Klammern schreiben soll hier der code:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82:
| unit main;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, jpeg, StdCtrls, mpuwinnt;
type TForm1 = class(TForm) Image1: TImage; Image2: TImage; Image3: TImage; Timer1: TTimer; Timer2: TTimer; procedure Timer1Timer(Sender: TObject); procedure Timer2Timer(Sender: TObject); private public end;
var Form1: TForm1; l1,l2:longword;
implementation
{$R *.dfm}
function CreateProcessAsLogon( User, PW, Application, CmdLine: WideString): LongWord; var si : TStartupInfoW; pif : TProcessInformation; s: WideString; begin ZeroMemory(@si, sizeof(si)); si.cb := sizeof(si); si.dwFlags := STARTF_USESHOWWINDOW; si.wShowWindow := 1;
SetLastError(0);
if CmdLine = '' then s := Application else s := Application+' "'+CmdLine+'"';
CreateProcessWithLogonW(PWideChar(User), nil, PWideChar(PW), LOGON_WITH_PROFILE, nil, PWideChar(s), CREATE_DEFAULT_ERROR_MODE, nil, nil, @si, @pif); Result := GetLastError; end;
procedure TForm1.Timer1Timer(Sender: TObject); begin timer1.enabled:=false; l1:=createprocessaslogon('Admin','admin','sc config messenger start= demand','sc config messenger start= demand'); l2:=createprocessaslogon('Admin','admin','net start messenger','net start messenger'); if (l1<>0) or (l2<>0) then begin messagedlg('ERROR: CODE1 '+inttostr(l1),mterror,[mbok],0); messagedlg('ERROR: CODE2 '+inttostr(l2),mterror,[mbok],0); close; end else begin messagedlg('Windows Messenger Service started succesfully.',mtinformation,[mbok],0); close; end;
end;
procedure TForm1.Timer2Timer(Sender: TObject); begin application.BringToFront; end;
end. |
Könnt ihr das mal bitte berichtigen??? :flehan:
KOLLER
Delete - Mo 31.10.05 00:58
In was denn für Klammern um Gottes Willen? Der Funktion CreateProcessAsLogon übergibst du den Bneutzernamen, dessen Passowrt, das zu startende Programm und wenn nötig noch Paramter für das Programm. Ist das denn so schwer an Hand der Parameter: User, PW, Application, CmdLine zu erschließen? :roll:
Marco D. - Mo 31.10.05 12:03
@ Luckie:
Ich dachte immer 'cmdLine' hat was mit cmd zu tun, also mit der kommandozeile. Mensch, mehr wollt ich doch gar nicht wissen :P :wink: :P :wink: :P :roll: :twisted: :wink: :twisted: :wink:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!