Итак, функции для работы с портом используют указатель на порт. То есть Вы создаете этот указатель, и если он создан (не NULL), то используя его можно управлять устройством. Как раз CreateFile() и умеет создавать указатель для порта.

Посмотрите на рисунок. Мы используем CreateFile() для получения HANDLE, с помощью которого потом и производим операции ввода-вывода на устройство. После работы его нужно закрыть CloseHandle(). Сама эта функция CreateFile() такая:
HANDLE CreateFile ( LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDistribution, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile );
В нашем случае lpFileName - это имя порта:
LPT1 , LPT2 и так далее COM1, COM2, и так далее.
Переменная dwDesiredAccess - это атрибут доступа файлу. Он может принимать такие значения:
0 получить атрибут GENERIC_READ чтение GENERIC_WRITE запись GENERIC_READ|GENERIC_WRITE чтение и запись
DwShareMode - совместный доступ, для данного случая доступа к портам всегда равен 0.
LpSecurityAttributes - атрибут защиты. Нужен для NT, в нашем случае всегда равен OPEN_EXISTING.
DwFlagsAndAttributes - атрибут создаваемого файла, в нашем случае должен быть 0.
HTemplateFile - файл шаблона, для нас всегда NULL.
Итак, для работы с портами нужно уставить только lpFileName, dwDesiredAccess, LpSecurityAttributes. При нормальном выполнении мы получим HANDLE, в противном случае NULL.
// TestComm.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "windows.h"
#include "iostream.h"
void main()
{
HANDLE Com2Port;
Com2Port=CreateFile("COM2",GENERIC_READ|GENERIC_WRITE,0,
NULL,OPEN_EXISTING,0,NULL);
if(Com2Port!=INVALID_HANDLE_VALUE)
{
cout << "Open COM 2 " << endl;
CloseHandle(Com2Port);
} else
cout << "Error Open COM2" << endl;
}
Имейте в виду, что Вы не можете открыть порт, если с ним работают, например, мышиный. Но если у Вас получилось, то другая программа не сможет обратиться к порту. Кроме того порта может не быть или другая программа просто не освободила указатель или повесила его. Итак, какие могут быть ошибки:
Занят. Отсутствует. Выведен из строя.