Hi Leute,
ich bin von der nonVCL zur LogonUser Fkt gerutscht, bei dieser benötige ich allerdings die SE_TCB_NAME Privilege, ich hatte zunächst dies mit OpenProcessToken, LookUpPrivilegeValue und notfalls per AdjustTokenPrivileges zu setzen versucht, doch ich bekomme jetzt die Meldung ERROR_ACCESS_DENIED bei diesem Code:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| Function UserLogon: boolean; var NeededBytes : DWord; tokenbuf : TTokenPrivileges; prevtokenbuf : TTokenPrivileges; hToken : THandle; PCName, UserName : string; begin result := false; PCName := ReturnComputerName; UserName := ReturnUser; if OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES,hToken)then begin if not LookupPrivilegeValue(nil,'SeTchPrivilege',tokenbuf.Privileges[0].Luid) then begin tokenbuf.PrivilegeCount := 1; tokenbuf.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; if AdjustTokenPrivileges(hToken,False,tokenbuf,sizeOf(TTokenPrivileges), prevtokenbuf,NeededBytes) then result := LogonUser(UserName,'',PChar(InputBox(UserName,'Please enter your password','')),LOGON32_LOGON_NETWORK,LOGON32_PROVIDER_DEFAULT,TOKEN); end; end; end; |
könnte man das
Recht per LsaAddAccountRights bzw. LSA API lösen? Oder gibs da keine Möglichkeit (nur Kernel intern?) ?
Zu den LSA Datenstructuren, gibs die in ner Delphi Unit oder muss ich selbst erstellen ? (Wenn ja in welcher)
(Im SDK wird die Advapi32.lib und Ntsecapi.h genannt.)
Umgebungsvariablen: Win2k, User mit Admin Rechten
Ich hatte da auch ne nonprogramming Lösung gelesen
Systemsteuerung\Verwaltung\Lokale Sicherheitsrichtlinie ausführen; dort Lokale Richtlinien -> Zuweisen von Benutzerrechten auswählen und schließlich doubleClick auf 'Einsetzen als Teil des Betriebssystems' dort kann man dann die Personen hinzufügen. Laut der Infoquelle (deren URL ich leider nicht mehr weiss -> google.search) sollte dies die Fehlermeldung ERROR_PRIVILEGE_NOT_HELD verhindern.
Moderiert von
UGrohne: Code- durch Delphi-Tags ersetzt