Eine Technik für Aliasing-Prozedur-Namen in Windows ermöglicht es Prozedur-Aufrufe transparent abgefangen. Zu Überwachung von Aktivitäten wie dem Überprüfen von Argumenten auf Gültigkeit können Sie diese Technik verwenden.
Transparent ruft das Abfangen von Prozedur eine ausführbare Windows-Codebibliothek, die folgend entspricht, erste Erstellung auf:
HANDLE MyGlobalAlloc( flags, size )
WORD flags;
DWORD size;
{
/* Perform any type of monitoring necessary here.
if ( !size )
return 0;
*/
return RealGlobalAlloc( flags, size );
}
HANDLE FAR PASCAL main( argc, argv )
WORD argc;
LPSTR argv;
{
return 1;
}
Schreiben Sie die Definitionsdatei oben für die Bibliothek wie folgt als nächste:
BOO.DEF:
LIBRARY BOO
DESCRIPTION "Procedure call interception library."
DATA SINGLE MOVEABLE
CODE MOVEABLE DISCARDABLE
EXPORTS
GlobalAlloc=MyGlobalAlloc
IMPORTS
RealGlobalAlloc=KERNEL.15
Sie können die Kernel-Ordnungszahlen für die Routinen ( oder jede andere Routine) erhalten, indem Sie das LIB.EXE-Programm zu dem Auflisten der Inhalte von SLIBW oder MLIBW verwenden.
Erstellen Sie ein Dynamic Link Library (DLL) indem Sie IMPLIB BOO.DEF wie folgt ausführen:
IMPLIB BOO.DEF BOO.LIB
Erstellen Sie die ausführbare Bibliothek, indem Sie die folgende Tabelle verwenden:
link boo,,,mlibw mlibc,boo.def;
Verknüpfen Sie dynamisch zu BOO.EXE als nächste, indem Sie folgendermaßen zu BOO.LIB verknüpfen:
link car,,,boo mlibw mlibc,car.def;
Jede Aufrufe von GlobalAlloc() werden zuerst zu MyGlobalAlloc() wegen des Namensaliasing weitergeleitet. Diese Technik ist sehr leistungsstark und kann zu dem Implementieren der Überwachung beliebigen Typen von Funktion verwandt werden. Im Fall von GlobalAlloc() ist die Überwachung in dem Sinn transparent, dass erneut das Kompilieren der Anwendung nicht erforderlich ist, die Fehlerüberprüfung zu entfernen, zu MLIBW.LIB zu BOO.LIB MLIBW.LIB erstellen Sie einfach eine Verknüpfung.