ExAllocatePool ответе на простой вопрос

Тема в разделе "WASM.NT.KERNEL", создана пользователем СFF, 24 ноя 2009.

  1. СFF

    СFF PP

    Публикаций:
    0
    Регистрация:
    16 янв 2009
    Сообщения:
    233
    Вопрос про PagedPool, я смотрю часто есть код
    buf=ExAllocatePool(PagedPool,...)
    memcpy(buf,...);

    Мне не ясно, а разве между этими вызовами не должен стоять лок чтобы память не скинуло в файл подкачки.
    И еще. Рано или поздно эта память окажется на харде как мне тады ее подгрузить для работы чтобы не было bsod'a
     
  2. AntiFreeze

    AntiFreeze Дмитрий

    Публикаций:
    0
    Регистрация:
    26 июн 2008
    Сообщения:
    65
    Если код выполняется на PASSIVE_LEVEL, то система сама позаботится о подгрузке сброшенных в файл подкачки данных. Чтобы не возникло вопросов, что такое PASSIVE_LEVEL, IRQL и т.п. - читайте книжки. Того же Руссиновича. Статьи на васме. И т.п. Вверху тема прикреплена для таких случаев.

    ЗЫ. Админы, снесите тему.
     
  3. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Сие зависит от уровня прерываний (IRQL), на котором выполняется код. Если уровень достаточно низок (<2), то подгрузка страниц произойдёт прозрачно и ты этого скорее всего даже не заметишь. Если же уровень выше критического (>=2), то возможны два варианта:

    1. Страница таки окажется в памяти и ничего плохого не произойдёт.
    2. Нужной страницы не окажется в памяти и тогда ядро свалит систему (BSOD), потому что не будет иметь возможности подгрузить недостающие страницы.

    Короче говоря, запомни простое правило: не обращаться к выгружаемой памяти когда нет уверенности, что код всегда будет выполняться на уровне irql<2. Иногда лучше выделить невыгружаемой памяти побольше, чем рисковать. С другой стороны, иногда имеет смысл перепланировать архитектуру драйвера так, чтобы выгружаемая память использовалась только там, где это безопасно.

    Всё таки Windows - современная операционная системы, и я очень рад, что мне довелось использовать именно её. Подобные вещи ядро Windows выполняет прозрачно для кода, об этом позаботится обработчик соответствующего прерывания.
     
  4. СFF

    СFF PP

    Публикаций:
    0
    Регистрация:
    16 янв 2009
    Сообщения:
    233
    Спасибо, прекрасно объяснил. Наконец все встало на свои места. Тему можно закрывать.
    P.S. Как раз недавно на твой блог заходил, я смотрю ты там не особо часто пишеш :)_