Форум: "Система";
Текущий архив: 2003.05.19;
Скачать: [xml.tar.bz2];
ВнизКак передать байт в порт LPT в WinXP? Найти похожие ветки
← →
Ciber_SLasH (2003-03-15 23:57) [0]У меня токой вопрос.
Как передать/прочитать байт из порта LPT?
В Win9x такой код работает:
asm
mov dx,378h
in al,dx
...
end;
А в WinXP не работает. Он останавливается на "in al,dx".
← →
Anatoly Podgoretsky (2003-03-16 00:19) [1]Там такой код то же работает, только у тебя прав нет его выполнять, его можно делать только на нулевом уровне.
Надо или туда перейти или использовать драйвер
← →
Ciber_SLasH (2003-03-16 00:31) [2]А как получить права на выполнение этого кода?
Я пытался сделать:
procedure TForm1.FormCreate(Sender: TObject);
var
hToken: THandle;
tkp,PrevState: _TOKEN_PRIVILEGES;
k: Cardinal;
ver: TOSVERSIONINFO;
begin
ver.dwOSVersionInfoSize := Sizeof(ver);
GetVersionEx(ver);
if ver.dwPlatformId=VER_PLATFORM_WIN32_NT then
begin
//"Включаем" привилегию "SeDebugPrivilege"
OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,hToken);
LookupPrivilegeValue(nil, "SeDebugPrivilege", tkp.Privileges[0].Luid);
tkp.PrivilegeCount:=1;
tkp.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, tkp, SizeOf(PrevState), PrevState, k);
if GetLastError <> ERROR_SUCCESS then
exit
end
end;
Но это не помогло.
← →
Anatoly Podgoretsky (2003-03-16 08:08) [3]только у тебя прав нет его выполнять, его можно делать только на нулевом уровне.
Ты работаешь на третьем пользовательском.
← →
Serious Sam (2003-03-16 09:21) [4]Попробуй режим совместимости с Windows 95 или возьми сторонний компонент.
← →
Serge Pik (2003-03-16 22:05) [5]Пакет WinDriver от Jungo (c) генерит правильный код для D5-7 для LPT и ставит свой драйвер. Есть на нехороших дисках типа "Все про Ассемблер"
← →
BPK (2003-03-16 22:19) [6]В том-то вся прелесть Windows NT (XP это тоже NT), что эта ОС не позволяет пользовательским программам напрямую общаться с аппаратурой. Поэтому система вцелом стабильнее, чем Windows 9x (к Windows 2000 это не относится).
Инструкции ввода/вывода процессор может исполнять только на нулевом уровне привилегий (режим ядра операционной системы), иначе возникает аппаратное исключение. Так устроены процессоры 80x86.
В Windows 9x такой номер проходит потому, что подпрограмма обработки исключения уже сама перенаправляет данные в порт переключив процессор на нулевой уровень привилегий. Как результат - любая программа может записать в любой порт любую хренотень (даже в порт IDE-контроллера или видеокарты), в результате чего система начинает глючить или вообще виснет.
Если есть желание общаться каким-либо с устройством, нужно обратиться к его драйверу, работающему в режиме ядра. Если драйвер для Вашего устройства не найти, то нужно самому написать его.
Только обращаю внимание, что при написании драйверов, работающих в режиме ядра нужно быть предельно аккуратным, внимательным и до тонкостей знать работу kernel-драйверов, иначе, при некорректном драйвере, можно запросто получить синий экран, или система будет падать едва ли не чаще, чем Windows 9x.
Впрочем, по-моему, под Windows XP уже есть драйвер LPT, к которому обращается даже драйвер принтера.
← →
SoftOne (2003-03-17 01:50) [7]2 BPK (16.03.03 22:19)
Стоило ли писать сие сообщение?
1. "В том-то вся прелесть Windows NT (XP это тоже NT), что эта ОС не позволяет пользовательским программам напрямую общаться с аппаратурой. Поэтому система вцелом стабильнее, чем Windows 9x (к Windows 2000 это не относится).
" Ну очень не понятно, чем Вас не устроил W2K, ведь, кстати в отличии от WinXP, он является прямым продолжением линейки NT!"
2. "Инструкции ввода/вывода процессор может исполнять только на нулевом уровне привилегий (режим ядра операционной системы), иначе возникает аппаратное исключение. Так устроены процессоры 80x86."
Видите ли, проблема в том, что процессор ничего, нифига не знает об "уровне привилегий". Знает об этом только сама ОС.
← →
France (2003-03-17 09:16) [8]Попробуй использовать компонент DirectPort
← →
Serious Sam (2003-03-17 10:09) [9]...Или компонент LPTwdmIO...
← →
Dr_Mike (2003-03-17 12:16) [10]2 SoftOne >> Видите ли, проблема в том, что процессор ничего, нифига не знает об "уровне привилегий". Знает об этом только сама ОС.
Уважаемый Сергей Алексеевич, так ли это в действительности ?
← →
SoftOne (2003-03-18 02:29) [11]Не барское это дело - пускать просителей в дом или нет. Для этого есть холопы.
Кстати, у одного моего знакомого сдох компьютер. При ближайшем рассмотрении оказалось, что почил в бозе винчестер (128 Мв однако). Заменили в некоем сервисном центре на что-то более новое и установили на компе минимально что смогли W98. А процессор там 486DX. И неужели Вы можете подумать, что 486-й знает об ОС W95 и выше?
← →
ret_too (2003-03-19 19:33) [12]Пользуй WinIO, смотри http://www.internals.com .
Шесть команд из dll и всё Ок.
← →
Dr_Mike (2003-03-21 14:16) [13]2 SoftOne >> Дело в том, что процессору ничего и не нужно знать об операционной системе.
А уровень привилегий - это понятие защищенного режима.
Дело в том, что в защищенном режиме любой запрос к памяти со стороны операционной системы и любой прикладной программы должен быть санкционирован, так как микропроцессор аппаратно контролирует доступ программ к любому адресу оперативной памяти. То есть, любой участок памяти, выделяемый процессором для операционной системы или программ, должен быть описан с помощью так называемого дескриптора сегмента - (грубо говоря) набора определенных параметров, который микропроцессор хранит в оперативной памяти ( да! именно микропроцессор, а не операционная система!), одним из которых [ параметров] является как раз уровень привилегий. Этот самый уровень привилегий определяет возможность доступа данной программы (или операционной системы) к участкам памяти, используемым другими программами и т.п.
← →
wal (2003-03-21 16:29) [14]
> Видите ли, проблема в том, что процессор ничего, нифига
> не знает об "уровне привилегий". Знает об этом только сама
> ОС.
Зря вы так - процессор это знает, а ОС только выставляет уровень привелегий. Win использует только два уровня, а вообще-то их четыре, и они имеено в процессоре , а не в ОС.
← →
wal (2003-03-21 16:30) [15]А собственно СУБЖ -
CreateFile("LPT1" ..... и так далее
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2003.05.19;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.007 c