Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Драйверы, создающие разделы и представления, которые не используются для общего доступа к пользовательскому режиму, должны использовать следующий протокол при работе с разделами и представлениями:
Драйвер должен использовать дескриптор ядра при открытии дескриптора объекта раздела. Драйверы могут убедиться, что дескриптор является дескриптором ядра, создав его в системном процессе или указав атрибут OBJ_KERNEL_HANDLE для дескриптора. Дополнительные сведения см. в разделе Обработчики объектов.
Представление должно быть сопоставлено только из системного потока. (В противном случае представление доступно из процесса, в контексте которого оно создается.) Драйвер может убедиться, что представление сопоставляется к системному процессу с помощью рабочего потока системы, чтобы выполнить операцию сопоставления. Дополнительные сведения см. в разделе " Системные рабочие потоки " и "Контекст потока драйвера".
Драйверы, которые совместно используют вид с процессом в пользовательском режиме, должны использовать следующий протокол при работе с секциями и видами:
Драйвер, а не процесс пользовательского режима, должен создать объект раздела и сопоставить представления.
Как упоминалось ранее, драйвер должен использовать дескриптор ядра при открытии дескриптора объекта раздела. Драйверы могут убедиться, что дескриптор является дескриптором ядра, создав его в системном процессе или указав атрибут OBJ_KERNEL_HANDLE для дескриптора. Дополнительные сведения см. в разделе Обработчики объектов.
Представление проецируется в контексте нити процесса, который разделяет это представление. Драйвер высокого уровня может гарантировать, что представление сопоставляется в текущем контексте процесса, выполняя операцию сопоставления в подпрограмме отправки, например DispatchDeviceControl. Подпрограммы отправки драйверов нижнего уровня выполняются в произвольном контексте потока и поэтому не могут безопасно сопоставить представление в подпрограмме отправки. Дополнительные сведения см. в разделе "Контекст потока драйвера".
Все операции доступа к памяти в представлении внутри драйвера должны быть защищены конструкциями try-except. Вредоносное приложение в режиме пользователя может отменить сопоставление представления или изменить состояние защиты представления. Либо то, либо другое приведет к сбою системы, если не защищено блоком try-except. Для получения дополнительной информации см. Обработка исключений.
Драйвер также должен проверить содержимое представления по мере необходимости. Автор драйвера не может полагать, что только доверенный компонент пользовательского режима имеет доступ к представлению.
Драйвер, который должен совместно использовать объект раздела с приложением пользовательского режима (который должен иметь возможность создавать собственные представления), должен использовать следующий протокол:
Драйвер, а не процесс пользовательского режима, должен создать объект раздела. Драйверы никогда не должны использовать дескриптор, переданный из пользовательского режима.
Перед тем как передать дескриптор в пользовательский режим, драйвер должен вызвать ObReferenceObjectByHandle, чтобы получить ссылку на объект раздела. Это предотвращает вредоносное приложение от удаления объектa разделa при закрытии дескриптора. Ссылка на объект должна храниться в расширении устройства драйвера.
После того как драйвер больше не использует объект раздела, он должен вызвать ObDereferenceObject , чтобы освободить ссылку на объект.
В системах под управлением Microsoft Windows Server 2003 с пакетом обновления 1 (SP1) и более поздних версий только драйверы в режиме ядра могут открывать \Device\PhysicalMemory. Однако драйверы могут решить предоставить дескриптор пользовательскому приложению. Чтобы предотвратить проблемы с безопасностью, доступ к \Device\PhysicalMemory должен быть предоставлен только пользователям, которым доверяет драйвер.