Вход

Регистрация
Главная
 

 

Пиротехнические пульты, пиротехническое оборудование
и пиротехника
Pyro Alex RF 48
Open Pyro SFX 8 D
Open Pyro SFX 10/120
Pyro Man 200 M
Spets 150
Приём заказов на изготовление пиротехнических пультов
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Работа с LPT под Win 2000, XP: драйвер GiveIO.sys
alexval2007Дата: Суббота, 12.12.2009, 18:55 | Сообщение # 1
Электро воспламенитель
Группа: Администраторы
Сообщений: 659
Награды: 7
Репутация: 7
Статус: Offline
Работа с LPT под Win 2000, XP: драйвер GiveIO.sys

Итак, рассмотрим следующий вариант работы с портами ввода/вывода в ОС Windows NT. Этим "вариантом" будет специальный драйвер GiveIO.sys, который позволяет приложению, запустившему его, свободно работать с любыми портами.

Главным достоинством этого драйвера, является то, что обращения к порту могут быть сделаны и с помощью функций, работающих только в Windows 9x!

Этот драйвер написал Dale Roberts черт знает когда, но актуальности от не потерял до сих пор. В кратце расскажу как он работает: в начале работы нашей программы для общения с портами необходимо обратиться к драйверу GiveIO.sys. При этом он установит такие значения битового массива карты разрешения (I/O Permission Map) для нашего приложения, что для него будет разрешен прямой доступ к любым портам. I/O Permission Map это составная часть системы защиты ввода-вывода Windows NT. Он представляет собой битовый массив, каждый бит которого соответствует порту ввода-вывода. Если бит = 1, то доступ к порту закрыт, если 0, то открыт. Для любого пользовательского приложения все биты установлены в 1, и соответственно мы не можем напрямую влезть в порт. GiveIO.sys внаглую влезает в этом массив и везде устанавливает 0 - т.е. можем обращаться к любому порту из приложения.

Пример использования GiveIO.sys

Для начала скачайте архив с драйвером и файлом установки: giveio.rar (2 Kb)

Теперь нам необходимо зарегистрировать и установить драйвер в системе. Для этого необходимо сделать следующие шаги:

1. Скопируйте файл драйвера GIVEIO.sys в папку C:\Windows\system32\drivers\ если, конечно, система у Вас установлена на диск С: и Вы не меняли пути установки Windows.

2. Запустите файл install.reg При этом Вы увидете примерно следующее сообщение:

Нажимайте Да. При этом Вы получите сообщение об успешном внесении информации в реестр. Можно убедиться в этом. В программе редактора реестра regedit.exe в ветви HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\giveio можно увидеть следующее.

3. ПЕРЕЗАГРУЗКА КОМПЬЮТЕРА

Настало время взяться за программирование. В код нашей программы Port.exe (см. статью 1) внесем некоторые изменения, которые позволят ей обращаться к портам не только в Windows 9x как было раньше, но и в Windows NT. Итоговый код примет вид:

#include "iostream.h"
#include "conio.h"
#include "stdlib.h"
#include "windows.h"

int main()
{
int Address=888;
cout<<"Test LPT port with GiveIO.sys"< HANDLE h=CreateFile("\\\\.\\giveio", GENERIC_READ, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (h==INVALID_HANDLE_VALUE)
{
cout<<"Error! Can't open driver! Press any key to exit... "< getch();
return(0);
}

cout<<"Press '1' to activate and '0' to disactivate lightdiod."< cout<<"To exit press 'e'."< cout<<" "< while(1)
{
switch(getch())
{

case '0': cout<<"Disactivate...."< _outp(Address, 0);
break;
case '1': cout<<"Activate...."< _outp(Address, 1);
break;
case 'e': exit(1);
}
}

getch();
}

Все. Компилируем, запускаем. Щелкаем 1-0: все должно работать. Если выскочило сообщение Error! Can't open driver! Press any key to exit... , значит установка драйвера прошла криво, и его надо переустановить.

Благодаря giveio.sys успешно отработают и такие ассемблерные письмена:

_asm
{
mov dx, 378h
mov al, 1
out dx, al
}

PCPORTS.RU Иванов Д.В.

 
  • Страница 1 из 1
  • 1
Поиск:


Rambler's Top100 Пиротехника, салюты, фейерверки. Яндекс цитирования
www.alexval2007.ucoz.ru © 2008