VCALL0.386: Hilfstreiber zur Ausführung von privilegiertem 16-bit-Code
- Ermöglicht das Laufenlassen von vorhandenen Code-Abschnitten im
privilegierten Kernel-Modus unter Windows
- Unterstützt Real-Mode-DOS-Anwendungen (genauer: V86) ebenso wie DPMI
und 16bit-Windows-Programme
- Um mindestens 200% schnellere Portzugriffe möglich, auf geschützte Ports
(von Windows-VxD's gesperrte oder emulierte) mehr als 1000% Geschwindig-
keitszunahme! Auch CLI/STI ist maximal schnell (3 statt viele 1000 Takte)
- Leider ist Windows erforderlich; eine Lösung, die unter EMM386 "kriecht",
wäre zweifelsohne ebenso interessant
- Extra-Unterstützung von Windows 95: Dynamisches Gerätetreiber-Laden
und Entladen erspart Modifikation an der SYSTEM.INI und sichert
sofortige Einsatzbereitschaft seiner Programme an fremden Rechnern
(ohne zu booten)
- NEU: Aufruf einer periodischen Routine im Ring0 bis ca. 50 kHz (!),
um die lästige Timer-Programmierung kümmert sich das VxD
(die erreichbare Frequenz hängt stark vom Rechner und [möglicherweise]
der Anzahl der DOS-Boxen ab. Ein 486/66 schaffte nur 10 kHz absturzfrei.
- geplant: API für Win32 (Kopfzerbrechen wegen Kontextumschaltung)
- geplant: VxD-API für LPTDAC2 und andere VxDs
- geplant: dito für Windows NT
Dateiliste:
VCALL0.386 Der Virtuelle Gerätetreiber für Windows
VCALL0.ASM Quelldatei für Turbo Assembler 3.2
VCALL0.DEF Modul-Definitions-Datei für den Linker LINK386.EXE
(Weitere Quellen und Übersetzungstools auf Anfrage)
VCALL0.TXT Diese Dokumentation
VCALL0.TPU Pascal-Unit, Version 7, Zielplattform DOS
VCALL0.PAS Unit-Quelldatei (z.B. zur Generierung anderer Units)
VCALL0T.PAS Einfaches Beispiel zur Benutzung von VCALL0.TPU
VCALL0.C Quelldatei für Borland C (ungetestet, OHNE Windows-95-Zeug)
VCALL0.H Header-Datei für Borland-C-Programme
VCALL0TC.C Beispiel in C
Erforderlich:
- 386SX oder höher
- MS-Windows Enhanced Mode oder Windows95
- Dein Programm, um dort eine kleine Änderung vorzunehmen
Garantien:
- Ich übernehme keine Garantie, weder für Hard- noch Softwareschäden
Installation (Nur Windows 3.1):
- Das VxD VCALL0.386 ins Windows-Verzeichnis kopieren (oder sonstwohin)
- in die [386enh]-Sektion der SYSTEM.INI folgende Zeile eintragen:
device=VCALL0.386 ;Pfad mit angeben, falls "sonstwo"
- Windows neustarten, um Änderung wirksam werden zu lassen
Gebrauch:
- Die Pascal-Unit, die für alle 3 Borland-Pascal-Plattformen übersetzbar
ist, wird in das Zielprogramm eingebunden
- Die zeitkritische Routine, die keine verschachtelte Prozedur sein darf
und FAR kodiert sein muß, wird nicht direkt, sondern mittels der Funktion
Call0() aufgerufen. Diese Hilfsfunktion bekommt den Prozedurzeiger
übergeben. Ist VCALL0 gerade nicht präsent: Macht nichts. Call0() ruft
in diesem Falle die Zielprozedur direkt, also im nicht privilegierten
Modus
- Wichtig: FAR-Calls sind in dieser Prozedur nicht erlaubt. Range- und
Stack-Checking ist auszuschalten, da diese Optionen FAR-Calls einstreuen
- Nähere Hinweise befinden sich in den deutsch kommentierten Quelltexten
Probleme:
- Windows stürzt sofort ab, wenn obige Prämisse (FAR-Call) verletzt wird,
und man landet unverzüglich auf dem DOS-Prompt (Windows 3.1).
- Der kritische Code ist undebugbar, der Versuch, ein Breakpoint in den
Code zu setzen, führt ebenfalls zum fatalen Windows-Ausstieg. Ausnahme:
Man benutzt SoftICE für Windows zum Debuggen (vielleicht auch WDEB, aber
wer das benutzt, ist selbst schuld:-)
Autor
haftmann#software
Henrik Haftmann, Reichenhainer Str. 51 Zimmer 105
email: henrik.haftmann@e-technik.tu-chemnitz.de
Neueste Version unter
http://www.tu-chemnitz.de/~heha/hs_freeware/vcall0.zip
Geändertes seit letzter Version:
Hinzugefügte Unterstützung des dynamischen Geräteladens unter Windows95
Periodischer Aufruf (bis 20 kHz)
Vorgefundene Kodierung: OEM (CP437) | 1
|
|