Создание страничного кода в драйвере KMDF
Страничный код — это код, который можно записать в файл подкачки компьютера, если код не используется. Вы можете сделать часть драйвера доступной на страницу, чтобы уменьшить его образ загрузки и время начальной загрузки, а также уменьшить объем кода драйвера, использующего ограниченный пул памяти компьютера без загрузки.
Чтобы определить, подходит ли доступный для страницы код или данные для вашего драйвера, выполните следующие действия.
Определите разделы, доступные для страницы, в драйвере.
Разделы, доступные для страниц, не загружаются в память до тех пор, пока они не понадобятся. Сведения о том, как создавать разделы, доступные для страниц в драйвере, см. в статье Создание драйверов для страниц.
Убедитесь, что код драйвера с раздаваемой страницей не препятствует быстрому пробуждению компьютера из состояния с низким энергопотреблением.
Все функции обратного вызова объекта устройства, предоставляемые драйверами, вызываются в irQL = PASSIVE_LEVEL, что позволяет сделать их код страничного (как описано в разделе Создание драйверов страничных).
Однако не следует делать код функции обратного вызова страничной, если платформа вызывает функцию обратного вызова, когда устройство выходит из состояния с низким энергопотреблением и возвращается в рабочее состояние (D0).
Если такой код доступен для страниц, он может быть записан в файл подкачки до того, как компьютер перейдет в спящий режим. Таким образом, компьютер будет медленнее пробуждаться, так как ваш код не может быть перезагружен (и поэтому устройство не сможет полностью работать), пока не будет восстановлена мощность диска подкачки.
Таким образом, функции обратного вызова, перечисленные в разделе Устройство возвращается в рабочее состояние , не должны быть доступны для страниц.
Определите, требуется ли драйверу доступ к страничным данным за пределами драйвера, таким как файлы, реестр или выгружаемый пул, во время переключений питания.
Сведения о том, как включить и отключить возможность доступа драйвера к страничным данным во время перехода питания, см. в разделах WdfDeviceInitSetPowerPageable и WdfDeviceInitSetPowerNotPageable.
Сведения о том, как определить, когда драйвер находится в непереписываемом состоянии, см. в разделе WdfDevStateIsNP.