Benutzeranmeldung mit LogonUser



  • hallohallo,

    ich hab da mal ein problemchen. dieser code hier funktioniert auf meiner maschine (xp) aber auf keiner anderen.

    in CString m_Username, m_Pass lese ich vom benutzer die daten ein und mit GetComputerName hole ich mir automatisch den Rechnernamen.

    DWORD cchBuff = 256;    
        char    domain[MAX_COMPUTERNAME_LENGTH + 1];
        GetComputerName(domain, &cchBuff);
    
        LPTSTR  user = m_Username.GetBuffer(m_Username.GetLength());
        LPTSTR  pass = m_Pass.GetBuffer(m_Pass.GetLength());
    
        HANDLE  hUser;
    
        LogonUser(user,
            domain, 
            pass, 
            LOGON32_LOGON_INTERACTIVE, 
            LOGON32_PROVIDER_DEFAULT, 
            &hUser);
    
        ImpersonateLoggedOnUser(hUser);
    

    nachdem ich die nötigen sachen bearbeitet habe, rufe ich RevertToSelf auf und alles is schön.
    aber woran kann es liegen, dass es nur bei mir funktioniert? bei jedem test des programms wird immer der lokale admin mitgegeben.

    danke schonmal!



  • also, ich schätze, dass ich mal wieder im falschen forum gelandet bin. is sicher eher ne sache für winapi. sorry, ich muss es noch lernen.

    trotzdem: kann das problem vom logonuser() denn sein, dass das mit dem privilege SE_TCB_NAME zusammenhängt? habe ich da irgendwie einfluss drauf? wenn ja wie?



  • Ja und ja. 😉
    Letzteres kannst Du sogar ganz genau bestimmen: Schlägt LogonUser fehl, wird FALSE zurückgegeben. Jetzt kannst Du mit GetLastError genau bestimmen, woran es scheiterte. Da es aber zu 99% am fehlenden Privilege liegt, solltest Du Deinen Code in einen Service verpacken. Das Systemkonto hält das Privilege. Komme bitte nicht auf die Idee, das für jeden dahergelaufenden User freizuschalten!



  • das ist ja der punkt. das programm läuft auf rechnern(und nicht wenige), die normalerweise kaum rechte haben. es sind zwar größtenteils noch NT4 maschinen aber es ist ein update auf 2000 für alle rechner vorgesehen.
    das prog soll dort im systray liegen und wenn sich ein kollege per terminalclient oder netmeeting draufschaltet kann er es mit nem passwort freischalten und benutzen. nachdem er dann auch den lokalen admin + kennwort angegeben hat meldet sich das programm kurz an. macht seine arbeit und kehrt wieder zurück. ist es nich möglich, das privilege für diesen moment zu halten und dann wieder zu entfernen?
    mit einem service habe ich noch nie gearbeitet. ich bin noch frischling sozusagen.


Anmelden zum Antworten