AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Prism ADOConnection und GetProviderNames
Thema durchsuchen
Ansicht
Themen-Optionen

ADOConnection und GetProviderNames

Ein Thema von caustic · begonnen am 9. Dez 2005 · letzter Beitrag vom 12. Jan 2006
 
caustic

Registriert seit: 17. Mai 2004
Ort: Villingen-Schwenningen
20 Beiträge
 
Delphi XE2 Architect
 
#2

Re: ADOConnection und GetProviderNames

  Alt 18. Dez 2005, 00:05
Das Problem, besteht weiterhin und ist anscheinend nicht so einfach zu lösen, naja...
Trotzdem hole ich das hier nochmal hoch in der Hoffnung jemand weiß ne einfache Lösung, hier z.B. mal eine Sache aus Delphi .Net bei einer Winforms Anwendung.
Ab und zu muss man ja bei einem Programm überprüfen, ob die Anwendung mit Administratorrechten läuft also auch schreibenden Zugriff auf die Registry und den HKLM hat. So sah das mit Delphi Win32 aus:
Delphi-Quellcode:
function IsAdmin: Boolean;
const
  SECURITY_NT_AUTHORITY: TSIDIdentifierAuthority =
  (Value: (0, 0, 0, 0, 0, 5));
  SECURITY_BUILTIN_DOMAIN_RID = $00000020;
  DOMAIN_ALIAS_RID_ADMINS = $00000220;

var
  hAccessToken: THandle;
  ptgGroups: PTokenGroups;
  dwInfoBufferSize: DWORD;
  psidAdministrators: PSID;
  x: Integer;
  bSuccess: BOOL;
begin
  Result := False;
  bSuccess:=False;
  ptgGroups:=nil;
  psidAdministrators:=nil;
  try
    bSuccess := OpenThreadToken(GetCurrentThread, TOKEN_QUERY, True,
      hAccessToken);
    if not bSuccess then
    begin
      if GetLastError = ERROR_NO_TOKEN then
      bSuccess := OpenProcessToken(GetCurrentProcess, TOKEN_QUERY,
        hAccessToken);
    end;
    if bSuccess then
    begin
      GetMem(ptgGroups, 1024);
      bSuccess := GetTokenInformation(hAccessToken, TokenGroups,
        ptgGroups, 1024, dwInfoBufferSize);
      if bSuccess then
      begin
        AllocateAndInitializeSid(SECURITY_NT_AUTHORITY, 2,
          SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS,
          0, 0, 0, 0, 0, 0, psidAdministrators);
        {$R-}
        for x := 0 to ptgGroups.GroupCount - 1 do
          if EqualSid(psidAdministrators, ptgGroups.Groups[x].Sid) then
          begin
            Result := True;
            Break;
          end;
        {$R+}
      end;
    end;
  finally
    if bSuccess then
      CloseHandle(hAccessToken);
    if Assigned(ptgGroups) then
      FreeMem(ptgGroups);
    if Assigned(psidAdministrators) then
      FreeSid(psidAdministrators);
  end;
end;
Der Code ist aus der JCL wenn mich nicht alles täuscht und so sieht das unter .NET aus

in die USES muss folgendes Aufgenommen werden:
System.Security.Principal;

und die Funktion schrumpft auf:
Delphi-Quellcode:
function IsAdmin : boolean;
begin
Result := WindowsPrincipal.Create(WindowsIdentity.GetCurrent).IsInRole(WindowsBuiltInRole.Administrator);
end;
So eine Lösung suche ich halt für die Storie mit der OleDB Provider Liste.

Gruß
caustic
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz