Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 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
14-59898
JibSkeart
2003-04-27 12:56
2003.05.19
Круто У нас Метель была я в шоке :о)


1-59735
Yel
2003-05-06 07:49
2003.05.19
имя и рабочая папка ярлыка


14-59922
crash
2003-04-28 00:21
2003.05.19
отправить сообщение другим приложениям


14-59881
Max1111
2003-04-29 12:11
2003.05.19
Проиграть wav файл после завершения процедуры


3-59612
WD
2003-04-28 17:21
2003.05.19
Local database





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский