Сохранился у меня с незапамятных времен оригинал проекта giveio.sys, вот ссылка на скачивание:
http://files.mail.ru/EKHU7T
Если посмотрите исходник драйвера, там есть функция:
Код:
VOID SetIOPermissionMap(int OnFlag)
{
Ke386IoSetAccessProcess(PsGetCurrentProcess(), OnFlag);
Ke386SetIoAccessMap(1, IOPM_local);
}
Вот она как раз и открывает приложению доступ к портам. Драйвер нужен, чтобы вызвать функции Ke386... - это функции ядра, приложениям они не доступны.
В архиве есть программа для инсталляции драйвера.
Функция для загрузки драйвера:
Код:
function LoadGiveIO:boolean;
var DriverHandle:integer;
begin
Result:=false;
DriverHandle:=CreateFile('\\.\giveio',
GENERIC_READ,
0,
NIL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);
if (DriverHandle<>INVALID_HANDLE_VALUE) then begin
Result:=true;
CloseHandle(DriverHandle);
end;
end;
Но, повторяю: работать с COM-портами под Windows через стандартные WinApi-функции не сложнее (и, что самое главное - корректнее) чем через прямой доступ.
Вот минимальная программа, которая будет работать если порт доступен:
Код:
uses Windows;
...
var h,t:cardinal;
...
h:=CreateFile('COM1',GENERIC_READ+GENERIC_WRITE,0,nil,OPEN_EXISTING,0,0);
WriteFile(h,'Hello World!',12,t,nil);
CloseHandle(h);