Einzelnen Beitrag anzeigen

Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#83

AW: Its time to say goodbye Windows XP

  Alt 29. Jan 2013, 11:36
Wenn ich dann von Insider2004 mehr oder weniger bestätigt bekomme, daß die meisten (")Inkompatibilitäten(") zu Windows 2000 letztlich auf internen Versionsabfragen/-sperren beruhen (eigentlich eine an Kriminalität grenzende Dreistigkeit)
Wenn ich Funktionen nutze, die es nun einmal unter Windows 2000 nicht gab, dann baue ich auch eine Abfrage ein, das hat mit Kriminalität nix zu tun. Ich nutze dies z.B. für die Funktion IsUserAnAdmin, die es erst ab XP gibt, weil ich keine Lust hatte das manuell nachzuprogrammieren.
Letztlich geht es darum, daß diese "Inkompatibilitäten" nur auf Versionsabfragen /-sperren beruhen und nicht softwaretechnologisch bedingt sind. So drückte ich mich doch klar aus. Einfach mal richtig lesen. Sebastian, Du bist mir bisher nicht als solches Forenmitglied aufgefallen, das Beiträge nur halb liest bzw. versteht.

Daß eine Software auf einem Betriebsprogramm nicht laufen kann, wenn es Funktionen/Funktionsaufrufe benötigt bzw. zu benutzen versucht, die dieses nicht bietet (bieten kann), ist evident.

Ergänzung: Folgendes geistert in den Delphi-Foren umher. Ich glaube nicht, daß diese Funktion nicht vollumfänglich ihren Zweck erfüllt.

Delphi-Quellcode:
// IsAdmin    
// Autor: Nico Bendlin    
function IsAdmin: LongBool;    
var    
  TokenHandle: THandle;    
  ReturnLength: DWORD;    
  TokenInformation: PTokenGroups;    
  AdminSid: PSID;    
  Loop: Integer;    
begin    
  Result := False;    
  TokenHandle := 0;    
  if OpenProcessToken(GetCurrentProcess, TOKEN_QUERY, TokenHandle) then    
  try    
    ReturnLength := 0;    
    GetTokenInformation(TokenHandle, TokenGroups, nil, 0, ReturnLength);    
    TokenInformation := GetMemory(ReturnLength);    
    if Assigned(TokenInformation) then    
    try    
      if GetTokenInformation(TokenHandle, TokenGroups, TokenInformation,    
        ReturnLength, ReturnLength) then    
      begin    
        AdminSid := GetAdminSid;    
        for Loop := 0 to TokenInformation^.GroupCount - 1 do    
        begin    
          if EqualSid(TokenInformation^.Groups[Loop].Sid, AdminSid) then    
          begin    
            Result := True;    
            Break;    
          end;    
        end;    
        FreeSid(AdminSid);    
      end;    
    finally    
      FreeMemory(TokenInformation);    
    end;    
  finally    
    CloseHandle(TokenHandle);    
  end;    
end;

Geändert von Delphi-Laie (29. Jan 2013 um 11:41 Uhr)
  Mit Zitat antworten Zitat