Hallo
ich habe ein Problem bei der Überprüfung eines Windows-Kontos.
Dabei soll geprüft werden, ob der angemeldete Benutzer zu der Liste der Administratoren bzw.
selbst Administrator ist.
Ich verwende dazu folgenden Code:
Delphi-Quellcode:
function IsAdmin: Boolean;
const
DOMAIN_ALIAS_RID_ADMINS = $00000220;
SECURITY_BUILTIN_DOMAIN_RID = $00000020;
SECURITY_NT_AUTHORITY: TSIDIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 5));
var
Admin: Boolean;
AdmGroup: PSID;
begin
Admin := AllocateAndInitializeSid(SECURITY_NT_AUTHORITY,
2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS,
0, 0, 0, 0, 0, 0, AdmGroup);
if (Admin) then
begin
If (not CheckTokenMembership(0, AdmGroup, Admin)) then
Admin := False;
FreeSid(AdmGroup);
end;
Result := Admin;
end;
Leider gibt es bei mir ein das Problem, das eine IF-Abfrage wohl überfordert ist:
Delphi-Quellcode:
if not(isAdmin) then
begin
showmessage('1111'); // dieser Dialog wird angezeigt
I := MessageDlg(rs_App_User_Mode,
mtWarning,[mbYes, mbNo],0);
if I = mrNo then
begin
showmessage('ooooo'); // dieser Dialog wird nicht angezeigt
FreeBDESetup;
Form1.Close;
SplashForm.ProgressBar1.Position := 70;
SplashForm.isExit := true;
SplashForm.isMemE := true;
SplashForm.Close;
end;
end;
showmessage('uuuu'); // hier wird kein Dialog angezeigt.
mach da was falsch?