Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Betriebssysteme (https://www.delphipraxis.net/27-betriebssysteme/)
-   -   APIs prüfen, ob existet (https://www.delphipraxis.net/169244-apis-pruefen-ob-existet.html)

himitsu 6. Jul 2012 09:41

Betriebssystem: Win 2000,Win XP,Win Vista,Win 7

APIs prüfen, ob existet
 
Moin,

gibt es nicht zufällig ein Programm, das man über sein Programm laufen lassen könnte, welches sich anschaut welche APIs verwendet wurden und einem dann sagt
  • die und die APIs hab ich in den IMPORTS gefunden (eventuell auch nach Texten suchen, welche wie API-Namen klingen)
  • diese Mindestvoraussetzungen sind gegeben
  • und eventuell auch noch welche APIs die Mindestvorausetzung bedingen, damit man eventuell abwegen kann, ob es sich lohnt das zu beheben, um eventuell doch noch ein älteres Windows zu unterstützen.
?

Hatte grade mal kurz das Application Compatibility Toolkit in den Pfoten, aber das sagte mir nur "ja, dein Programm lief hier (Server2008) gerade problemlos".


Nja, bei uns hatte sich doch erstmal schnell gelöst, da es der letzte Win2000-Rechner war, wo sich der Kunde vorher sowieso schonmal Gedanken machte den abzuschaffen. :angle:
Ich weiß nun dadurch praktisch schonmal von einer API, welche mindestens ein XP-SP1 benötigt.



OK, die Variante mit den VMs bestünde noch, aber vielleicht geht's auch einfacher.

nahpets 9. Jul 2012 00:02

AW: APIs prüfen, ob existet
 
Hallo,

da ich gerade an einer ähnlichen Baustelle unterwegs bin, habe ich mich mal ein bisserl um dieses Thema kümmern können, sollen, dürfen, müssen ;-)

In der JEDI Code Library gibt es u. a. die Unit JCLPeImage. Diese enthält u. a. die Prozedur PEImportedFunctions.

Dieser übergibt man den Name der EXE-Datei oder einer DLL, eine Stringliste, einen leeren Stringparameter und einen boolschen Wert mit True. Dafür erhält man in der Stringliste alle genutzten Aufrufe von Kernel32.dll und was es sonst noch so alles gibt bzw. genutzt wird. Die Stringliste enthält für jeden Aufruf eine Zeile in der Form DLL=aufgerufene Funktion.
Wenn man nun hergeht und sich aus diesen Zeilen Aufrufe für die Suche in der MSDN macht, so kann man dort aus dem Suchergebnis jeweils den ersten gefundenen Eintrag (= 1. Link) wählen und erhält damit die Beschreibung zu der genutzten Funktion der entsprechenden DLL. Auf dieser Ergebnisseite findet man nun den Abschnitt Requirements. Dort ist detailiert aufgeführt, welche Systemvoraussetzungen für die Nutzung der Funktion erfüllt sein müssen.

Der aus der Stringliste oben genannter Prozedur zu erstellende Link müsste (vermutlich) so aussehen:
Code:
http://social.msdn.microsoft.com/Search/en-US?query=kernel32.dll%20gettickcount
Er ließe sich daher sehr leicht aus der Stringliste erstellen.
Nun muss man die entsprechende Seite laden, die leider inhaltlich nicht so aufgebaut ist, dass ein Heraussuchen des gewünschten Links einfach erscheint. Vermutlich benötigt man den ersten Link, der in etwa folgendem Aufbau entspricht:
Code:
http://msdn.microsoft.com/en-us/library/windows/desktop/*.aspx
Beispiel:
Code:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa385449(v=vs.85).aspx
Die nachfolgende Seite, die die gewünschten Informationen enthält, kann man jedoch relativ einfach parsen und bekommt so die gewünschten Informationen.

Um sich hieraus ein eigenes Nachschlagwerk zu bauen ist ein bisserl Phantasie und die eine oder andere Stunde Arbeit erforderlich. Sicherlich ist es aber einfacher, als jedes Betriebssystem (wie auch immer, VM...) vorzuhalten und die Programme dann zu testen, zumindest die Planung sollte vereinfacht werden können, um ggfls. auftretenden Problemen aus dem Weg gehen oder halt die Systemanforderungen besser beschreiben zu können.

himitsu 9. Jul 2012 00:23

AW: APIs prüfen, ob existet
 
Am schönsten währe es ja, wenn es schon was Fertiges gegeben hätten :angle:

Hmmm, man könnte auch das Windows PSDK parsen, welches man sich runterladen kann.
Ansonsten würde ich wohl noch eine Datenbank auf meinem Webseitchen bereitstellen, damit nicht jedes Mal die Webseite geparst werden muß.

Klar, nur weil irgendwo alle gefundenen APIs vorhanden sind, heißt es noch lange nicht, daß das Programm dann dort auch wirklich läuft, aber nicht jeder hat alle Windowsversionen rumliegen und für einen ersten Überlick ist es eben idealer, vorallem eben die Anzahl und Art der APIs, welche man eventuell umgehen könnte, um es doch eventuell zum Laufen zu bringen.



Vielleicht verrät uns Daniel ja, wie er in seine Delphi-Referenz den MSDN-Index reinbekommen hat?

Aphton 9. Jul 2012 08:57

AW: APIs prüfen, ob existet
 
Ich verwende CFF Explorer.. Suche danach

CCRDude 9. Jul 2012 13:28

AW: APIs prüfen, ob existet
 
Liste der Anhänge anzeigen (Anzahl: 2)
Ich hab da vor Ewigkeiten mal was geschrieben... CompatAlyzer. Seit einiger Zeit ist es auch Teil des FileAlyzer (Screenshot angehängt, einfacher Fall, ist nur ne Resourcen-DLL). Man sieht da mehrere Spalten pro manchem OS, da ich teilweise mehrere OS-mit-SP-Versionen aufgenommen habe.

Dank MSDN-Abo habe ich alle OS-Installations-CDs heruntergeladen, extrahiert, teilweise nochmal extrahiert, Testcode zum Analysieren der Exporte drüberlaufen lassen und diese Daten stecken hinter beiden Tools.

Nachtrag: habe noch einen zweiten Screenshot ergänzt, mit der Übersichtsansicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:44 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