Programar el puerto paralelo en Windows
(http://devel.archefire.org/favicons/www.winzip.com.ico) 
Descargar lpthandler.tar (http://devel.archefire.org/TextRecordings/lpthandler.tar)
Solo necesitamos conectar un LED entre el pin 9 y el 22 del paralelo.
O como muestra el esquema, entre cualquiera de los pines anaranjados (los pines de datos) y cualquiera de los pines grises (pines de polo a Tierra, GND). Tenemos un total de 16 de esos pines, 2 pines por bit de datos para poder conectar las 2 patas de un LED u otro dispositivo.
Asegurarse de poner el LED en la polaridad correcta, o darle vuelta, o simplemente no va a dejar pasar la electricidad y no va a encender.Uso de este programa para encender todos los 8 LEDS:
lpthandler.exe 3bc 11111111
   o sino el puerto 378
lpthandler.exe 378 11111111
   o sino el puerto 278
lpthandler.exe 278 11111111
Uso de este programa para apagar todos los 8 LEDS:
lpthandler.exe 3bc 00000000
   o sino el puerto 378
lpthandler.exe 378 00000000
   o sino el puerto 278
lpthandler.exe 278 00000000
Cada uno de los 8 bits a escribir debe ser un 1 o 0.
Un 0 apaga y un 1 enciende.
/*
 En resumen solo necesitamos:
  Out32(Direccion_Base_Puerto_Paralelo+2, 0);          //Resetear Puerto de Control
  Out32(Direccion_Base_Puerto_Paralelo,   0xFF-0x00);  //Escribir el Puerto de Datos
*/
//Aquí, la Direccion_Base_Puerto_Paralelo
//puede ser:
//          0x3BC -- LPT1
//          0x378 -- LPT1
//          0x278 -- LPT2
///
//Necesitamos resetear el Puerto de Control escribiéndole un 0
//para configurar sus opciones, controladas por cada uno de
//sus bits:
///
  Out32(Direccion_Base_Puerto_Paralelo+2, 0);
//Enviamos un valor entre 0 y 255 al puerto de Datos:
///
  Out32(Direccion_Base_Puerto_Paralelo,   0xFF-0x00);
Por si no se entiende el código, se puede ver cómo se escribió en tiempo real, carácter por carácter como en la programación original:
[youtube=640,480]http://www.youtube.com/watch?v=sJRbGohmA3M[/youtube]
 >> Ver Tutorial Animado de Código de lpthandler.c <<(http://devel.archefire.org/TextRecordings/Manejo%20del%20Puerto%20Paralelo.png) (http://devel.archefire.org/TextRecordings/Manejo%20del%20Puerto%20Paralelo.html#%20 %20 %20 Manejo%20del%20Puerto%20Paralelo/src/win32/lpthandler.c)
Cita de: ~ en  7 Abril 2016, 17:35 PMLo primero son los binarios y el código fuente del driver de acceso general a bajo nivel:
inpout32_source_and_bins.zip [Mirror 1] (https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwiS_cXd7PzLAhVIXR4KHdW9BgYQFggdMAA&url=http%3A%2F%2Fen.osdn.jp%2Fprojects%2Fsfnet_andresprogs%2Fdownloads%2FOldFiles%2Finpout32_source_and_bins.zip%2F&usg=AFQjCNGH5ybdR8uSPIeMkiXd-LH2jys90w)
inpout32_source_and_bins.zip [Mirror 2] (http://devel.archefire.org/programming/Windows/drivers/inpout32_source_and_bins.zip)
Después necesitamos saber qué direcciones de I/O tiene el puerto paralelo. 
Los puertos de I/O son como direcciones de memoria que van desde 0 hasta 65535. Cada una de esas posiciones podemos enviar 1, 2 o 4 bytes, o nosotros podemos recibir 1, 2 o 4 bytes. Por ahora solo vamos a enviar 1 byte a la vez.
El 
LPT1 está en el puerto (0x378, 
378h)(888 decimal) o (0x3BC, 3BCh)(956 decimal).
El 
LPT2 está en el puerto (0x278, 
278h)(632 decimal).
El 
LPT3 está en el puerto (0x3BC, 3BCh)(956 decimal).
El puerto paralelo es un periférico de 8 bits, así que usa 8 pines de datos para representar los 8 bits de cada byte (ya que usa datos y señales en paralelo, simultáneos), y esos son los pines que manipulamos con encendido o apagado cada vez que escribimos, por ejemplo, al puerto 0x378 (Los Pines Anaranjados, del 2 al 9):
Conector Hembra, en la Tarjeta Madre:(http://devel.archefire.org/tmp/parallel__0000.png)
Ahora necesitamos usar 
void _stdcall Out32(short PortAddress, short data), que viene del driver 
inpout32.dll y 
hwinterface.sys.
Algo como esto:
Out32(378h, 255-0);
El código completo es el siguiente:
//NOTE: Compile with GCC under MinGW.
//
// gcc lpthandler.c -o lpthandler.exe
//
//Usage:
// lpthandler.exe LPT_Port Byte_Bit_Data
//
// LPT_Port:
//  - can be 3bc, 378 or 278
//
// Byte_Bit_Data:
//  - can range from 00000000 to 11111111 (written like that, in binary).
//    Every bit controls one of 8 LEDs.
//
// LEDs are connected between DATA and GROUND lines.
// DATA to GROUND lines are connected like this, for pins:
//
// DATA is + and GROUND is -
//
//  2-18
//  3-19
//  4-20
//  5-21
//  6-22
//  7-23
//  8-24
//  9-25
//
// Remember to set the parallel ports as Standard/Normal in the BIOS
// to ensure proper working of the basics with this program.
///
#include <stdio.h>
#include <windows.h>
typedef short _stdcall (*_Out32)(short portaddr, short value);
typedef short _stdcall (*_Inp32)(short portaddr);
int main(int argc, char *argv[])
{
 HINSTANCE INPOUT32_DLL_Handle;
 _Inp32 Inp32;
 _Out32 Out32;
 //Load the inpout32.dll library. It's also associated
 //with hwinterface.sys, but it should open it by itself:
 ///
  INPOUT32_DLL_Handle=LoadLibrary("inpout32.dll");
  if(INPOUT32_DLL_Handle == NULL)
  {
   printf("LoadLibrary failed for inpout32.dll...\n\n");
   return -1;
  }
 //Get access to the Out32/Inp32 functions from inpout32.dll:
 ///
  Out32 = (_Out32)GetProcAddress(INPOUT32_DLL_Handle, "Out32");
  Inp32 = (_Inp32)GetProcAddress(INPOUT32_DLL_Handle, "Inp32");
 //NOTE: The following two lines are the actual logic of the program
 //      and are at the top of importance and the program's key logic.
 //      Everything else could be considered API noise:
 //Configure the CONTROL Port with a 0 to sanitize the port state:
 ///
  Out32(strtol(argv[1],NULL,16)+2, 0);  //Bit 0: Strobe
                                        //Bit 1: Auto Line Feed
                                        //Bit 2: Initialize Printer
                                        //Bit 3: Select Printer
                                        //Bit 4: Enable IRQ Via Ack Line
                                        //Bit 5: Enable Bi-Directional Port
                                        //Bit 6: Unused
                                        //Bit 7: Unused
 //Write the Data port with the desired 8-bit value:
 ///
  Out32(strtol(argv[1],NULL,16), strtol(argv[2],NULL,2));
 //Unload our inpout32.dll library:
 ///
  FreeLibrary(INPOUT32_DLL_Handle);
 return 0;
}
			 
			
			
				Programar el Puerto Paralelo en Windows, Parte 2
Este simplemente es la grabación en video de la grabación de texto para conveniencia y para anidar aquí mismo en los mensajes del foro la grabación, además de también mostrar unos pocos detalles extra durante y fuera de la grabación de texto:
Basics of Parallel Port Programming Under Windows, Part 2 of 2 (http://www.youtube.com/watch?v=zAxeCLuWZCk)[youtube=640,480]zAxeCLuWZCk[/youtube]
			
 
			
			
				Hola , saludos, estoy mirando esto, y no me queda claro , que puedo hacer con esto.
Haber, ¿con el puerto paralelo podria reflasear los drivers de la placa base  si no tengo acceso normalmente?
Agradeceria mayor información.
Un saludo.