Create Virtual com port

c++, device-driver, winapi

Solution

You'll have to write a driver, so you'll need to install the WDK (previously called DDK). But you're lucky, because the Windows Driver Kit Samples Pack contains a Virtual Serial port samples.

It seems that you want a 'translater' to talk with a device, why not simply write a filter driver and implement some additional IOControls?

If you really want to access an other port from within your driver (which I already did once), you should look up following functions:

- `IoGetDeviceObjectPointer` / `ObDereferenceObject` (for opening/closing the port)

- `IoBuildDeviceIoControlRequest` / `IoCallDriver` (for sending IOCTL's to change port settings)

- `IoBuildSynchronousFsdRequest` / `IoCallDriver` (for writing/reading data)

Structures/IOCTL's you'll need:

- `SERIAL_BAUD_RATE` (for `IOCTL_SERIAL_SET_BAUD_RATE`/`IOCTL_SERIAL_GET_BAUD_RATE`)

- `IOCTL_SERIAL_SET_TIMEOUTS`

- `SERIAL_HANDFLOW` (for `IOCTL_SERIAL_SET_HANDFLOW`/`IOCTL_SERIAL_GET_HANDFLOW`)

- `SERIAL_LINE_CONTROL` (for `IOCTL_SERIAL_SET_LINE_CONTROL`)

- `IOCTL_SERIAL_PURGE`

- `IOCTL_SERIAL_SET_WAIT_MASK`/`IOCTL_SERIAL_GET_WAIT_MASK`

- `IOCTL_SERIAL_SET_CHARS`/`IOCTL_SERIAL_GET_CHARS`

- `IOCTL_SERIAL_WAIT_ON_MASK`

A complete overview of control requests can be found here

Problem

I have to create virtual com port,by which I can communicate with other com port on machine,It is a part of device driver development?or simply we can write in c++. Anyone can help me on this Thanks in advance.

Original source