App-Login über Domain-Nutzer herstellen
-
Hast Du schon LogonUser(..) versucht (DocShoe hat dich schon darauf hingewiesen)?
Ev. musst Du dein Code noch umschreiben, dass er mit TCHAR's zurecht kommt oder stell das Characterset um - es ist jedenfalls keine gute Idee mit Unicode Characterset zu kompilieren und dann doch die Multibyte Variante der Funktion zu nehmen.
-
Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ (auch C++0x, bzw. C++11) 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.
-
Wenn ich in die WinBase.h schaue finde ich folgendes define.
#ifdef UNICODE #define LogonUser LogonUserW #else #define LogonUser LogonUserA #endif // !UNICODE
Und da mein Projekt bei "Character Set" -> "Not Set" drinnen hat gehe ich mal von LogonUserA aus. Jedoch wenn ich LogonUser() im Code aufrufe dann verweißt er mich auf die LogonUserW() und diese hätte gerne WCHAR.
Wie bereits erwähnt funktioniert meine Anmeldung reibungslos mit LogonUserA(). Der einzige Splitter in meinem Auge ist eben der daraus zurückgeworfene Errorcode 126.
Als ich mein Programm an einem anderen Rechner hab laufen lassen trat dieser Error nicht mehr auf. Soweit sogut. Aber dennoch erscheint er an meinem eigenen Rechner dem somit iwas fehlt was der andere hat.
Meine Frage also, was ist die Ursache für den auftretenden Fehler 126? Weiß das jemand :(?
-
Und was bedeutet der Fehlercode im Klartext? Könnte eventuell weiter helfen, als nur der Fehlercode.
-
Was gibt denn http://msdn.microsoft.com/en-us/library/windows/desktop/ms679351(v=vs.85).aspx aus?
Du bist zwar nicht der einzige, der den Fehler erhält, aber ne universale Lösung habe ich nicht finden können. Offenbar gibt es mehrere Ursachen für diesen Fehler.
Und: Welches Windows nutzt du?
bool b_passed = LogonUserA(ps_lpstrUser, ps_lpstrDomain, ps_lpstrPass, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, &hToken); dw_Err = GetLastError(); if((dw_Err != ERROR_SUCCESS)) qDebug() << "\t>\tSystem Error Codes: " << dw_Err;
Du weißt schon, dass das nicht ganz korrekt ist?
<a href= schrieb:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms679360(v=vs.85).aspx">If the function is not documented to set the last-error code, the value returned by this function is simply the most recent last-error code to have been set;
Ich habe in der LogonUser-Beschreibung nichts dergleichen finden können...
BOOL succeed = LogonUserA(ps_lpstrUser, ps_lpstrDomain, ps_lpstrPass, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, &hToken); if(succeed != BOOL()) { DWORD error_code = GetLastError(); qDebug() << "\t>\tSystem Error Codes: " << error_code; }
bb
-
Hallöchen
@_Luckie: Weiter oben habe ich den Fehlercode kurz beschrieben. Jedoch keinerlei Klartext dafür gefunden. Lediglich die Beschreibung "The specified module could not be found." sowie "ERROR_MOD_NOT_FOUND 126 (0x7E)". Von den System Error Codes von msdn.
Ich arbeite an einem Wind XP Pro SP3.
Auf deine erste Frage was die Funktion FormatMessage ausgibt kann ich leider nicht antworten weil ich sie ebenso wie LogonUser am Anfang nicht zum laufen bekomme ..
Ich weiß leider nicht genau was ich an Übergabeparameter übergeben muss. Ich weiß es steht bei deinem gesendeten Link dabei jedoch egal was für Werte ich übergebe es kommt beim Debugging immer zu einer "First chance exception" Mein Code:DWORD nSizeOfBuff = 1000; LPWSTR p_lpstrBuffer; DWORD errLpBuff = FormatMessageW(FORMAT_MESSAGE_FROM_STRING, NULL, 0, 0, p_lpstrBuffer, nSizeOfBuff, NULL); qDebug() << "\t>\terrLpBuff(DWORD): " << errLpBuff; qDebug() << "\t>\tp_lpstrBuffer: " << p_lpstrBuffer; DWORD error_code = GetLastError(); qDebug() << "\t>\tSystem Error Codes: " << error_code;
Wenn ich mir nun deinen folgenden Hniweis anschaue im Bezug auf:
If the function is not documented to set the last-error code, the value returned by this function is simply the most recent last-error code to have been set;
Verstehe ich nicht was du mit deinem darunterstehenden Code anderst bewirken willst. Die GetLastError() gibt mir ja auch den Fehler-Code 1326 oder so zurück wenn ich das falsche Passwort nutze. Also es bezieht sich schon auf die LogonUserA(). Insofern du das mit
Du weißt schon, dass das nicht ganz korrekt ist?
meintest. Oder auf was willst du hier genau hinweisen?
Wenn ich grad schon fragen stelle. Vllt weiß es ja einer rein zufällig der hier reinschaut
Hab eine dll die ich von LabView erstellt habe. Diese Rufe ich auf und bekomme leider immer folgende Meldungen:First-chance exception at 0x7c812afb in Gekko.exe: Microsoft C++ exception: LVExcept at memory location 0x0192de98.. First-chance exception at 0x7c812afb in Gekko.exe: Microsoft C++ exception: [rethrow] at memory location 0x00000000..
Ich weiß leider auch nicht wie ich in der DLL debuggen soll. Es gibt ja sowas wie "Attach to Process" aber dabei habe ich bisher nur eine C Dll die von LabView aus gecalled wird debuggt. Ich müsste es allerdings andersrum machen^^.
Trotzallem bekomme ich von der DLL die gewünschte Ausgabe+ eben diesen Error...
-
Also ich habe das mal mit SSPI gemacht: http://msdn.microsoft.com/en-us/library/windows/desktop/aa380493(v=vs.85).aspx Damit kann man überprüfen ob Benutzer und Passwort übereinstimmen und gültig sind.
-
KT_Adi schrieb:
bool b_passed = LogonUserA(ps_lpstrUser, ps_lpstrDomain, ps_lpstrPass, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, &hToken); dw_Err = GetLastError(); if((dw_Err != ERROR_SUCCESS)) qDebug() << "\t>\tSystem Error Codes: " << dw_Err;
Das ist doch Schrott. Du solltest GetLastError nur ausführen wenn, der Logon fehlschlägt. Wenn LogonUserA einen Wert !=0 liefert dann hattest Du doch Erfolg. Was interessiert Dich dann bitte GetLastError?
-
@Martin Richter:
Naja es interessiert mich ob ich auch wirklich nichts falsch mache und hier nicht noch die komplette Domäne iwie beschädige.Aber du hast Recht. Solange meine Function != 0 zurückwirft is eh alles in Butter was die Function angeht. Aber ich dachte es wäre eine Art normale Überprüfung die einem beim Login auftretende Fehler oder dergleichen anzeigt.
Return value If the function succeeds, the function returns nonzero. [i]If the function fails, it returns zero. To get extended error information, call GetLastError.[/i]
Dann eine andere Frage. Gibt es eine weitere Möglichkeit zu checken ob alles sauber funktioniert hat oder hab ich lediglich den Boolean-Wert im Sinne von 0 oder !0?
peace Adi
-
KT_Adi schrieb:
Return value
If the function succeeds, the function returns nonzero.
If the function fails, it returns zero. To get extended error information, call GetLastError.
Was ist an dieser Aussage bitte unklar?