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


Управление доступом устройств в драйверах KMDF

Драйверы должны помочь предотвратить ненадлежащий доступ пользователей к устройствам и файлам компьютера. Чтобы предотвратить несанкционированный доступ к устройствам и файлам, необходимо:

  • Назовите объекты устройств только при необходимости.

  • Предоставьте дескрипторы безопасности для объектов и интерфейсов устройств.

Именование объектов устройств только при необходимости

Как и большинство драйверов модели windows (WDM), драйверы на основе платформы обычно не называют свои объекты устройств. Приложения могут получить доступ к устройству, указав имя объекта устройства, поэтому каждое дополнительное имя объекта устройства представляет собой дополнительный путь, который приложение может использовать для доступа к устройству.

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

Объекты физических устройств (PDO) должны иметь имена. Как правило, драйверы шины на основе платформы не указывают имя для PDO, так как платформа (по умолчанию) указывает операционной системе на создание имени.

С другой стороны, драйвер на основе платформы может назначить имя устройства объекту устройства, вызвав WdfDeviceInitAssignName. Драйвер должен называть функциональный объект устройства (FDO), фильтровать объект устройства (фильтр DO) или PDO только в том случае, если драйвер должен поддерживать старое приложение, которое ожидает определенное имя устройства, или если драйвер принадлежит к более старому стеку драйверов, архитектура которого требует имен объектов.

Вместо именования FDOS и фильтрации DOS драйверы WDM и драйверы на основе платформы должны предоставлять интерфейсы устройств, к которым могут обращаться приложения. Операционная система получает дескриптор безопасности интерфейса устройства из PDO устройства и из записей реестра, которые указаны в INF-файле пакета драйвера. Драйвер шины может предоставить интерфейсы устройств для PDO, если устройства водителя работают в необработанном режиме без драйвера-функции.

Некоторые драйверы должны вызывать WdfDeviceCreateSymbolicLink , чтобы создать имена символьных ссылок для своих устройств. Например, драйвер может создать имя устройства MS-DOS , если приложения ожидают видеть имя MS-DOS для устройства. Если драйвер создает символьное имя ссылки для неименованного FDO или фильтра DO, платформа связывает имя символьной ссылки с именем PDO. (Устройства управления не связаны с PDO, поэтому драйвер не может создать символьное имя ссылки для неименованного управляющего устройства.)

Предоставление дескрипторов безопасности для объектов и интерфейсов устройств

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

  • Операционная система, которая предоставляет дескриптор безопасности по умолчанию для объектов устройств (см. раздел Управление доступом к устройству).

  • Платформа, которая предоставляет дескриптор безопасности по умолчанию (с помощью значения SDDL_DEVOBJ_SYS_ALL_ADM_ALL), если драйвер вызывает WdfDeviceInitAssignName для назначения имени объекту устройства (см. SDDL для объектов устройств).

  • Драйвер, который может переопределить дескриптор безопасности платформы по умолчанию, вызвав WdfDeviceInitAssignSDDLString.

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

Пакет драйвера может предоставить INF-файл, указывающий дескрипторы безопасности устройства с директивой INF AddReg в разделе INF DDInstall.HW.

Дополнительные сведения об указании дескрипторов безопасности в INF-файлах см. в разделе Создание безопасных установок устройств.

Если драйвер создает PDO для устройств, работающих в необработанном режиме, драйвер должен указать класс настройки устройства при вызове WdfPdoInitAssignRawDevice. Кроме того, если драйвер создает управляющие устройства, он может вызвать WdfDeviceInitSetDeviceClass , чтобы указать класс настройки устройства. В обоих случаях системные администраторы могут использовать раздел реестра указанного класса установки для хранения дескрипторов безопасности для устройства.

Сведения о том, как операционная система определяет, какой дескриптор безопасности следует использовать для устройства, см. в разделе Управление доступом к устройству.

Когда платформа создает объект устройства, она всегда устанавливает флаг FILE_DEVICE_SECURE_OPEN, чтобы операционная система проверка дескриптор безопасности устройства, прежде чем разрешить приложению доступ к любым именам в пространстве имен устройства. Дополнительные сведения о флаге FILE_DEVICE_SECURE_OPEN и пространстве имен устройства см. в разделе Управление доступом к пространству имен устройств.