· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Задержка в ring0

Посл.отвђт Сообщенiе


Дата: Май 18, 2004 20:38:34

Привет. Вообщем как сделать задержку, например на 165 ms, в ring0 (win2k)? Взялся за это недавно: непонятно ещё толком нихрена.
Почитал Four-F, ну и всё такое... :P
Нашёл:
KeDelayExecutionThread. Думаю: ага - вот оно... Скомпилил,
запустил - сайс выскочил... bsod... scandisk.. :)
Выручайте.
Пишу драйверок, который на уровне портов получает инфу о IDE-ATAPI устройствах. Так там нужно ждать не менее 3*55 ms, пока контроллер "опомнится"... :P

P.S.
Ага.. ну и ещё один вопрос. Если я обращаюсь к этому самому контроллеру через порты, то "по ходу" необходимо запретить прерывания, пока я с ним работаю.
Ведь он же глобальный ресурс в системе ну и всё такое..
Или тут дельце обстоит по-другому ?.. :P

Заранее благодарен.


Дата: Май 18, 2004 20:44:16

PUSH OFFSET tHM_DELAY
PUSH 0 ;false
PUSH 0 ;KernelMode
CALL KeDelayExecutionThread@12

, ГДЕ tHM_DELAY - LARGE_INTEGER

MOV EAX,OFFSET tHM_DELAY
ASSUME EAX:PTR LARGE_INTEGER
MOV [EAX].LowValue,tH_SPEED ;задержка в " 100 anoseconds" - интервалах.
MOV [EAX].HiValue,-1
ASSUME EAX:NOTHING


Дата: Май 18, 2004 21:01:24

Хмм.. OFFSET, а не значение ? :P
Посмотрим сейчас...


Дата: Май 18, 2004 21:05:12

Значение в 8 байт запхать одной коммандой PUSH ???


Дата: Май 18, 2004 21:14:23

Хе-хе.. невнимательно посмотрел тип... :P


Дата: Май 18, 2004 21:24:56

 local liDelayTime:LARGE_INTEGER

    or liDelayTime.HighPart, -1
    mov liDelayTime.LowPart, not (165 * 1000000 / 100 )

    invoke KeDelayExecutionThread, KernelMode, FALSE, addr liDelayTime


Дата: Май 18, 2004 21:52:16 · Поправил: snatch

Эхе.. Спасибо.. Только вот у меня что-то случилось..
Винда отказывается после сбоя запускать мой драйвер..
Поменял названия символьной ссылки и устройства - всё равно... Что происходит?.. :(

После вызова CreateService - код ошибки 0x436.

Kernel Mode Driver Manager v1.1 by Four-F решил проблему.
Драйвер будто бы уже был зарегистрирован. Странно...
Что же это было? Может пора поставить SP4? ;)


Дата: Май 19, 2004 14:50:23

Перед запуском драйвера ты его зарегестрировал в реестре. Потом кирдык, но запись в реестре осталась. После ребута ты пытаешься опять зарегестрировать уже зарегестрированный драйвер и получаешь облоом. Так что все нормально.


Дата: Май 19, 2004 19:08:35 · Поправил: snatch

-


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.058