Great Это вопрос не ко мне Человек предпочитает извращаться, мы ему помогаем, внося посильную лепту...
угу, линковался из ntdll, после небольших исправлений установился драйвер и опять проверка диска C: D: E: F: G: )) reboot + freese , вообщем неработает, как и c KeDelayExecutionThread.
Насчет извращений, узнал новые функции, О! ...... ; invoke ZwYieldExecution invoke KeGetCurrentThread mov pkThread, eax invoke KeSetBasePriorityThread,pkThread,LOW_PRIORITY invoke KeSetPriorityThread,pkThread,LOW_PRIORITY DO_DELAY ..... один х тормозит( увы...
А енто как так =// А чо там писать то? Помоему тут все предельно ясно, но. Но! Я так и не понял что тебе нужно.. Опиши подробно какая именно пауза тебе нужна. При каких условиях. То есть какой IRQL, как должны обстоять дела с потоками и т.д. и т.п. конечно скучно
Ситуация такова: попадает сюда пакет hookproc proc PacketHeaderWORD, PacketWORD, PacketLength:WORD, RecvInterfaceIndex:WORD,SendInterfaceIndex:WORD,RecvLinkNextHopWORD, SendLinkNextHopWORD ; invoke ZwYieldExecution DO_DELAY ; invoke KeStallExecutionProcessor,500000 mov eax,PF_PASS ret hookproc endp он должен пройти после небольшой задержки дальше в сеть, чтобы у меня в сети трафик растянулся... я делаю паузу макросом DO_DELAY MACRO mov eax, DELAY .while eax dec eax .endw ENDM соответственно тачка подвисает, CPU LOAD 100% пакет задерживается и уходит дальше, но работать то невозможно... а хочеться)
Особо не судите о моем образе мышления, 3ий день изучаю ассемблер. Ну это конечно красиво - ассемблер, раньше delphi, c++, QBasic
p.s.: но проблема Паузы в драйвере имеет место! Обыскал весь интернет, у большинства писателей CPU 50%- Пустой цикл. Но так нельзя... нужно искать выход...
Ясно, тогда не понятно чем не устраивает обычное отправление потока в sleep - это KeDelayExecutionThread / ZwDelayExecution и другие. Поясни)
Полный облом, виснет система( Меня конечно устраивали бы эти функции, но видимо т.к. драйвер сетевой... виснет... p.s. : с KeDelayExecutionThread уходит в перезагрузку... черный экран и ресет с ZwDelayExecution зависает , просто зависает, без BSOD'a просто мышь перестает шевелиться
p.s. : возможно правда я параметры передаю не верно, вот посмотри, правильно?: Код (Text): local DelayTime:LARGE_INTEGER mov DelayTime.HighPart, 0 or DelayTime.HighPart, -1 mov DelayTime.LowPart, -500000 invoke KeDelayExecutionThread,KernelMode,FALSE,addr DelayTime
Пассив - актив, странно вы мыслите гражданин, какой же я товарищ Вам, Моисеев Вам Товарищ?(шутка) А где смотреть то IRQ?
Маленький эксперимент: Вставил KeDelayExecutionThread в свой обработчик сетевого траффика. Обработчик заведомо исправен, работает безупречно более года. На малых задержках (DelayTime.LowPart = -500000) никаких проблем. А если увеличить DelayTime.LowPart = -50000000, то получаю бсод.... Я в сетевых делах не силён, но есть предположение: есть таймаут, в течение которого система ждёт реакции обработчика на запрос. Если обработчик может задержать обработку пакета, то необходимо дать системе знать, что запрос находится в состоянии обработки/pending. Т.е. какой-нибудь STATUS_PENDING. Это всего-лишь предположение...
cou пассив это PASSIVE_LEVEL а не то, что ты подумал KdPrint(("IRQL : 0x%x\n", KeGetCurrentIrql())); что-то мне кажется что больше еденицы..