Autor Beitrag
Harry M.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 754

Win 2000, XP
D2005
BeitragVerfasst: So 31.07.05 16:47 
Hi

ich möchte meine Client-Server-Anwendung für die ein Authentifizierung notwening ist etwas ändern Bissher habe ich den Server das Password etc "verwalten" lassen. Ich möchte aber jetzt auf die Benutzerkonten umstellen. Das heißt mein Programm soll in den lokalen Konten prüfen ob User / Pass richtig sind und entsprechend verfahren.

Ich habe aber etwas Probs mit LogonUser. Ich bekomme dort Fehlermeldung mit den ich nicht wirklich was anfangen kann. Hier mal der Code

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var
  ErrCode: Cardinal;
begin
  LogonUser('User''Domain''Pass', LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ErrCode);
  ShowMessage('ErrCode: '+IntToStr(ErrCode)+' = '+SysErrorMessage(ErrCode)+#10#13
    +'GetLastError: '+IntToStr(GetLastError)+' = '+SysErrorMessage(GetLastError));
end;

Ich komme aber immer bei "ErrCode" auf 0 und bei "GetLastError" auf 1314.

ErrCode: 0 = Der Vorgang wurde erfolgreich beendet
GetLastError: 1314 = Der Client besitzt ein erforderliches Recht nicht

Was is hier nicht richrig?!

_________________
Gruß Harry
Et spes me per dies sine te ducat et amor me ferat, si dolor spem tollit.
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: So 31.07.05 16:51 
msdn.microsoft.com/l...curity/logonuser.asp hat folgendes geschrieben:
If the function fails, it returns zero. To get extended error information, call GetLastError.


Also alles in Ordnung ;)

AXMD
Harry M. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 754

Win 2000, XP
D2005
BeitragVerfasst: So 31.07.05 17:17 
Ne leider nicht alles klar, weil ich mit falscher Kennung zum Selben Ergebnis komme.

_________________
Gruß Harry
Et spes me per dies sine te ducat et amor me ferat, si dolor spem tollit.
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: So 31.07.05 17:28 
Ja eben. Ich zitiere nochmal:

msdn.microsoft.com/l...curity/logonuser.asp hat folgendes geschrieben:
If the function fails, it returns zero.

Heißt: wenn ein Fehler auftritt, ist ErrCode (deine Variable) 0; wenn kein Fehler auftritt, ist ErrCode nicht 0
msdn.microsoft.com/l...curity/logonuser.asp hat folgendes geschrieben:
To get extended error information, call GetLastError.

Und eben, wenn ErrCode = 0, dann fragst du LastErrorCode ab, ansonsten nicht. Klar soweit?

AXMD
Harry M. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 754

Win 2000, XP
D2005
BeitragVerfasst: So 31.07.05 17:40 
Dann komme ich ja ebenauf -> GetLastError: 1314 = Der Client besitzt ein erforderliches Recht nicht
Welches Recht besitze ích denn nicht. Ich bin als Admin an meinem Rechner angemeldet. Muss ich noch Privilegien setzten oder sowas?

_________________
Gruß Harry
Et spes me per dies sine te ducat et amor me ferat, si dolor spem tollit.
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: So 31.07.05 18:05 
user profile iconHarry M. hat folgendes geschrieben:
Dann komme ich ja ebenauf -> GetLastError: 1314 = Der Client besitzt ein erforderliches Recht nicht
Welches Recht besitze ích denn nicht. Ich bin als Admin an meinem Rechner angemeldet. Muss ich noch Privilegien setzten oder sowas?


Dabei kann ich dir leider nicht weiterhelfen. Versuch mal, über MSDN was rauszufinden.

AXMD
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: So 31.07.05 18:08 
Ich zitiere aus dem SDK:
PSDK hat folgendes geschrieben:
The process calling LogonUser requires the SE_TCB_NAME privilege. If the calling process does not have this privilege, LogonUser fails and GetLastError returns ERROR_PRIVILEGE_NOT_HELD.

Und das TCB-Privilege besitzen nur Services. Es gibt aber sowieso bessere Möglichkeiten das Passwort zu überprüfen als den Benutzer einzuloggen: Suche in: Delphi-Forum, Delphi-Library SSPI

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
Harry M. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 754

Win 2000, XP
D2005
BeitragVerfasst: So 31.07.05 18:12 
Ich glaube da liege ich gan nicht so falsch. Wenn ich GetLasError auswerte komme ich immer auf "ERROR_PRIVILEGE_NOT_HELD" in den MSDN steht "A required privilege is not held by the client."
msdn.microsoft.com/l...odes__1300-1699_.asp
Welche Privilegien müsste ich den setzten ?

_________________
Gruß Harry
Et spes me per dies sine te ducat et amor me ferat, si dolor spem tollit.
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: So 31.07.05 18:20 
Steht doch da - du benötigst das SE_TCB_NAME Privileg. TCB steht dabei für Trusted Computing Base. Diese Privileg kann man aber nicht einfach so setzen, wie zB das Debug-Privileg (das Debug-Privileg kann eigentlich auch nicht wirklich "setzen", entweder man hat es oder man hat es nicht, es ist nur einfach standardmäßig deaktiviert. Wenn man es aber nicht hat, dann kann man es auch nicht aktivieren). Das TCB-Privilege besitzen, wie der Name bereits sagt, nur "vertrauenswürdige" Prozesse - die Services. Diese sind insofern als vertrauenswürdig einzustufen, da sie nur von einem Admin installiert werden können und man davon ausgeht, dass dieser weiß was er tut. Andere Prozesse besitzen dieses Privileg nicht (außer sie wurden von einem Service aus gestartet).

Einzige Möglichkeit LogonUser zu verwenden ist also einen Service zu programmieren. Eine andere Möglichkeit ohne Service und ohne LogonUser (und die würde ich vorziehen) bietet das "Security Support Provider Interface" (SSPI) - siehe Suchlink in meinem letzten Posting.

Gruß, Motzi

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
Harry M. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 754

Win 2000, XP
D2005
BeitragVerfasst: So 31.07.05 20:29 
@Motzi: Danke. Ich habe Dein 1. Posting erst gelesen als ich meine schon abgesckickt hatte :( Und dann ach musst ich dringend weg. Ich probiere mal den Weg den Du vorgeschlagen hast. Das Programm will ich sowie so noch als Service umbauen (aus mehren Grunden). Ein Grund mehr endlich damit anzufangen :lol:

_________________
Gruß Harry
Et spes me per dies sine te ducat et amor me ferat, si dolor spem tollit.