Bereits unter Windows95/98 findet eine strenge Überwachung der Zugriffe auf Schnittstellen statt. Die Zeiten direkter Portzugriffe sind vorbei. Windows überprüft jedes mal, ob die zugehörige Hardware verwendet werden darf. Mann muss daher eine Schnittstelle zuerst über Windows öffnen. Die OPENCOM-Funktion in der RSAPI.DLL (MSR mit Word und Excel, Franzis) und in der PORT.DLL (PC-Schnittstellen unter Windows, ELEKTOR) melden den Zugang unter Windows ordnungsgemäß an. Prozeduren wie SENDBYTE oder DTR funktionieren daher auch unter Windows NT.
Das folgende Beispiel stammt aus PC-Schnittstellen unter Windows. Direkte Portzugriffe werden durch die PORT.DLL ermöglicht:
For n = 1 To 100 OUTPORT 97, (INPORT(97) Or 2) For t = 1 To 10000: Next t OUTPORT 97, (INPORT(97) And 253) For t = 1 To 10000: Next t Next n
Dieser Programmausschnitt für VB5/6 greift direkt auf den PC-Lautsprecher zu. Unter Windows 95/98 hört man einen Ton. Diese Portadressen werden also nicht überwacht. Unter Windows NT4 dagegen bleibt es still. NT4 ist einfach wesentlich strenger: Niemand darf direkt auf irgendwelche Ports zugreifen. Es gibt dann zwar keine Fehlermeldung, die Zugriffe werden aber abgefangen. Die einzige Ausnahme: Virtuelle Gerätetreiber besitzen die höchste Prioritätsstufe (Ring 0) und können jede Hardware direkt ansprechen. Auf dem Sharewaremarkt findet man Treiber, die geladen werden können, um alle Portzugriffe unter Windows NT freizuschalten. Hier ist ein Shareware-Tool von Victor Ishikeev (Shareware-Gebühr: 99$):
TVicHw32 version 2.0 (tvichw32.zip, 190 kB)
Das Zip-Archiv enthält die Treiber Vichw00.sys für Win NT und Vichw00.vxd für Win95/98. Außerdem gibt es eine DLL, damit man den Treiber nicht direkt ansteuern muss: Tvichw32.dll. Mehrere Programmbeispiele erläutern die Anwendung. Man kann hier direkt über die DLL auf beliebige Portadressen zugreifen.
Das kleine Programm Freeport.exe wurde geschrieben, um den Treiber zu starten und zu beenden. Die Anwendung ist einfach: Man startet das Programm vor den eigentlichen Schnittstellen-Versuchen und lässt es dann im Hintergrund stehen. Alle Portzugriffe funktionieren dann wieder problemlos.
Freeport.exe(freeport.zip, 153 kB)
Um Freeport zu starten, muss zunächst Twichw32.Zip ausgepackt werden. Unter Windows95/98 erstellt man am besten ein Verzeichnis FreePort, in das man neben FreePort.Exe die Dateien Vichw00.vxd und Tvichw32.dll kopiert. FreePort.exe findet dann die DLL und diese den Treiber. Beim Öffnen des Treibers erscheint ein Meldungsfenster des Shareware-Autors.
Unter Windows NT4 muss der Treiber Vichw00.sys in das Verzeichnis WinNT\System32\Drivers kopiert werden. Die DLL darf im Verzeichnis von FreePort.exe stehen oder kann ins Windows-Verzeichnis kopiert werden.
Falls jemand das ausprobiert, würde ich mich sehr über eine Rückmeldung freuen, ob alles richtig funktioniert. Eventuell gibt es noch einen möglichen Einsatz des Programms: Ältere DOS-Programme schaffen oftmals schon unter Windows98 im DOS-Fenster nicht mehr den Zugriff auf Schnittstellen. Mit dem Treiber sollte es wieder funktionieren.
Gert Camfferman hat den Treiber erfolgreich unter Widows 2000 eingesetzt. Bei ihm liegt der Treiber VICHW00.SYS in D:\Winnt\system32\drivers. Mit FreePort.exe und TVICHW32.DLL funktionieren die Zugriffe auf LPT1.
Und auch mit Comal ...
Klaus Lülff berichtet von seinen Erfahrungen mit der Programmiersprache Comal, die ja als DOS-Programm nur über Portbefehle auf die RS232 zugreifen kann: Läuft das COMAL-Programm unter WinNt in einem DOS-Fenster, greift es dank Freeport ohne Probleme auf die serielle Schnittstelle zu. Läuft das COMAL-Programm im Vollbildmodus, kann es nicht auf die serielle Schnittstelle zugreifen. Tastatureingaben funktionieren nicht immer, aber nach einem Neustart des COMAL-Programms dann doch.
Direkte Portzugriffe über die Inpout32.DLL
Von logix4u stammt eine weitere Lösung für direkte Portzugriffe: "My Inpout32.dll will enable the user to use the same samples without any modification in any windows platform (Win 9x/NT/2000/XP). Just copy the Inpout32.dll to "system32" directory and run the program."
Unter http://www.logix4u.cjb.net/ kann man die DLL mit VB-Beispielprogrammen und sogar mit den C-Quelltexten laden. Die DLL dürfte das ideale Werkzeug für alle Zugriffe auf die Parallelschnittstelle sein.
Ingo Schick hat auf der Basis dieser DLL ein Parallelinterface für
die Druckerschnittstelle entwickelt:
www.elektronik-bastelecke.de/1481253.htm
In beiden erwähnten Büchern gibt es einen Fehler, der sich erst unter NT auswirkt: Beim Öffnen der Schnittstelle muss es z.B. heißen:
OPENCOM "COM2:1200,N,8,1"
Man beachte den Doppelpunkt nach COM2. Beide Bücher verwenden hier oft ein Komma. Windows 95/98 verzeiht dies, NT aber nimmt es ganz genau. Mit dem Komma würden die nachfolgenden Parameter ignoriert!