Windows Benutzername und Passwort
-
Erst mal danke für die Antwort
Aber ich weiß nicht wie ich die Funktion benutzen soll.
Ich habe IsValidLogon() in meine Unit eingefügt und habe sie getestet.BOOL IsValidLogon(PCHAR username,PCHAR password) { HANDLE hToken = NULL; BOOL bRet = LogonUser(username,NULL,password,LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_DEFAULT, &hToken); CloseHandle(hToken); return bRet; } void __fastcall TForm1::Button1Click(TObject *Sender) { if (IsValidLogon("name", "pass")) ShowMessage("Klappt!"); else ShowMessage("Klappt nicht!"); }
Es wird gar keine MessageBox angezeigt. Was mache ich falsch?
-
wieczo schrieb:
Es wird gar keine MessageBox angezeigt. Was mache ich falsch?
Wohl irgendwas Anderes was nicht in Zusammenhang mit dem geposteten Code steht. Kannst ja einen Aufruf von Beep einfügen um zu sehen, ob deine Funktion überhaupt aufgerufen wird.
-
Dieser Thread wurde von Moderator/in Jansen aus dem Forum VCL/CLX (Borland C++ Builder) 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.
-
Ächtz, dazu benutzt man SSPI und versucht nicht den Benutzer einzuloggen.
-
Ächz, dann eben so http://support.microsoft.com/default.aspx?scid=kb;EN-US;180548 ächz
On Windows XP, it is no longer required that a process have the SE_TCB_NAME privilege in order to call LogonUser. Therefore, the simplest method to validate a user's credentials on Windows XP, is to call the LogonUser API.
Und LogonUser hat ja nicht viel damit zu tun, einen Benutzer einzuloggen. Es wird zumindest kein Desktop für den Benutzer erstellt, die Autostarteinträge nicht ausgeführt und der Anmeldesound auch nicht abgespielt. :p
Außerdem will man im Normalfall auch die mit dem Token verbundenen Rechte nutzen, also ist ein LogonUser-Aufruf durchaus sinnvoll (also natürlich nicht wie in meinem Minimalbeispiel, bei dem das Handle sofort wieder geschlossen wird.)
-
Also wen ich den Artikel richtig interpretiere, dann ist es besser es über SSPI zu machen:
As another option, you can use the Security Support Provider Interface (SSPI) to do a network style logon with provided user credentials. This method of validation has the advantage of not requiring any special privilege, as well as working on all versions of Windows. The end result of using the SSPI services to validate the credentials is a logon that is analogous to calling the LogonUser API with the LOGON32_LOGON_NETWORK logon type.
Der Nachteil spielt hier wohl keine Rolle:
biggest downside to this type of logon is that you cannot access remote network resources after impersonating a network type logon.
Was aber wichtiger ist, es läuft auch auf Windows 2000 und NT, was beo LogOnUser nicht der Fall ist, da:
On Windows XP, it is no longer required that a process have the SE_TCB_NAME privilege in order to call LogonUser.
-
The end result of using the SSPI services to validate the credentials is a logon that is analogous to calling the LogonUser API with the LOGON32_LOGON_NETWORK logon type.
Ja, du hast schon Recht, dass die SSIP-Variante natürlich die bevorzugte API für komplexe Authentifizierungs-Angelegenheiten ist. Ich wollte nur deutlich machen, dass die LogonUser-Variante kein verachtendes "Ächz" wert ist. Ein "Ächz" wird es wohl eher wert sein, dem wieczo zu erklären, wie der SSPI-Beispielcode denn funktioniert.
-
-
Btw weil solch eine Frage in letzter Zeit schonmal aufkam - Ich würde mein Kennwort nie in solch eine Anwendung eingeben.
Falls du ein kritisches Systemwartungstool programmierst, kannst du ja alles so einrichten, dass es nur mit Administratorrechten ausführbar ist, die man für die normale Arbeit am Rechner auch nicht haben sollte.
Und wenn ich das Programm schnell ausführen will, so kann ich das ja seit Windows 2000 über den Dialog "Ausführen als..." machen, in den ich dann auch vertrauensvoll mein Kennwort eingebe. Natürlich ist das auch keine hundertprozentige Sicherheit, da das Formular wohl nicht vor Abfangen der Kennworteingabe geschützt ist, aber es ist mir auf jeden Fall sicherer.Und falls es nur darum geht, dein Tagebuch oder Ähnliches mit einer zusätzlichen Kennworteingabe zu versehen, damit es keiner lesen kann nur weil du vergessen hast, deinen Rechner zu sperren so wäre das wohl auch besser zu lösen, indem du entweder nur einem anderen Account den Zugriff gestattest oder ein eigenes Benutzerdatensystem verwendest.
@Luckie:
Hast du eine Ahnung, was es mit der markierten Aussage auf sich hat? Ist die nur gültig wenn ForceGuest auf 1 gesetzt ist oder ist sie unabhängig von der Option? Logisch wäre es ja, wenn die Punkt 2 und 3 als Folgepunkte von Punkt 1 gemeint wären, aber das ist irgendwie unschlüssig geschrieben.
On Windows XP, the ForceGuest registry value is set to 1 by default in the following registry key:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
On a Windows XP computer that is a member of a workgroup:• If ForceGuest is enabled (set to 1), SSPI will always try to log on using the Guest account.
• If the Guest account is enabled, an SSPI logon will succeed as Guest for any user credentials.
• If the Guest account is disabled, an SSPI logon will fail even for valid credentials.
• If ForceGuest is disabled (set to 0), SSPI will log on as the specified user.
-
Puh, so genau, habe ich mir das nicht angeguckt, und wenn ich das so sehe, weiß ich auch warum.