lo que puedes hacer es escribir una funcion en ensambrador. Eso me sucedio a mi en winXP, y esa fue mi solucion.
void SacerDato( Word Puerto, Byte Dato )
{
asm
{
//Respaldar registros
PUSH AX
PUSH DX
//Direccionar el puerto
MOV DX,Puerto
//Poner el dato
MOV AL,Dato
//Salida
OUT DX,AL
//Restaruar los registros
POP DX
POP AX
}
}
y para la entrada de igual manenera
Byte SacerDato( Word Puerto )
{
Byte Tmp;
asm
{
//Respaldar registros
PUSH AX
PUSH DX
//Direccionar el puerto
MOV DX,Puerto
//Entrada
IN AL,DX
MOV Tmp,AL
//Restaruar los registros
POP DX
POP AX
}
return Temp;
}
Espero que te sirva, por que como ya lo comentaron, XP es muy especial con el uso de puertos