Direktes Port I/O unter NT-Systemen

By dose | April 25, 2005
Under: technical stuff, Uncategorized

Lust, das FDD led blinken zu lassen? Win NT erlaubt leider kein direktes Port I/O fuer Programme in Ring 3, also braucht man einen Ring 0 – Treiber zum Ansteuern der I/O Ports. Hierfuer eignet sich unter Anderem
der Treiber PortTalk, welcher unter http://www.beyondlogic.org/porttalk/porttalk.htm erhaeltlich ist.
Mit diesem Treiber ist das Ganze dann kein Problem mehr:
Wir gehen auf Port-Adresse 0x3F2 und toggeln das 5. Bit.

Simples Beispiel, was ich gecodet hab (benötigt pt_ioctl.c aus besagtem Paket):

#include "windows.h"
#include "stdio.h"
#include "process.h"
#include "pt_ioctl.c"

#define DOR 0x3F2 /\* motor drive control bits \*/
#define ENABLE_INT 0x0C /\* used for setting DOR port \*/

int KeepBlinking;

void FDDlight(BYTE drive, BYTE status) {
BYTE value = drive | ENABLE_INT;
value|=status<<(4|drive); /\* Set Motor bit \*/ outportb(DOR, value); } void FDDblink(DWORD *interval) { OpenPortTalk(); KeepBlinking=1; while(1) { FDDlight(0, 1); Sleep(*interval); FDDlight(0, 0); Sleep(*interval); if (!KeepBlinking) break; } ClosePortTalk(); } int main(void) { DWORD interval=500; printf("Watch your FDD led blinking :) Press to stop");
_beginthread(FDDblink, 0, &interval);
getchar();
InterlockedExchange(&KeepBlinking, 0);
}

Leave a Comment

Name:

E-Mail :

Subscribe :
Website :

Comments :