Привилегированная инструкция на C

#c #windows #parallel-processing #privileges #ports

#c #Windows #параллельная обработка #привилегии #порты

Вопрос:

У меня возникли некоторые проблемы с C. Я пытаюсь запрограммировать параллельный порт в Windows 7 Professional x64 в VS 2010 Ultimate. Поскольку у меня нет параллельного порта, я использую конвертер из USB-> Parallel, и Windows правильно установила драйверы. Я припаял 8 светодиодов на конце параллельного разъема, и все они работают нормально, когда я подключаю USB к компьютеру. Теперь я хотел бы управлять параллельным портом с помощью моей программы, написанной на C, которая:

 #include <stdio.h>
#include <dos.h>
#include <conio.h>
#include <Windows.h>
/********************************************/
/*This program set the parallel port outputs*/
/********************************************/

void main (void)
{
//clrscr();            /* clear screen */
_outp(0x378,0xff); /* output the data to parallel port */
getch();              /* wait for keypress before exiting */
}
  

Программа компилируется и запускается, но я получаю сообщение об ошибке:

 Unhandled exception at 0x00f313a5 in portovi.exe: 0xC0000096: Privileged instruction.
  

Я читал, что порт ввода-вывода отключен на компьютерах с Windows NT и что для этого нужен специальный драйвер. Есть ли какое-либо решение для этого?

Комментарии:

1. conio.h — ужасный, ужасный способ написания вещей.

Ответ №1:

Есть способы обойти это. Смотрите, например, здесь.

Комментарии:

1. Я не знаю, сделал ли я все, что было сказано. Я положил inpoutx64.dll в папку system32/drivers. Я должен перекомпилировать проект и включить загруженную библиотеку?

2. Не поможет. Смотрите social.msdn.microsoft.com/Forums/en/csharplanguage/thread /…

3. Я наткнулся на эту статью по ссылке, которую вы мне дали: support.microsoft.com/kb/322091/en-us кажется, это единственный путь

Ответ №2:

Ваш USB-> параллельный конвертер имеет драйверы для создания виртуального параллельного порта. Она реализует API параллельного порта Windows. В ней не реализован API уровня регистра параллельного порта PC / AT, и даже если бы вам было разрешено указать порт ввода-вывода 0x0378 , вы бы там ничего не нашли. Только реальный PC / AT параллельные порты на системной шине (ISA или PCI) используют этот регистр.

Комментарии:

1. Я тоже рассматривал это на самом деле. Могу ли я записать значение 0x0378 в идентификатор моего устройства USB-концентратора, к которому я его подключил?

2. @Juraj: Нет. USB-концентратор уже используется всеми другими USB-драйверами на вашем компьютере, прямое подключение к нему было бы плохой идеей (а также ужасно сложным). WinUSB позволяет напрямую взаимодействовать с определенными типами USB-устройств, но я не думаю, что параллельные порты входят в их число. Проверьте, предоставляет ли производитель вашего USB-> параллельного кабеля API для работы с битами. Например, ftdichip.com/Support/Documents/AppNotes /…

3. Спасибо, что прояснили некоторые вещи. Нет, кабель ее не поддерживает. Я купил delock.com/produkte/gruppen/USB Adapter /… . Я думаю, что тогда я должен получить одну из них.