Also irgendwie hast du mich missverstanden oder ich habe es nicht genau genug erklärt was ich meine.
Ich nehme als Beispiel WinSock mit den handlebasierten Funktionen (connect, listen, bind, socket, usw.).
Eine Anwendung, die diese Funktionen aufruft landet in den DLLs des Betriebssystem.
Ja klar es gibt Möglichkeiten um Hooks oder LSPs in WinSock einzuschieben, aber das ist recht aufwendig.
Jetzt stelle man sich vor, WinSock würde durch ein Interface ersetzt werden:
Delphi-Quellcode:
IWinSock2=Interface(IUnknown)
['xxxx-....xxxx']
function connect(...);
function listen(...);
....
end;
Die Anwendung bekommt schon beim Start einen Interfacezeiger übergeben.
Anstatt die WinSock-
DLL zuladen, wird einfach nur dieses Interface benützt (vereinfacht, wir brauchen mehrere Interfaces).
Die Anwendung funktioniert genau gleich wie vorher, nur mit dem Unterschied, dass das Betriebssystem seine
API-Dienste anbietet anstatt dass die Anwendung festgelegte APIs aufruft.
siehe:
Inversion of Control.
Jetzt kommt eine weitere Host-Anwendung, die genau das Interface implementiert und alle Aufrufe zunächst einmal 1:1 an das Interface, das sie seinerseits bekommen hat weiterreicht.
Würde nun diese Host-Anwendung eine andere Anwendung starten, dann würde sie sämtliche WinSock-Aufrufe mitbekommen.
Jetzt wäre es ein Leichtes, wenn die Host-Anwendung alle Netzwerkaufrufe tunneln würde.
Somit wurde die WinSock-
API virtualisiert, weil die ursprüngliche Anwendung gar nicht merkt, dass seine Aufrufe abgefangen und verändert werden.
Dieses Prinzip könnte man auch auf viele andere APIs anwenden und so viele APIs des Betriebssystem virtualisieren.
So könnte man z.B. die
API für die serielle Schnittstelle über ein Netzwerk umleiten.
Dinge, die bisher nur über Systemtreiber möglich sind, könnten so dem Anwendungsprogrammierer zugänglich werden.
Oder man denke nur an Softwaretests und die Möglichkeiten einfach so Mock-Objekte für Windows-
API-Aufrufe zu erstellen.
Würde es dieses utopische Betriebssystem geben, dann wäre es einfach, alles mögliche umzuleiten und zu verändern.
Der Trend geht ganz klar in Richtung Virtualisierung und so darf ruhig ein bisschen darüber nachdenken was denn wäre, wenn alle APIs virtuell wären.
(und ohne virtuelle Pflänzchen gleich argumentativ niederzuknüppeln)