|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Май 29, 2003 02:14:08 anton постарайся еще один язык подучить ;) |
|
|
Дата: Май 29, 2003 04:27:14 anton А как по другому? Как в примере из help'а. [code] /* * * test.c * * Компиляция: bcc.exe -ms test.c * */ #include<stdio.h> #include<dos.h> #define CTRL_ALT 0xC #define DEL 83 void interrupt (*old)(); void interrupt new9(); char far *reg = (char far*)0x417; void main() { old = getvect(9); setvect(9, new9); printf("Программа стала резидентной.\n"); keep(0, (_SS + (_SP/16) - _psp)); } void interrupt new9() { if(inportb(0x60) == DEL && (*reg & CTRL_ALT) == CTRL_ALT) { outport(0x20, 0x20); /* чтобы убедиться в работоспособности */ sound(800); delay(500); nosound(); } else old(); } [/code] |
|
|
Дата: Июн 1, 2003 00:45:37 Ну дык чо с keep'ом-то, великоуважаемый <-----P2M----->! Как изменили Вы его, что всё так круто заработало (был бы признателен за ответ :-) ). |
|
|
Дата: Июн 1, 2003 00:56:11 Вау народ, охренеть! Даже и не заметил как тема на вторую страницу перевалила! Я всё старые сообщения перечитываю и не пойму почему никто не пишет, а оно оказывается на second page! Поэтому забираю своё (уже не уместное) сообщение к P2M и говорю ему огромное п-а-с-и-б-о за предоставленный мне help с его стороны! Ща скачаю и разберу, чо там изменено. И вообще П-А-С-И-Б-О ВСЕМ кто откликнулся на хриплый крик студента о помощи! Не перевились в стране нашей доблестные программисты(типа рыцари)!!!! |
|
|
Дата: Июн 1, 2003 01:16:40 --------------------- ----->to Аноним<----- --------------------- Думаешь стоит, я вроде и так уже почти состаялся в этой жизни(как программист). А если имя Вам моё и не знакомо, то в этом я уж ну никак не виноват! ;););););););););););););););););) А вообще планы мои(на этот лето) грандиозны: овладетьь в совершенстве: 1. assembler 2. Visual C++ 3. ну и ещё "MS Блокнот" и машинный код Ну как не хило??? не каждый на это отчаится!!!! |
|
|
Дата: Июн 1, 2003 05:13:11 anton Думаешь стоит, я вроде и так уже почти состаялся в этой жизни(как программист). Вообще-то, я говорил о _русском_ языке :) |
|
|
Дата: Июн 1, 2003 20:19:53 Да, а что он сильно изменился с того времени как я последний раз в инет выходил :) |
|
|
Дата: Июн 3, 2003 21:06:46 Как оказалось, та - первая программа, по отключению CTRL+ALT+DEL, полностью рабочая, но только под dos, а я первоначально тестил её в win. ----------------------------- --------->for P2M<--------- ----------------------------- Что касается изменения keep, то: keep(0, (_SS + (_SP/16) - _psp)) = keep(0, _DS - _CS + _SP/16 + 1) вот почему (размещение резидента в памяти (модель памяти small)): _________ Начало стека (регистр SP) | | _DS = _SS__|_________|Конец стека (регистр SS) | | | HEAP | |_________| | |неинициализированные |_________|данные | |инициализированные |_________|данные | текст | |программы| |_________| | psp | _CS______|_________| Только вот в левый keep (для пущей верности) надо 1 параграф добавить, как и в правом, так как при делении _SP/16 дробная часть отбрасывается. А так они, получается, оба идентичны. -------------------------------------- --------->for Black_mirror<--------- -------------------------------------- Программа одинаково удачно работает с любым из вариантов: 1) (*reg & CTRL_ALT) == CTRL_ALT 2) *reg == CTRL_ALT Но честно говоря, первый вариант мне не до конца понятен (не могли ба Вы более подробно по нему написать, если можно). Что он делает и в чём его преимущество? Если у Вас есть какие-либо соображения по изложенной информации или Вы видите, что её автор в чём-то сильно заблуждается, то напишите, пожалуйста, не стесняйтесь (а то мне 9 июня экзамен по этой теме сдавать, а я ,может быть, ещё и нифига не знаю)! Буду благодарен. Заранее благодарен!!!!!!! P. S. Спасибо всем кто откликнулся и помог в решении проблемы! Отдельное спасибо: P2M Black_mirror volodya алех |
|
|
Дата: Июн 3, 2003 21:09:09 Блин, чо за фигня, я столько над картинкой батрачил, а она через жо..у получилась. Попытка№2: __________ Начало стека (регистр SP) | | _DS = _SS_________ |_________ | Конец стека (регистр SS) | | | | HEAP |_________ | |_________ | неинициализированные данные |_________ | инициализированные данные | текст | |программы| |_________ | | psp | _CS _________ |_________ | |
|
|
Дата: Июн 3, 2003 21:10:55 ЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭ что за хрень почему я под ником Анонима выхожу мой ник - anton !!!!!!!!! :( :( :( :( :( :( :( :( :( :( |
|
|
Дата: Июн 3, 2003 23:21:56 Программа одинаково удачно работает с любым из вариантов: 1) (*reg & CTRL_ALT) == CTRL_ALT 2) *reg == CTRL_ALT Описание флагов клавиатуры: 40:17 byte Keyboard flag byte 0 (see KB FLAGS) │7│6│5│4│3│2│1│0│ keyboard flag byte 0 │ │ │ │ │ │ │ └─── right shift key depressed │ │ │ │ │ │ └──── left shift key depressed │ │ │ │ │ └───── CTRL key depressed │ │ │ │ └────── ALT key depressed │ │ │ └─────── scroll-lock is active │ │ └──────── num-lock is active │ └───────── caps-lock is active └────────── insert is active 40:18 byte Keyboard flag byte 1 (see KB FLAGS) │7│6│5│4│3│2│1│0│ keyboard flag byte │ │ │ │ │ │ │ └─── left CTRL key depressed │ │ │ │ │ │ └──── left ALT key depressed │ │ │ │ │ └───── system key depressed and held │ │ │ │ └────── suspend key has been toggled │ │ │ └─────── scroll lock key is depressed │ │ └──────── num-lock key is depressed │ └───────── caps-lock key is depressed └────────── insert key is depressed Как видим в ячейке 40:17 кроме состояния CTLR'а и ALT'а, хранится еще и другие флаги, то есть если у нас включен CAPS_LOCK то когда мы нажимаемм CTRL+ALT+DEL в ячейке 40:17 будет 4Ch != 0Ch. В первом варианте маскируются все биты кроме битов соответствующих CTRL и ALT. Поэтому состояние остальных флагов не будет влиять на результат сравнения. |
|
|
Дата: Июн 6, 2003 00:54:05 Знаете, тут сегодня, перед кафедрой вышки такой дебат состоялся, на тему: так что же происходит при нажатии CTRL+ALT+DEL? И честно говоря я тоже сильно задумался, хотя казалось решил для себя эту проблему раз и навсегда. Так вот было высказано море различных мнений(часть из них мне удалось опровергнуть на месте, а часть действительно ввело меня в сомнения). Ниже приведены те варианты, которые меня заинтересовали и на которые я не смог дать однозначного ответа (здесь же приведены мотивации этих вариантов их же авторами): Вариант_1 при нажатии на эти клавиши, происходит отдельное прерывание (сказали двадцать какое-то), которое приводит к перезагрузки системы; Мотивация: так же как и на CTRL+Break так же как и на PrintScreen на CTRL+ALT+DEL есть своё отдельное прерывание Вариант_2 вот об этом я точно ничего не слышал и даже не знаю как поверить: при нажатии этих клавиш - на определённую ножку процессора подаётся какой-то импульс, который и приводит к перезагрузки системы; Мотивация: как тогда программно перезагрузить машину, естественно это делается каким-то крутым способом Вот, что я думаю по этим вариантам: По_варианту_1 если бы такое прерывание и было, то оно обязательно описывалось бы в векторной таблице прерываний (которых там 256), но такового в списке я не обнаружил, поэтому это предложение опрометчиво По_варианту_2 есть прерывание INT 19h, которое вызывает перезагрузку операционной системы. Правда, как я понимаю, перезагрузка системы не значит перезагрузку машины, но тогда и впрямь становится не понятным – как программно перезагрузить машину? Вот как я для себя понимаю этот вопрос: Так же как и PrintScreen и SysReq и CTRL+Break – CTRL+ALT+DEL тоже отслеживается прерыванием INT09h, которое в свою очередь проверяет формат байтов по адресам 0000h : 0417h и 0000h : 0418h и используя эти данные плюс скан-код нажатой клавиши вычисляет ASCII код нажатой клавиши или комбинации клавиш, а потом выполняет нужное действие, например выводит клавишу в консоль. Или, как в случае с нашими комбинациями запускает обработчик соответствующего прерывания(INT05h-<PrtScr> INT1Bh-<CTRL+Break>). В случае же с CTRL+ALT+DEL после проверки байта 0000h : 0417h, проверяется порт 60h на наличие в нём скан-кода DEL и если таковой имеется выполняется перезагрузка. Но здесь есть один нюанс – приоритет прерываний. Прерывание INT05h имеет высший приоритет чем INT09h, а INT1Bh более низший поэтому при нажатии <PrtScr> сперва выполняется INT05h и только потом INT09h, а в случае с <CTRL+Break> сначала INT09h, а потом уже INT1Bh. Короче какие-то непонятные цепочки. P.S. всем стойким перцам: если Вы дочитали это до сюда, то не бросайте и прочтите 3 следующие строки. Так помогите люди добрые разъяснить ситуацию раз и навсегда. Так что всё-таки происходит при нажатии CTRL+ALT+DEL и как программно перезагрузить машину. P.S.2 и не смейтесь, пожалуйста, если видите, что я сильно заблуждаюсь, лучше помогите! :) |
|
|
Дата: Июн 6, 2003 05:35:19 anton при нажатии этих клавиш - на определённую ножку процессора подаётся какой-то импульс "Брехня" (C) Неуловимые мстители. У процессора есть нога Reset. Где-то в начале 90х я читал статью (не помню в каком журнале, Юн. техник или Тех. молодежи или еще где-то) где приводилась схема, как сделать кнопку Reset на корпусе компьютера. Идея в том чтобы на время заземлить ножку Reset. (Не пробуйте повторить это сегодня!) Вот как я для себя понимаю этот вопрос ... Почти согласен. Только: 1. int9h не только проверяет 0417h и 0418h, но и устанавливает их. 2. int9h не выводит клавишу на консоль, а только помещает ее значение в буфер клавиатуры. Прерывание INT05h имеет высший приоритет чем INT09h Если речь о CPU-generated (80186+) - BOUND RANGE EXCEEDED, то afaik да. Если о PRINT SCREEN, то afaik нет. Короче какие-то непонятные цепочк В чем проблема. Int9h принимает все нажатия, отпускания и удержания кнопок клавиатуры, анализирует и в результате либо меняет состояние 0417h/0418h, либо вызывает обработчики int5h/int1Bh/CtrlAltDel/..., либо кладет код+сканкод с кольцевой буфер (может пикать если буфер полон) либо ничего не делает, например, если произошло отпускание кнопки. что всё-таки происходит при нажатии CTRL+ALT+DEL Мой вариант - работает обработчик int9h (иначе, почему работает Ваша программа?) Хотите узнать не из чужих уст - возьмите sourcer, дизассемблируете bios и смотрите код int9h. как программно перезагрузить машину Из Int 19h from Ralf Bron: ... To accomplish a warm boot equivalent to Ctrl-Alt-Del, store 1234h in 0040h:0072h and jump to FFFFh:0000h. For a cold boot equivalent to a reset, store 0000h at 0040h:0072h before jumping ... Итого Int19h или jump to FFFFh:0000h. Все это сработает под dos, как поведет себя win мне неведомо. |
|
|
Дата: Июн 8, 2003 10:34:28 А где этот учебник Фроловых качнуть можно? |
|
|
Дата: Июн 9, 2003 23:36:50 ------------------------------- ----->F O R A L L<----- ------------------------------- С – П – А – С – И – Б – О ВАМ ВСЕМ ОГРОМНОЕ ЗА ПОМОЩЬ!!!!!!!!! Ваши знания, опыт и моё упорство сотворили 5(ОТЛИЧНО) в моей глубокоуважаемой зачётке!! ==)))))))) У-РРРРРРРРРРРР-А На экзамене мною был сотворён резидент на INT9h, с заменой обработчика прерывания INT1Ch. Рулёзная прога получилась, хоть и глупая ===))))))(ею можно изрядно нервы пользователя потрепать, если в autoexec.bat прописать). ------------------------ ----->for 640k<----- ------------------------ Честно говоря мне было лень ссылку из скрипта выдирать и просматривать её по фреймам, поэтому привожу общий адрес: http://www.info.datarecovery.ru Когда загрузится страничка, в нижнем левом фрейме будет дерево всех тем данного ресурса, путь к тому учебнику, о котором я говорю: Info-центр DataRecovery.Ru-->Библиотека книг-->Библиотека системного программиста-->1991-->1-A. Операционная система MS-DOS. Том 1, книги 1 - 2 А вообще там много чего интересного и на что можно потратить своё время (оно того стоит – моё личное мнение). Если Вам интересно про буфер почитать (не про Памелин, а про Вашей Клавы), то зайдите на тему «Буфер клавиатуры на С++»(в этом же форуме). Там я выложил те ссылочки, что мне очень понравились(правда быть может для Вас это юмор детский, посему как знаете :-) ). А вообще там не только про буфер, но и про системный таймер, жёсткий ну и т.д и т.п. ------------------------------------------------------------------------------------------------------------------- Однако тему эту мне кажется не культурным объявлять закрытой и тем более закрывать оную, так как много ещё чего написать можно здесь и много ещё не открытых и не изведанных тайн она в себе хранит!!!! ---------------------------------------------------------------------- --------------------------------------------- P. S. и ещё раз огромное ВСЕМ САСИБО отдельное спасибо за наставления: Black_mirror P2M |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.066 |