LogonUser scheitert
-
sodelle nach langem melde ich mich mal wieder zurück
und zwar will ich ein programm mit anderen rechten starten.
das problem ist allerdings LogonUser scheitert schon.ich habe rausgefunden, das der User unter Win2000 SE_TCB_NAME Privilegien braucht. (in hilfe und online msdn)
hier mein code:
HANDLE SecurityHandle; bool ret=LogonUser( Edit1->Text.c_str(), Edit3->Text.c_str(), Edit4->Text.c_str(), LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, &SecurityHandle ); DWORD err = GetLastError(); LPVOID lpMsgBuf; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language (LPTSTR) &lpMsgBuf, 0, NULL ); char temp[500]=""; sprintf(temp,"%s",lpMsgBuf); MessageBoxA(0,temp,0,0);so geht auch alles, aber es kommt folgender fehler:
Der Client besitzt ein erforderliches Recht nicht.jetzt meine frage, wie kann ich dieses flag setzen bzw. meine programme trotzdem starten!? vllt habt ihr sowas ja schonmal gemacht, ich komme im moment leider nicht als noob dahinter und ich hab mir wirklich mühe gegeben.
MfG Radiation2K5
-
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.
-
Radiation2K5 schrieb:
jetzt meine frage, wie kann ich dieses flag setzen bzw. meine programme trotzdem starten!?
Gar nicht. Selbst wenn du der Administartorengruppe angehörst hast du nicht die erforderlichen Rechte, um diese Privileg zu aktivieren. Dies dürfen nur Anwendungen des Systemkontos, also in der Regel Dienste. Willst du ein Programm unter einem anderen Account starten, nimm CreateProcessWithLogonW.
-
Luckie schrieb:
Selbst wenn du der Administartorengruppe angehörst hast du nicht die erforderlichen Rechte, um diese Privileg zu aktivieren.
Das ist Quatsch. Ein Admin kann jedes Privileg aktivieren.
-
also hab das jetzt zum laufen bekommen, nochmak fettes dankeschön.
nächstes problem:
nun möchte ich das erzeugte fenster/die erzeugten fenster manipulieren. dazu benötige ich ja das fenster handle, also versuche ich das per EnumThreadWindows und der PROCESS_INFORMATION struktur, die ja nun gefüllt ist.dieser code, will aber nicht funktionieren:
BOOL CALLBACK EnumThreadWndProc( HWND hwnd, LPARAM lParam) { MessageBoxA(NULL,"hier fenster maipulieren",NULL,NULL); return TRUE; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { PROCESS_INFORMATION pi = {0}; STARTUPINFO si = {0}; wchar_t Username[256]= L"", Domain[256]= L"", Password[256]= L"", AppName[256]= L""; Edit1->Text.WideChar(Username,256); Edit3->Text.WideChar(Domain,256); Edit4->Text.WideChar(Password,256); Edit2->Text.WideChar(AppName,256); bool ret = CreateProcessWithLogonW(Username, Domain, Password, LOGON_WITH_PROFILE, AppName, NULL, CREATE_UNICODE_ENVIRONMENT, NULL, NULL, &si, &pi ); EnumThreadWindows(pi.dwThreadId, EnumThreadWndProc, 0); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); } //---------------------------------------------------------------------------ich erhalte diese compilerfehler:
[C++ Fehler] Unit1.cpp(105): E2034 Konvertierung von 'int (__stdcall * (_closure )(void *,long))(void *,long)' nach 'int (__stdcall *)()' nicht möglich[C++ Fehler] Unit1.cpp(105): E2342 Keine Übereinstimmung des Typs beim Parameter 'lpfn' ('int (__stdcall *)()' erwartet, 'void' erhalten)
irgendwas muss da beim aufruf nicht stimmen, aber ich komm da net druf bei so vielen datentypen und zeug.
bidde helft mir so wie oben auch schon

danke im voraus
MfG Radiation2k5
-
SE_TCB_NAME schrieb:
Luckie schrieb:
Selbst wenn du der Administartorengruppe angehörst hast du nicht die erforderlichen Rechte, um diese Privileg zu aktivieren.
Das ist Quatsch. Ein Admin kann jedes Privileg aktivieren.
Er kann aber kein Privileg aktivieren, was er nicht besitzt. Und per default besitzt er es wohl nicht: http://www.delphipraxis.net/post232392.html#232392
Und damit ist es eigentlich so ziemlich unbrauchbar, wenn ich als eingeschränkter Nutzer ein Programm mit dem Administratoraccount starten will. Wie ich es zum Beispiel in diesem Tool von mir gemacht habe.
-
Luckie schrieb:
SE_TCB_NAME schrieb:
Luckie schrieb:
Selbst wenn du der Administartorengruppe angehörst hast du nicht die erforderlichen Rechte, um diese Privileg zu aktivieren.
Das ist Quatsch. Ein Admin kann jedes Privileg aktivieren.
Er kann aber kein Privileg aktivieren, was er nicht besitzt.
Er kann es sich holen.... mit LsaAddAccountRights.
-
Das mag ja sein, aber für ein Tool wie mein RunAsUser ist das aber nicht brauchbar.
-
es geht doch jetzt die anwendung zu starten, auch mit anderen rechten! das problem ist eigentlich ein anderes, bidddde oben lesen.
MfG Radiation2K5
-
Luckie schrieb:
Das mag ja sein, aber für ein Tool wie mein RunAsUser ist das aber nicht brauchbar.
Es ging aber nicht um dein bescheuertes Tool.
-
WindowsFreak schrieb:
Luckie schrieb:
Das mag ja sein, aber für ein Tool wie mein RunAsUser ist das aber nicht brauchbar.
Es ging aber nicht um dein bescheuertes Tool.
Danke für die konstruktive Kritik.
@Radiation2K5: Sorry, C/C++ ist nicht meine Stärke.
-
Hallo,
Beitarg aus der Versenkung geholt

CreateProcessWithLogonW möchte ich nicht verwenden, da es nicht auf Win NT funz.Also CreateProcessAsUser. Die Doku spukt aus zu LogonUser ...
The process that calls LogonUser must have the SE_TCB_NAME privilege.
The privilege does not need to be enabled.Wie kann ich nun meinem Process das Privileg geben ... nur geben nicht aktivieren ...

Besten Dank und Grüße
RB
-
Enabling and Disabling Privileges in C++
http://msdn.microsoft.com/library/en-us/secauthz/security/enabling_and_disabling_privileges_in_c__.aspPS: Deinem Prozess kannst Du dieses Provileg *NICHT* geben, sondern nur aktivieren, wenn Du es schon hast!
Wenn Dein Prozess dieses Provileg nicht hat, musst Du dich mit einem Account anmelden, der dieses Privileg het. Das ist nun mal Sinn und Zweck von Privilegien.
-
Oh, Danke !