Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Драйверы, создающие разделы и представления, которые не используются для общего доступа к пользовательскому режиму, должны использовать следующий протокол при работе с разделами и представлениями:
Драйвер должен использовать дескриптор ядра при открытии дескриптора объекта раздела. Драйверы могут убедиться, что дескриптор является дескриптором ядра, создав его в системном процессе или указав атрибут 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 должен быть предоставлен только пользователям, которым доверяет драйвер.