Hook (EDV)

Hook (EDV)

In der Programmierung bezeichnet der Begriff Hook eine Schnittstelle, mit der fremder Programmcode in eine bestehende Anwendung integriert werden kann, um diese zu erweitern, deren Ablauf zu modifizieren oder um bestimmte Ereignisse abzufangen. Dies kann entweder im Quelltext geschehen, der entsprechend modifiziert wird, über Konfigurationsdateien, die den Ablauf eines fertigen Programms verändern, oder über Aufruf von Funktionen, denen der auszuführende Programmcode in irgendeiner Form mitgegeben wird.

Hooks können auch vom Betriebssystem zum Abfangen von Nachrichten zur Verfügung gestellt werden. So können zum Beispiel über einen Hook die Tastatur-Nachrichten unabhängig von dem Programm, welches aktuell den Fokus hat, empfangen werden. Damit lassen sich z. B. systemweite Hotkeys implementieren.

Implementierung

Es gibt mehrere Möglichkeiten, Hooks zu implementieren.

Wenn der Quelltext des zu erweiternden Programms vorliegt, lassen sich prinzipiell immer Erweiterungen vornehmen. Sofern der Code jedoch nicht genau bekannt ist, ist dieses aufwendig, weil diese Erweiterung eventuell umfangreiche Veränderungen erfordert, die obendrein unerwünschte Nebenwirkungen haben können und zudem mit jeder neuen Version neu eingepflegt werden müssten.

Daher definieren manche Programme bestimmte Stellen, die explizit dazu vorgesehen sind, von anderen erweitert zu werden. Dies kann dadurch geschehen, dass eine Funktion aufgerufen wird, die im ursprünglichen Programm leer implementiert ist, also nichts bewirkt. Diese kann dann gefahrlos auf eine fremdimplementierte Funktion umgelenkt werden. Die ursprünglich leere Funktion ist dann der Hook.

In der objektorientierten Programmierung geschieht dies durch Vererbung oder durch Delegation:

  • Im Falle der Vererbung sind die Hooks leere Methoden, die in Unterklassen ausimplementiert werden können. Ein Beispiel ist das Entwurfsmuster der Schablonenmethode; hier werden mehrere Methoden hintereinander als Hooks aufgerufen, um Algorithmen mit festem Ablaufrahmen spezialisieren zu können.
  • Im Falle der Delegation wird ein Hook in Form eines Objektes als Attribut an den Aufrufer übergeben. Dieses Objekt muss eine bestimmte Schnittstelle implementieren. Ein Beispiel stellt das Strategie-Entwurfsmuster dar. Wenn zu erwarten ist, dass der Hook von mehreren unterschiedlichen Dienstleistern genutzt werden wird, kann der Aufrufer den Hook in Form einer Liste anstelle eines einfachen Attributs implementieren, sodass mehrere Implementierungen des Hooks der Reihe nach aufgerufen werden können. Dieses geschieht zum Beispiel im Falle eines Listeners, um Benutzerinteraktionen abzufangen. Wenn die Liste nur soweit abgearbeitet wird, bis der erste implementierte Hook ein bestimmtes Ergebnis zurückliefert, hat man eine Zuständigkeitskette.

Betriebssystem Hooks unter Windows werden in einer eigenen DLL implementiert, welche vom Betriebssystem ohne einen Programmkontext aufgerufen wird. Somit muss ein Programm, welches einen Hook (z. B. zur Benachrichtigung über ein Ereignis) implementiert, seine Ergebnisse über andere Mechanismen von dem in der DLL enthaltenen Code erfahren (z.B. mittels Interprozesskommunikation).

Konfiguration

Es bleibt die Frage, wie das aufrufende Programm Kenntnis von den Programmteilen erlangt, die die bereitgestellten Hooks nutzen wollen.

Im einfachsten Fall wird der Programmcode direkt modifiziert, um Zugriff auf die Hooks zu erlangen.

Oder es wird Programmcode über Konfigurationen eingebunden. Dies kann in der prozeduralen Programmierung über Funktionszeiger geschehen, indem eine aufzurufende Unterroutine mit ihrer Startadresse eingetragen wird. In der objektorientierten Programmierung wird dagegen eine Klasse über ihren Namen dynamisch geladen; diese Klasse implementiert dann als Unterklasse oder als Delegationsobjekt den vom Hook aufgerufenen Code. Wird Dependency Injection verwendet, so lassen sich hierüber ebenfalls einfach Hooks konfigurieren.

Eine dritte Möglichkeit besteht darin, ein Objekt oder eine Funktion, welches oder welche vom Hook aufgerufen werden soll, über eine Zugriffsfunktion zu setzen. Dies wird dann gemacht, wenn der Hook von einem Toolkit bereitgestellt wird, das vom selben Programmteil verwendet wird, welches auch die Hooks nutzen wird. Genutzt wird das beispielsweise beim Listener für Benutzerinteraktionen, welcher oben bereits genannt wurde.

Siehe auch


Wikimedia Foundation.

Игры ⚽ Поможем решить контрольную работу

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Hook — bezeichnet: Captain Hook, literarische Figur aus dem Roman Peter Pan Hook (Film), Film von Steven Spielberg, basierend auf der Peter Pan Geschichte Hook (Filmdramaturgie), filmdramaturgischer Fachbegriff Hook (EDV), Programmierschnittstelle in… …   Deutsch Wikipedia

  • Call back Funktion — Eine Rückruffunktion (englisch callback function) bezeichnet in der Informatik eine Funktion, die einer anderen Funktion als Parameter übergeben wird, und von dieser unter gewissen Bedingungen aufgerufen wird. Dieses Vorgehen folgt dem… …   Deutsch Wikipedia

  • Callback-Funktion — Eine Rückruffunktion (englisch callback function) bezeichnet in der Informatik eine Funktion, die einer anderen Funktion als Parameter übergeben wird, und von dieser unter gewissen Bedingungen aufgerufen wird. Dieses Vorgehen folgt dem… …   Deutsch Wikipedia

  • Prädikatsfunktion — Eine Rückruffunktion (englisch callback function) bezeichnet in der Informatik eine Funktion, die einer anderen Funktion als Parameter übergeben wird, und von dieser unter gewissen Bedingungen aufgerufen wird. Dieses Vorgehen folgt dem… …   Deutsch Wikipedia

  • Rückruf-Funktion — Eine Rückruffunktion (englisch callback function) bezeichnet in der Informatik eine Funktion, die einer anderen Funktion als Parameter übergeben wird, und von dieser unter gewissen Bedingungen aufgerufen wird. Dieses Vorgehen folgt dem… …   Deutsch Wikipedia

  • LKM-Rootkit — Ein Rootkit (englisch etwa: „Administratorenbausatz“; root ist unter unixoiden und unixähnlichen Betriebssystemen der Benutzer mit Administratorrechten) ist eine Sammlung von Softwarewerkzeugen, die nach dem Einbruch in ein Computersystem auf dem …   Deutsch Wikipedia

  • Root kit — Ein Rootkit (englisch etwa: „Administratorenbausatz“; root ist unter unixoiden und unixähnlichen Betriebssystemen der Benutzer mit Administratorrechten) ist eine Sammlung von Softwarewerkzeugen, die nach dem Einbruch in ein Computersystem auf dem …   Deutsch Wikipedia

  • Glib — Entwickler: Das GTK+ Team Aktuelle Version: 2.20.1 (12. April 2008) Aktuelle Vorabversion: 2.19.6 (2. Februar 2009) …   Deutsch Wikipedia

  • Rückruffunktion — Eine Rückruffunktion (englisch callback function) bezeichnet in der Informatik eine Funktion, die einer anderen Funktion als Parameter übergeben und von dieser unter gewissen Bedingungen aufgerufen wird. Dieses Vorgehen folgt dem Entwurfsmuster… …   Deutsch Wikipedia

  • Backrub — Google URL http://www.google.de (Deutsche Version) http://www.google.ch (Schweizer Version) http://www.google.at (Österreichische Version) …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”