Повышение приоритета процессора

Тема в разделе "WASM.NT.KERNEL", создана пользователем Bazhan, 1 авг 2008.

  1. Bazhan

    Bazhan Андрей

    Публикаций:
    0
    Регистрация:
    8 янв 2008
    Сообщения:
    71
    Адрес:
    Украина
    На двухядерном процессоре повышаю приоритет одного процессора
    invoke KeRaiseIrql, HIGH_LEVEL, addr OldIrql
    как повысить приоритет второго процессора до приоритета первого?
     
  2. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    Процессор 1, ядра 2, откуда второй процессор?
     
  3. Bazhan

    Bazhan Андрей

    Публикаций:
    0
    Регистрация:
    8 янв 2008
    Сообщения:
    71
    Адрес:
    Украина
    а как повысить приоритет второго ядра?
     
  4. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    twgt
    Вообще-то с точки зрения логики процессоров как раз два. ОС оперирует логическими процессорами, а не числом физических кристаллов.
     
  5. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    SII
    Ясно.
     
  6. AntiFreeze

    AntiFreeze Дмитрий

    Публикаций:
    0
    Регистрация:
    26 июн 2008
    Сообщения:
    65
    Делается довольно просто, получаешь кол-во процессоров с помощью KeNumberProcessors, проходишь в цикле все процессоры, кроме текущего, добавляешь в очередь отложенных вызовов каждого процессора свою функцию, которая просто ждёт, когда все процессоры перейдут на DISPATCH_LEVEL.

    Пример есть в книжке Rootkits, авторов Greg Hoglund, James Butler, стр. 189 -
    (частичный просмотр возможен на books.google.com)

    ЗЫ Только нужно помнить, что функции типа KeNumberProcessors начиная с Vista SP1 официально не рекоммендуются из-за отсутствия поддержки оными систем с "горячей" заменой процессоров :-D
     
  7. CrystalIC

    CrystalIC New Member

    Публикаций:
    0
    Регистрация:
    26 июл 2008
    Сообщения:
    500
    Код (Text):
    1. RaiseIrqlRoutine proc Reserved1:DWORD
    2.    invoke KeLowerIrql, HIGH_LEVEL   ;После второй тупить начал)
    3.    ret
    4. RaiseIrqlRoutine endp
    5.  
    6. invoke KeIpiGenericCall, addr RaiseIrqlRoutine, NULL
    Попробовать так можно.
     
  8. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    CrystalIC А что такое "IPI_LEVEL"? первый раз слышу
     
  9. CrystalIC

    CrystalIC New Member

    Публикаций:
    0
    Регистрация:
    26 июл 2008
    Сообщения:
    500
    2FED
    IRQL на котором выполняются межпроцессорные прерывания, на 1 выше чем CLOCK2_LEVEL.
    Причём там либы, в них многих экспортов нет, я про реальное ядро говорил.
     
  10. CrystalIC

    CrystalIC New Member

    Публикаций:
    0
    Регистрация:
    26 июл 2008
    Сообщения:
    500
    Впринципе понижать нельзя, не уверен что тут сработает. Даже не представляю для чего может понадобиться повышать IRQL выше чем IPI_LEVEL.
     
  11. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    в WDK написано "IRQL: < IPI_LEVEL" значит всё ok
     
  12. Bazhan

    Bazhan Андрей

    Публикаций:
    0
    Регистрация:
    8 янв 2008
    Сообщения:
    71
    Адрес:
    Украина
    AntiFreeze
    CrystalIC
    спасибо за ответы!
     
  13. AntiFreeze

    AntiFreeze Дмитрий

    Публикаций:
    0
    Регистрация:
    26 июн 2008
    Сообщения:
    65
    KeIpiGenericCall можно использовать только начиная с WIN 2003, не слишком универсально, зато просто.
     
  14. CrystalIC

    CrystalIC New Member

    Публикаций:
    0
    Регистрация:
    26 июл 2008
    Сообщения:
    500
    AntiFreeze
    Просто KeIpiGenericCall экспортируется только в Висте. В остальных она есть но не экспортируется.
     
  15. AntiFreeze

    AntiFreeze Дмитрий

    Публикаций:
    0
    Регистрация:
    26 июн 2008
    Сообщения:
    65
    Да, посмотрел XP, действительно есть, но не экспортируется. Надо на Win2K ещё глянуть..