Einzelnen Beitrag anzeigen

CodeX

Registriert seit: 30. Okt 2004
471 Beiträge
 
Delphi 12 Athens
 
#5

AW: Per ProcessId prüfen, ob der Benutzer Admin ist (oder: ProcessId -> UserTokenHand

  Alt 27. Aug 2014, 23:32
Falls es jemanden interessieren sollte: Ich bin dem Problem auf die Spur gekommen. Die Ursache für das "falsche" Ergebnis der Abfrage liegt darin, dass anscheinend das UserToken bei einem durch UAC kontrollierten Benutzerkonto nicht wirklich den Gruppen-Benutzer representiert, den man glaubt zu prüfen. Das UserToken ist ein eingeschränktes Token (klar) und ist daher wohl automatisch lediglich Mitglied der normalen Benutzergruppe (nicht so klar). Das echte Token des eingeloggten Benutzers ist das LinkedToken davon. Dieses hat nicht nur die echten Administrator-Rechte sondern nur dieses lässt sich auf die korrekte Gruppenzugehörigkeit prüfen.
Ich wundere mich nur, dass ich dutzende Beispiele zur Prüfung der Gruppenzugehörigkeit gefunden habe, aber in keinem auch nur ein Wort zu dieser Problematik verloren wurde. Arbeiten alle mit Windows XP? Oder ohne UAC? Oder merkt einfach keiner, dass der Test ein falsches Ergebnis liefert?

Naja, hier ein bisschen Code dazu (nur der relevante Teil zur Veranschaulichung!), falls irgendwann mal jemand über das gleiche Problem stoßen sollte. In dem Fall habe ich es mit JWSCL gelöst.
Delphi-Quellcode:
...
  DuplicateTokenEx(UserToken.LinkedToken.TokenHandle, MAXIMUM_ALLOWED, nil, SecurityImpersonation, TokenPrimary, hElevatedToken);
  UserTokenElevated := TJwSecurityToken.CreateDuplicateExistingToken(hElevatedToken, MAXIMUM_ALLOWED);
  UserTokenElevated.ConvertToImpersonatedToken(SecurityImpersonation, MAXIMUM_ALLOWED);
  if UserInGroup(DOMAIN_ALIAS_RID_ADMINS, UserTokenElevated.TokenHandle) then
...
Nur Delphi schafft es, einem ein Lächeln zu schenken, wenn man sich beim Schreiben von := vertippt und stattdessen ein :) erscheint.
  Mit Zitat antworten Zitat