AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi WINAPI-Funktionen Windows Versionsabhängig
Thema durchsuchen
Ansicht
Themen-Optionen

WINAPI-Funktionen Windows Versionsabhängig

Ein Thema von RWarnecke · begonnen am 19. Jan 2008 · letzter Beitrag vom 22. Jan 2008
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#11

Re: WINAPI-Funktionen Windows Versionsabhängig

  Alt 22. Jan 2008, 19:59
Zitat von RWarnecke:
Gibt es vielleicht eine Möglichkeit mit einem Befehl mehrere Funktionen einer DLL zu überprüfen.
Dafür kenne zumindest ich keine Möglichkeit.

BTW: Es gibt keine if-Schleifen
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#12

Re: WINAPI-Funktionen Windows Versionsabhängig

  Alt 22. Jan 2008, 20:02
Du könntest dir maximal dein eigenes GetProcAddress schreiben. Aber das fällt für mich kaum unter "sinnvoll". Da bist du so viel schneller. Oder vielleicht.... also eine WinAPI-Funktion gibt es nicht. Du müsstest, dann ja eine Liste übergeben. und eine Liste zurückbekommen.

IF-Schleifen uch:RoterKasten
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#13

Re: WINAPI-Funktionen Windows Versionsabhängig

  Alt 22. Jan 2008, 20:03
Zitat von DeddyH:
BTW: Es gibt keine if-Schleifen
Kommt davon, wenn man sich anderen Sourcecode anschaut und die Antwort schreibt.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#14

Re: WINAPI-Funktionen Windows Versionsabhängig

  Alt 22. Jan 2008, 21:16
Du kannst dir maximal eine Funktion bauen, dir die eine Liste füllt o.ä. (je nachdem wie flexibel du die funktionen brauchst):
Delphi-Quellcode:
function getProcList(lib:Integer;const FunctionNames:TStringlist):boolean;
var i:integer;
    addr:pointer;
begin
  result:=true;
  for i:=0 to Functionnames.count-1 do
  begin
    addr:=getprocaddress(lib,pchar(functionNames.names[i]));
    if addr=nil then
    begin
      result:=false;
      exit;
    end;
    Functionnames.ValueFromIndex[i]:=inttostr(integer(addr));
  end;
end;
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#15

Re: WINAPI-Funktionen Windows Versionsabhängig

  Alt 22. Jan 2008, 21:26
Hallo Sirius, das wäre eine Idee. Ich lasse mir die mal durch den Kopf gehen. Ich danke Dir schonmal für den Denkanstoss.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#16

Re: WINAPI-Funktionen Windows Versionsabhängig

  Alt 22. Jan 2008, 21:48
Und wenn wir bei optimieren sind: Jedesmal getprocaddress neu anstoßen, bedeutet ja auch jedesmal die Tabelle mit den Exporteinträgen von vorne durchwühlen, bis die strings übereinstimmen. Da kann man natürlich auch einmal durchgehen. Hier allerdings bis zum bitteren Ende, ob das Vorteile bringt

Delphi-Quellcode:
function getProcList(libs:array of hModule;const FunctionNames:TStringlist):boolean;
var Exp:PImageExportDirectory;
    i,a:integer;
    name:string;
    addr:pointer;
    index:integer;
    listfilled:integer;
    lib:integer;
begin

  try

    listfilled:=0;


    for a:=0 to high(libs) do
    begin

      lib:=libs[a]; //a-te Library aus libs lesen

      if (lib=0)or
         (PWord(pointer(lib))^<>$5A4D)or
         (PImageNTHeaders(PImageDosHeader(pointer(lib))^._lfanew+lib)^.Signature<>$4550)
         then continue; //ist keine Win-DLL/EXE


      //ExportTabelle finden
      Exp:=pointer(PInteger(@PImageNTHeaders(PImageDosHeader(pointer(lib))^._lfanew+lib)^.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT])^+lib);

      //alle Export-Einträge durchlaufen
      for i:=0 to exp^.NumberOfNames-1 do
      begin
        //Name der i-ten Export-Funktion
        name:=pchar(pinteger(integer(exp^.AddressOfNames)+lib+i*4)^+lib);

        //Name in Liste suchen
        index:=Functionnames.IndexOfName(name);
        if index>=0 then
        begin
          //Adresse der i-ten Export-Funktion
          addr:=pointer(pinteger(integer(exp^.AddressOffunctions)+lib+i*4)^+lib);
          //Adresse in Liste speichern
          Functionnames.ValueFromIndex[index]:=inttostr(integer(addr));

          inc(listfilled);
        end;
      end;
    end;

    result:=listfilled=Functionnames.Count;

  except
    result:=false; //was auch immer
  end;
end;



procedure TForm1.Button1Click(Sender: TObject);
var list:TStringlist;
begin
  list:=TStringlist.create;
  list.Add('CreateWindowExA=');
  list.Add('CreateWindowExW=');
  list.add('GetProcAddress=');
  if getProcList([getmodulehandle('user32.dll'),
                  getmodulehandle('kernel32.dll')],
                  list) then memo1.lines.addstrings(list);
end;
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#17

Re: WINAPI-Funktionen Windows Versionsabhängig

  Alt 22. Jan 2008, 22:39
Du kannst auch die JEDI API verwenden. Die macht, wenn dynamisch compiliert, das alles automatisch für dich. Es wird tatsächlich nur einmal geladen.
Man muss nur überprüfe, ob der Funktionspointer nicht nil ist oder einfach try/except verwenden, wenn die Fkt aufgerufen wird.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 11:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz