Skip to main content

2024 | Buch

Systemprogrammierung mit Delphi

Hardwarezugriff über Windows-API und Windows-Kernelmodus-Treiber

insite
SUCHEN

Über dieses Buch

Während ständig neue Technologien und Schnittstellen die Softwareentwicklung mit Delphi begleiten, führt Sie dieses Buch in die Systemprogrammierung ein, die auch heute noch einen häufig unterschätzten Stellenwert hat. Systemprogrammierung kann sehr komplex sein und setzt fortgeschrittene Kenntnisse voraus. Mit der richtigen Methodik lässt sich das System besser beherrschen und ein besseres Systemverständnis erreichen. Dadurch sind viele Systeminformationen fundierter und umfassender ermittelbar,als es mit Windows-Bordmitteln möglich wäre. Nach einer Einführung in die Systemprogrammierung und Windows-Architektur werden Delphi-Zugriffe auf API, WMI, Registrierung, SMBIOS und Prozessor ausführlich besprochen. Weiterhin erfolgt die Entwicklung eines Windows-Kernelmodus-Treibers mit Microsoft Visual Studio, der auch unter Windows den Hardwarezugriff ermöglicht. Darauf aufbauend wird eine Beispielanwendung entworfen, die u.a. präzise Angaben zu Prozessoren mitsamt deren Temperatursensoren, Speichermodulen und PCI-Geräten bietet – ideal als praxisnahe Ergänzung zu den theoretischen Inhalten.

Inhaltsverzeichnis

Frontmatter

Grundsätzliches

Frontmatter
Kapitel 1. Einführung in die Systemprogrammierung
Zusammenfassung
Dieser Begriff taucht eigentlich schon durchgehend über die letzten 30 Jahre in der Computerbranche auf und beschreibt im Prinzip die Art und Weise einer Programmierung, die anders als typische Oberflächen, eCommerce und Schnittstellen relativ systemnah und hardwarenah agiert. Vorrangig geht es um den Zugriff auf Systemfunktionen, Konfigurationsparameter und Hardwarekomponenten, was über verschiedene Wege und Schnittstellen geschieht, die jeweils sehr komplex und meistens mehr oder weniger gut dokumentiert sind.
Devid Espenschied
Kapitel 2. Erstellung einer begleitenden Beispielapplikation
Zusammenfassung
Im Zuge dieses Buches und den fortlaufenden Themen werden wir eine Beispielapplikation erstellen, die thematisch alle behandelten Bereiche der Systemprogrammierung abbildet. Diese Beispielapplikation heißt
Devid Espenschied

Systemprogrammierung mit Delphi

Frontmatter
Kapitel 3. Maschinen-Details über die API
Zusammenfassung
Grundsätzlich sollen die Maschinen-Details einen schnellen Überblick über bestimmte Merkmale der aktuellen Maschine und des Benutzers sowie einiger Systeminterna bieten. Diese Details sind natürlich noch beliebig ausbaubar, wir wollen hier als Einstieg jedoch nicht unzählige Informationen ermitteln, sondern einen kurzen Überblick bieten. Trotzdem behandelt dieses Kapitel bereits einige systeminterne Windows-Konzepte (insbesondere bei der Ermittlung von Administrator-Berechtigungen) und wir versuchen stets, den für unseren Einsatzzweck notwendigen Umfang zu besprechen, um den Gesamtumfang nicht zu sprengen und gleichzeitig den Fokus auf das wesentliche zu behalten.
Devid Espenschied
Kapitel 4. Windows-Details und installierte Software über die API
Zusammenfassung
Zu den Windows-Details können unzählige Informationen aus unterschiedlichen Quellen zusammengetragen werden, die wir folglich filtern müssen, um den Überblick nicht zu verlieren und alles weitestgehend kompakt zu halten.
Devid Espenschied
Kapitel 5. System-Details über System Management BIOS
Zusammenfassung
Das System Management BIOS oder kurz SMBIOS geht in seinen Anfängen bis ins Jahr 1992 zurück. Damals schlossen sich mehrere namhafte BIOS-Hersteller (mitunter American Megatrends und Phoenix/Award) sowie einige Firmen aus der IT-Branche (etwa Intel, HP, Dell und Compaq) zu einer Arbeitsgruppe zusammen, die sich Distributed Management Task Force (DMTF) nannte. Ziel dieser Arbeitsgruppe war von Anfang an, undurchschaubare Hardwarestrukturen mit einer geordneten Datenbank verwaltbar zu machen, und dies bei gleichzeitiger Transparenz und Wartbarkeit.
Damals wurde als Arbeitsergebnis das Desktop Management Interface (kurz DMI) vorgestellt, aus dem das System Management BIOS (kurz SMBIOS) als Bestandteil hervorging. Der Sinn und Zweck bestehen vor allem im unternehmensweiten Einsatz von Netzwerken, bei dem Administratoren mit entsprechender Software die Hardware der Clients inventarisieren können – von jeder beliebigen zentralen Stelle im Netzwerk aus. Für den Privatbereich besteht der Nutzen vor allem in der schnellen Ermittlung von Hardwaredetails, die über verschiedene Wege aus dem BIOS auslesbar sind.
Die Inhalte des SMBIOS-Bereiches enthalten grundsätzlich statische Systeminformationen, und keine dynamischen Details. Auch wenn einige Bereiche andere Vermutungen suggerieren, wie etwa die Sensoren für Spannungen, Kühlung und Temperaturen, handelt es sich um Systeminformationen, die einmalig während des Power On-Self Test (kurz POST) des BIOS ermittelt bzw. aktualisiert werden.
Einige Bereiche lassen sich ebenfalls manuell verändern, was damals relativ universell durch den Einsatz sog. Plug & Play-Funktionen gelang, heutzutage jedoch nicht mehr ohne Spezialtools vom BIOS- oder Hauptplatinen- bzw. Systemhersteller möglich ist. Und genau dort zeigt sich das Problem der Vollständigkeit, weil einerseits für die netzwerkweite Inventarisierung vollständige Daten notwendig sind, die Hersteller hier jedoch nicht immer diesen Anspruch auf Vollständigkeit teilen.
So kommt es häufig vor, dass Felder für Seriennummern mit Dummy-Werten wie „1234567890“ oder Texten wie „To Be Filled By O.E.M.“ vorbelegt sind, was mit separaten Prüfungen abzufragen ist. Die Glaubhaftigkeit der SMBIOS-Daten sollte daher immer mit einer gewissen Vorsicht betrachtet werden, was insbesondere alle vom Hersteller frei definierbaren Textfelder betrifft.
Devid Espenschied
Kapitel 6. Prozessor-Informationen über CPUID
Zusammenfassung
Die Identifizierung des Prozessors war ursprünglich mit vielen Komplikationen verbunden, weil man unterschiedliche Prozessor-Fähigkeiten testen musste und daran ableiten konnte, welche Familie und welches Modell installiert waren. Dies wurde mit Einführung des Intel Pentium vereinfacht, weil der sogenannte CPUID-Befehl (Central Processor Unit Identification) eingeführt und dieser sogar für die letzten 486er Prozessoren abwärts eingebaut wurde. Die großen Hersteller (vorrangig Intel und AMD) haben sich auf eine Struktur geeinigt, wie Daten ermittelbar sind und bis zu einem bestimmten Punkt war dies alles identisch. Gleichzeitig entstanden im Laufe der Jahre Unterschiede, obwohl die Basis nach wie vor gleich ist.
Devid Espenschied

Windows Kernelmodus-Treiber

Frontmatter
Kapitel 7. Entwicklung eines Kernelmodus-Treibers mit Visual Studio
Zusammenfassung
Dieses Kapitel befasst sich eingehend mit dem Kernelmodus-Treiber sowie seiner Entwicklung, und den dazugehörigen Möglichkeiten, die völlig isoliert von der Delphi-Softwareentwicklung stattfinden.
Bei der Softwareentwicklung erzeugt das Wort „Treiber“ häufig Fragezeichen, weil kaum jemand bisher damit zu tun hatte, und erst recht nicht in einer Hochsprache. Hinzu kommt die weit verbreitete Annahme, dass Treiber mit Hardware assoziiert werden, um diese im Betriebssystem anzusprechen und einbinden zu können. Dazu sollte man wissen, dass dieser Ansatz nach wie vor korrekt ist, es aber viele andere Treibermöglichkeiten wie softwarebasierte Filter- oder Kernelmodus-Treiber sowie Dateisystemtreiber gibt. Diese interagieren nicht immer direkt mit Hardware, und werden vorrangig für die Überwachung bestimmter Datenströme und Windows Kernel-Eigenschaften verwendet.
Devid Espenschied
Kapitel 8. Anbindung des Kernelmodus-Treibers in Delphi
Zusammenfassung
Nachdem wir uns im vorherigen Kapitel mit C++ und Visual Studio beschäftigt haben, und ein kompilierter Kernelmodus-Treiber das Ergebnis darstellt, soll dieser Treiber nun in die bereits vorhandene Delphi-Applikation eingebunden werden. Zum Prozess des Einbindens zählt das Installieren und Starten, sowie für die Deinstallation das Stoppen und Entfernen – genau in dieser Reihenfolge. Dies hängt damit zusammen, dass ein Treiber zwar installiert sein kann, aber nicht zwangsweise gestartet sein muss.
Devid Espenschied

Hardwarezugriffe über den Kernelmodus-Treiber

Frontmatter
Kapitel 9. Prozessoren
Zusammenfassung
In Kap. 6 haben wir uns ausführlich der Prozessorerkennung über den CPUID-Befehl gewidmet und arbeiten dort nach wie vor auf der Rechteebene des Standardkontextes. Da wir inzwischen allerdings einen funktionsfähigen Kernelmodus-Treiber entwickelt haben und alle nötigen Voraussetzungen geschaffen haben, um diesen per Delphi anzubinden, stehen zusätzliche Möglichkeiten zur Verfügung.
Devid Espenschied
Kapitel 10. PCI-Bus
Zusammenfassung
PCI steht für Peripheral Component Interconnect und wurde bereits 1994 in seiner ersten Version vorgestellt, die im Laufe der Jahre verbessert wurde und mit Version 3.0 im Jahr 2004 in seiner letzten Version vorliegt. Parallel dazu wurde PCI-X (auch als PCI-Extended) geschaffen, aber nach dessen Version 2.0 nicht weiterverfolgt. Mit PCI Express kam 2002 dann eine Alternative auf den Markt, die bis heute in der Version 6.0 den Standard markiert [1, 2]
Devid Espenschied
Kapitel 11. Arbeitsspeicher und System Management Bus
Zusammenfassung
Auch wenn wir bereits über SMBIOS verschiedene Arbeitsspeicherdetails ermittelt haben, wollen wir noch eine andere relativ hardwarenahe Methode vorstellen, die über den System Management Bus (kurz SMBus) zustande kommt. Dieser Bus wurde ursprünglich von Intel und Duracell im Jahr 1994 definiert und ist für die Baugruppenkommunikation und insbesondere für Halbleiter-Schaltkreisen zuständig (etwa dem Sensor-Chip LM78 von National Semiconductor).
Devid Espenschied
Kapitel 12. Externe Drittanbieter-Komponente für den Systemzugriff
Zusammenfassung
Grundsätzlich existieren einige wenige Komponenten für den Systemzugriff, die sich um die Ermittlung von Systemdetails kümmern, ohne dass man selbst die vielen Möglichkeiten der Systemprogrammierung kennen muss. Unterschieden wird zwischen quelloffenen Komponenten und binären Komponenten ohne Quellcode.
Bei den quelloffenen Komponenten existiert in der Delphi-Welt im Prinzip nur eine Komponente, die sich MiTeC System Information Component Suite nennt und als reine Delphi-Komponente mit vollständigem Quellcode sehr umfassende Systemdetails liefert. Diese Komponente beschreiben wir in den nachfolgenden Unterkapiteln genauer.
Devid Espenschied
Kapitel 13. Ausblick
Zusammenfassung
Wir haben auf den bisherigen Seiten einige Bereiche der Systemprogrammierung besprochen, und über Prozessoren, deren Modell-spezifische Register, den PCI-Bus und den System Management Bus gesprochen sowie im zentralen Thema einen eigenen Kernelmodus-Treiber entwickelt. Dabei wurden viele API-Funktionen der oberen Betriebssystemebene verwendet, aber auch auf Register und Ports auf der untersten Hardwareebene zugegriffen.
Devid Espenschied

Anhang

Frontmatter
Kapitel 14. Beispielprogramm und Quellcodes
Zusammenfassung
Wir entwickeln in diesem Buch eine Beispielapplikation mit dem Namen PC Analyser, die alle praktischen Elemente aus den Kapiteln enthält und die unter der Adresse https://​github.​com/​DevidEspe/​PCAnalyser.
Devid Espenschied
Backmatter
Metadaten
Titel
Systemprogrammierung mit Delphi
verfasst von
Devid Espenschied
Copyright-Jahr
2024
Electronic ISBN
978-3-658-43455-7
Print ISBN
978-3-658-43454-0
DOI
https://doi.org/10.1007/978-3-658-43455-7