Поделиться через


Создание кода для страниц в драйвере KMDF

код страницы — это код, который можно записать в файл разбиения на страницы компьютера, если код не используется. Вы можете сделать часть кода вашего драйвера страничным, чтобы уменьшить его образ загрузки и время начальной загрузки, а также сократить объем кода драйвера, использующего ограниченный неперестраничиваемый пул памяти компьютера.

Чтобы определить, подходит ли код страницы или данные для драйвера, сделайте следующее:

  1. Определите страничные разделы в вашем драйвере.

    Разделы с возможностью постраничной загрузки не загружаются в память, пока они не потребуются. Дополнительные сведения о создании разделов, доступных для страниц в драйвере, см. в статье Создание страниц драйверов.

  2. Убедитесь, что код драйвера, использующего страничную память, не препятствует быстрому пробуждению компьютера из состояния пониженного энергопотребления.

    Все функции обратного вызова объекта устройства, предоставляемые драйверами, вызываются на уровне IRQL = PASSIVE_LEVEL, что позволяет сделать их код страничным (как описано в возможности страниц драйверов).

    Однако нельзя делать код функции обратного вызова страничным, если фреймворк вызывает функцию, когда устройство выходит из состояния низкого энергопотребления и возвращается в рабочее состояние (D0).

    Если такой код доступен на страницы, код может быть записан в файл разбиения на страницы до того, как компьютер войдет в состояние спящего режима. Таким образом, компьютер будет медленнее пробуждаться, так как код не может быть загружен (и, следовательно, устройство не может стать полностью рабочим), пока не будет восстановлено питание диска подкачки.

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

  3. Определите, требуется ли драйверу доступ к страничных данных за пределами драйвера, например файлов, реестра или пула страниц во время перехода питания.

    Сведения о том, как включить и отключить возможность драйвера получать доступ к страничным данным во время переходов питания, см. в WdfDeviceInitSetPowerPageable и WdfDeviceInitSetPowerNotPageable.

    Дополнительные сведения о том, как определить, находится ли драйвер в неизменяемом состоянии, см. в WdfDevStateIsNP.