Doppelte Geschwindigkeit
Die Version 0.2.02 des PTfinder erlaubt mit einer neuen Option die Veränderung der Schrittweite bei der Suche nach Prozessen und Threads. Für Windows 2000 lässt sich damit die Suchgeschwindigkeit verdoppeln.
Zu den beschriebenen Suchkriterien für Prozesse und Threads gehört auch die Ausrichtung (Alignment). Ich bin bislang von einer Ausrichtung auf 8 Byte ausgegangen. Die Kontrollstrukturen für beide Objekttypen werden im non-paged pool gespeichert. In der Dokumentation der Routine ExAllocatePoolWithTag, mit der sich Speicher in diesem Pool belegen lässt, heisst es:
Memory allocations of less than PAGE_SIZE are not necessarily page-aligned but are aligned on an 8-byte boundary.
Wie ich festgestellt habe, sind die hier relevanten Datenstrukturen unter Windows 2000 jedoch auf Paragraphen, also 16 Bytes, ausgerichtet. Dies bedeutet, dass die Hälfte aller von PTfinder durchgeführten Vergleiche ohnehin scheitern muss.
Um die Programmausführung zu beschleunigen, habe ich die Option --align n eingeführt. Voreingestellt ist immer noch der sichere, aber langsamere Wert von 8 Bytes. MIt einem --align 16 lässt sich das Alignment auf einen Paragraphen einstellen, was die Anzahl der Vergleichsoperationen und damit in etwa auch die Ausführungsdauer halbiert.
Ein weiterer Optimierungsansatz führte dann jedoch nicht mehr zum Erfolg: Bislang durchsucht PTfinder im Abbild jede Speicherseite bis zum letzten Byte. Die gesuchten Datenstrukturen haben jedoch eine gewisse Größe und können dabei eine Speicherseite nicht überschreiten, wie die bereits genannte Dokumentation besagt:
Memory allocations of PAGE_SIZE or less do not cross page boundaries.
Die Idee war, die Seiten nur so weit zu durchsuchen, wie auch EPROCESS- und ETHREAD-Strukturen in die verbleibende Speicherseite passen. Bei einem Alignment von 16 Bytes werden so immerhin 24 Suchoperationen je Speicherseite vermieden. Offenbar benötigen die hierfür zusätzlich notwendigen Berechnungen jedoch beinahe soviel Zeit wie die vermiedenen Vergleiche. Der Geschwindigkeitsgewinn war jedenfalls vernachlässigbar. Ich habe diese Optimierung daher nicht beibehalten.
Der aktualisierte PTfinder ist unter der bekannten URL zum Download verfügbar.