"Returns TRUE if the user is a member of the Administrator's group; otherwise, FALSE."
Die Funktion macht alles richtig, sie gibt dir zurück ob der User der Admingruppe angehört, oder nicht.
Hab mal schnell was in notepad zusammengestellt.. Sag mal bescheid ob es so funktioniert.^^
EDIT:// So kam jetzt zum Testen.. Also hier die funktionierende Funktion.
Delphi-Quellcode:
function CheckAdmin : boolean;
var
hTok : THandle;
ELV : TOKEN_ELEVATION;
sz : DWORD;
begin
Result := false;
// Kannst anstatt den Rückgabewert von GetCurrentProcess() natürlich ein anderes Processhandle angeben.
if OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, hTok) then
begin
sz := sizeof(TOKEN_ELEVATION);
if GetTokenInformation(hTok, TokenElevation, @ELV, sizeof(ELV), sz) then
begin
Result := Boolean(ELV.TokenIsElevated); // Admin == true^^
end;
if hTok <> 0 then
// token wieder schließen falls OpenProcessToken
// erfolgreich war
CloseHandle(hTok);
end;
end;
// if CheckAdmin then showmessage('Admin!');
EDIT:// Neuwutel.
Du solltest dir vorher auf
msdn die Funktionen genau durchlesen, bevor du von irgendwelchem "die Funktion stößt an ihre Grenzen" redest, obwohl die Funktion nicht für dein Vorhaben geeignet ist.
Sie ist dafür da, um herauszufinden ob der angemeldete Benutzer in der Admingruppe ist. Z.B. gibt es ja den "
UAC bypass".
IQ FSK > 130:
http://download.pureftpd.org/pub/misc/UAC.cpp
Da wird z.B. gezeigt wie man die autoelevation die im Explorer stattfindet wenn man auf "more details"(windoof 8) oder "alle brohzesse anzeigen" (windows 7) klickt. (musste ich hier mal erwähnen, ist echt interessant).
Der bypass ist nur möglich, wenn der User sich in der Gruppe "Administrator" befindet => da wäre deine Funktion dann perfekt geeignet für um vorher zu prüfen ob wir den bypass nutzen können.
Zu deiner anderen Frage:
Im Normalfall hat nur das Gastkonto Gastrechte, die Rechte sind aber ziemlich gering für den Gast... #NNostalgie
Hab ich eigtl. erwähnt dass ich Iraner bin? Nein? Warum auch?