Тема: Com-порт
Показать сообщение отдельно
  #19  
Старый 05.10.2011, 04:19
Lucky192 Lucky192 вне форума
Прохожий
 
Регистрация: 04.10.2011
Сообщения: 28
Репутация: 1351
По умолчанию

Сохранился у меня с незапамятных времен оригинал проекта 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);
Ответить с цитированием