На двухядерном процессоре повышаю приоритет одного процессора invoke KeRaiseIrql, HIGH_LEVEL, addr OldIrql как повысить приоритет второго процессора до приоритета первого?
twgt Вообще-то с точки зрения логики процессоров как раз два. ОС оперирует логическими процессорами, а не числом физических кристаллов.
Делается довольно просто, получаешь кол-во процессоров с помощью KeNumberProcessors, проходишь в цикле все процессоры, кроме текущего, добавляешь в очередь отложенных вызовов каждого процессора свою функцию, которая просто ждёт, когда все процессоры перейдут на DISPATCH_LEVEL. Пример есть в книжке Rootkits, авторов Greg Hoglund, James Butler, стр. 189 - (частичный просмотр возможен на books.google.com) ЗЫ Только нужно помнить, что функции типа KeNumberProcessors начиная с Vista SP1 официально не рекоммендуются из-за отсутствия поддержки оными систем с "горячей" заменой процессоров :-D
Код (Text): RaiseIrqlRoutine proc Reserved1:DWORD invoke KeLowerIrql, HIGH_LEVEL ;После второй тупить начал) ret RaiseIrqlRoutine endp invoke KeIpiGenericCall, addr RaiseIrqlRoutine, NULL Попробовать так можно.
2FED IRQL на котором выполняются межпроцессорные прерывания, на 1 выше чем CLOCK2_LEVEL. Причём там либы, в них многих экспортов нет, я про реальное ядро говорил.
Впринципе понижать нельзя, не уверен что тут сработает. Даже не представляю для чего может понадобиться повышать IRQL выше чем IPI_LEVEL.
AntiFreeze Просто KeIpiGenericCall экспортируется только в Висте. В остальных она есть но не экспортируется.