Как записать в порты I/O в Windows XP? (Delphi7)

Я пытаюсь записать в порты 0x60 и 0x64 без удачи.

Код Delphi:

procedure PortOut(IOport: WORD; Value: BYTE); assembler; register;
asm
  XCHG DX,AX
  OUT DX,AL
end;

По вызову PortOut я получаю исключение Привилегированной команды EPrivilege, потому что IN и OUT может только выполниться как Ring0.

Я хотел бы знать, как я могу получить права Ring0 мой приложение или как я мог записать в порты 0x60 и 0x64, пользующийся некоторой существующей внешней библиотекой.

5
задан alexandrul 30 January 2010 в 10:51
поделиться

4 ответа

Посмотрите на IO.DLL от укрытия Geek .

IO.DLL позволяет бесшовные порту ввода / вывода Операции для окон 95/98 / NT / 2000 / XP с использованием того же библиотека.

Вот пример: Параллельный порт ввода / вывода с использованием Delphi V 6.0

6
ответ дан 18 December 2019 в 09:07
поделиться

Правильный способ обрабатывать эти ситуации - это написать драйвер Windows, но он не может быть сделан в Delphi для отсутствия поддержки. Для компилятора DDK и C Compiler. Другие решения, представленные здесь, но ознакомьтесь с тем, что обычно дают доступ к любому порту ввода / вывода, не только те, которые требуют вашего приложения. И это может быть проблемой безопасности - если архитектура x86 позволяет системному программисту определить iopl (уровень привилегии ввода / вывода), и большинство систем устанавливают его кольцо 0, есть причина. Общие драйверы портов ввода-вывода доступа полезны для тестов и, возможно, прототипирования или в качестве мер STOPGAP, но я буду очень осторожен, чтобы их развернуть, особенно если система не под строгим контролем. Если вам нужен такой доступ, вам определенно нужно понимать, как работает Windows Kernel и его драйверы, а почему - и реализуют свой собственный драйвер. Большинство Windows Windows в небезопасных небезопасе по SE - он работает со многими неустойчивыми программным обеспечением с неправильными привилегиями, которые делают его так.

6
ответ дан 18 December 2019 в 09:07
поделиться

, конечно, может вызвать проблемы для устройств, которые контролируются водителем. Такие вещи, такие как IO.DLL, в основном предназначены для интерфейсаных карт, для которых не существуют драйверы Windows, или где драйвер Windows не работает до активации.

И поскольку порт 60H - это контроллер клавиатуры, а клавиатура обычно используется, оно может вызвать проблемы.

Если вы не взаимодействуете о древнем аппаратном обеспечении, но просто пытаетесь портировать код DOS (TP), я срочно советую переписать указанный код на основе обычных API-адресов Windows.

3
ответ дан 18 December 2019 в 09:07
поделиться
3
ответ дан 18 December 2019 в 09:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: