Portzugriffe unter Windows NT und Windows98


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:

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$):

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.

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\Driver 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.


Probleme beim Öffnen der seriellen Schnittstelle unter Windows NT

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!