der source ist aus dem Platform DDK von MS.

der source würde dir nicht viel nutzen da dir die ganzen header fehlen.


so spricht man ihn dann an

Code:
void CReadWritePort::WriteByte(BYTE PortNumber,BYTE Data)
{
	GENPORT_WRITE_INPUT InputBuffer;

	hndFile = CreateFile(
                "\\\\.\\GpdDev",                    // Open the Device "file"
                GENERIC_WRITE,
                FILE_SHARE_READ,
                NULL,
                OPEN_EXISTING,
                0,
                NULL
                );
	if (hndFile == INVALID_HANDLE_VALUE)        // Was the device opened?
    {
        MessageBox(NULL,"Unable to open the device.","PortIO",MB_OK);
        return;
    }
	
	IoctlCode = IOCTL_GPD_WRITE_PORT_UCHAR;
    InputBuffer.CharData = Data;
    DataLength = offsetof(GENPORT_WRITE_INPUT, CharData) +
                         sizeof(InputBuffer.CharData);

	//sscanf("200", "%x", &PortNumber);
	//PortNumber = 0x3BC;
	InputBuffer.PortNumber = PortNumber;

	IoctlResult = DeviceIoControl(
                        hndFile,                // Handle to device
                        IoctlCode,              // IO Control code for Write
                        &InputBuffer,           // Buffer to driver.  Holds port & data.
                        DataLength,             // Length of buffer in bytes.
                        NULL,                   // Buffer from driver.   Not used.
                        0,                      // Length of buffer in bytes.
                        &ReturnedLength,        // Bytes placed in outbuf.  Should be 0.
                        NULL                    // NULL means wait till I/O completes.
                        );

    if (IoctlResult)                            // Did the IOCTL succeed?
    {
        ATLTRACE("Wrote data %x to port %x\n", InputBuffer.CharData,InputBuffer.PortNumber);
		CString Dummy;
		Dummy.Format("%x",InputBuffer.CharData);
		if(PortNumber == 0)
		{
			SetDlgItemText(m_hMainDlg,IDC_DATEN_EDIT,Dummy);
		}
		if(PortNumber == 2)
		{
			SetDlgItemText(m_hMainDlg,IDC_STEUEROUT_EDIT,Dummy);
		}
		
    }
    else
    {
        ATLTRACE("Ioctl failed with code %ld\n", GetLastError() );
		CString csMsg;
		csMsg.Format("Ioctl failed with code %ld",GetLastError());
		MessageBox(NULL,csMsg,"PortIO",MB_OK);
    }


    if (!CloseHandle(hndFile))                  // Close the Device "file".
    {
        ATLTRACE("Failed to close device.\n");
		MessageBox(NULL,"Failed to close device","PortIO",MB_OK);
    }
}