Fehler bei LogonUser und CreateProcessAsUser



  • Hallo zusammen,

    ich möchte mit der Funktion LogonUser den Administrativen Account anmelden:

    LogonUser("Administrator",NULL,"xxxxxxx",LOGON32_LOGON_INTERACTIVE,LOGON32_PROVIDER_DEFAULT,&hToken);
    

    Das Ergebnis aus GetLastError lautet: 1314

    Was auch immer das heißem mag....

    Die Funktion CreateProcessAsUser:

    CreateProcessAsUser(hToken,NULL,NewFileName.c_str(),NULL,NULL,true,NORMAL_PRIORITY_CLASS | CREATE_NEW_PROCESS_GROUP,NULL,NULL,&stgStartupInfo,&stgProcessInfo)
    

    Liefert mit GetLastError den Wert 6 zurück...

    Was mache ich falsch???

    Danke
    Handyman



  • GetLastError()

    Wert 1314 bedeutet:
    Der Client besitzt ein erforderliches Recht nicht.

    Wert 6 bedeutet:
    Das Handle ist ungültig.

    Schau Dir doch nochmal LogonUser in der MSDN an. Da scheint was mit den Berechtigungen nicht zu stimmen...



  • handyman schrieb:

    Das Ergebnis aus GetLastError lautet: 1314

    Und gleichzeitig liefert LogonUser FALSE, ja? Dann schau schnell mal in <winerror.h>

    //
    // MessageId: ERROR_PRIVILEGE_NOT_HELD
    //
    // MessageText:
    //
    //  A required privilege is not held by the client.
    //
    #define ERROR_PRIVILEGE_NOT_HELD         1314L
    

    Dann kann ich nur raten, daß Du das auf Windows 2000 laufen lässt. Dort benötigst Du das Privilege SE_TCB_NAME. Der 'normale' User hält dieses Privielege zum Glück nicht.

    Abhilfe: Entweder verwendest Du CreateProcessWithLogonW oder Du verlagerst den Aufruf von LogonUser in einen Service.

    Liefert mit GetLastError den Wert 6 zurück...

    Irgendwie klar. Wenn LogonUser fehlschlägt, rufst Du CreateProcessAsUser mit einem ungültigen Token auf. Das bestätigt der Blick in <winerror.h>

    // MessageId: ERROR_INVALID_HANDLE
    //
    // MessageText:
    //
    //  The handle is invalid.
    //
    #define ERROR_INVALID_HANDLE             6L
    


  • Hallo King,

    was macht denn das Privileg "SE_TCB_NAME"??
    Sollte der Adminnutzer das nicht haben???

    Die Sache mit dem Dienst hab ich mir auch schon überlegt... Aber da gab es Probleme (http://www.c-plusplus.net/forum/viewtopic.php?t=50529)mit den zugehörigen DLL-Dateien, glaube ich...

    CU
    Dominique



  • handyman schrieb:

    was macht denn das Privileg "SE_TCB_NAME"??

    Das ist das Privielege "Act As Part of the Operating System".

    handyman schrieb:

    Sollte der Adminnutzer das nicht haben???

    Nein! Das ist nicht nötig.

    handyman schrieb:

    Die Sache mit dem Dienst hab ich mir auch schon überlegt... Aber da gab es Probleme (http://www.c-plusplus.net/forum/viewtopic.php?t=50529)mit den zugehörigen DLL-Dateien, glaube ich...

    Das Posting lässt keinerlei Rückschlüsse auf den Fehler zu. Ich kann dem auch an keiner Stelle entnehmen, daß das Probleme mit irgendwelchen Dlls sind.



  • Hallo,

    habe das nun wie folgt gemacht:

    CreateProcessWithLogonW(WideString("Administrator"),WideString("."),WideString("xxxxxxx"),LOGON_WITH_PROFILE,WideString(NewFileName.c_str()),NULL,NULL,NULL,NULL,NULL,&stgProcessInfo
    

    Nun kommt an dieser Stelle eine AccessViolation .... 😞 😞

    CU
    Dominique



  • Ich habe von rechts angefangen, mir die Parameter anzuschauen. Nun bin ich beim Zweiten (lpStartupInfo) angelangt. Aber ich kann in der Dokumentation keinen Hinweis darauf finden, daß dieser Parameter NULL sein darf.


Anmelden zum Antworten