Много статей не имеет срока устаревания. Есть смысл смотреть и 2011, и даже 2008 год. Политика сайта: написать статью, а потом обновлять ее много лет.
Открыта карта ВТБ для материальной поддержки сайта: 4893470220568296.

Рекламодателям! Перестаньте спамить мне на почту с предложениями о размещении рекламы на этом сайте. Я никогда спамером/рекламщиком не был и не буду!
" title="Написать письмо">Написать письмо

Статистика

Пользователи : 1
Статьи : 1238
Просмотры материалов : 4492744
 
Открытие портов ввода/вывода в Windows XP и выше (07.08.2014). Печать E-mail
2014 - Август
07.08.2014 20:02
Save & Share

Пусть есть ОС 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);
typedef int (__stdcall *MYPROC2)(short);
    HINSTANCE hinstLib;
    MYPROC ProcAdd;
    MYPROC2 ProcAdd2;

 

hinstLib = LoadLibrary("inpout32.dll");
    if (hinstLib != NULL)
    {
        ProcAdd = (MYPROC) GetProcAddress(hinstLib, "Out32");
        ProcAdd2 = (MYPROC2) GetProcAddress(hinstLib, "Inp32");
    }

 

Label1->Caption= ProcAdd2(0x60);

Обновлено ( 07.08.2014 20:19 )
 
 

Последние новости


©2008-2019. All Rights Reserved. Разработчик - " title="Сергей Белов">Сергей Белов. Материалы сайта предоставляются по принципу "как есть". Автор не несет никакой ответственности и не гарантирует отсутствие неправильных сведений и ошибок. Вся ответственность за использование материалов лежит полностью на читателях. Размещение материалов данного сайта на иных сайтах запрещено без указания активной ссылки на данный сайт-первоисточник (ГК РФ: ст.1259 п.1 + ст.1274 п.1-3).