Открытие портов ввода/вывода в Windows XP и выше (07.08.2014). |
2014 - Август | |||
07.08.2014 19:02 | |||
Пусть есть ОС Windows 2000 и старше. В ней могут работать стандартные функции работы с портами ввода/вывода (вроде inp и outp). Но если взять Windows XP и младше - Microsoft умышленно заблокировала данный способ использования портов, предоставив лишь функцию CreateFile. Во специфике моей работы (да и не только моей) данная функция применяться не может - и была поставлена задача разблокировать порты в Windows 7 x64. Опустим эмоции: налитые кровью глаза, сжатые кулаки, повышенную потливость, тремор рук и раздражительность. Решение было найдено, но не совсем стандартным способом. Не существует программ, открывающих все порты в Windows. Есть вариант написания драйвера своими руками, работающего с портами - но это долго, муторно и страшно (ассемблер, фу). И единственным способом записать данные в порт и считать их - оказалось использование библиотеки InpOut32.dll. В интернете она представлена в нескольких модификациях. Работает - только которая размером 96КБ, с описанием "inpout32/64" и версией 1.5.0.0. Представляет собой 2 функции: записи в порт (Out32(short АДРЕС, short ЗНАЧЕНИЕ)) и чтения из порта (Inp32(short АДРЕС)). Тип short дает возможность унифицировать две функции (out+outw, inp+inpw, где w - передача не бита, а слова) в одну (Out32, Inp32, по размерности равные WORD). Пример считывания данных из порта клавиатуры на Borland C++ Builder v.6.0: typedef int (__stdcall *MYPROC)(short, short);
hinstLib = LoadLibrary("inpout32.dll");
Label1->Caption= ProcAdd2(0x60); |
|||
Обновлено ( 07.08.2014 19:19 ) |