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

В модели драйвера Windows (WDM) каждый объект устройства имеет связанное пространство имен. Имена в пространстве имен устройства — это пути, начинающиеся с имени устройства. Для устройства с именем \DeviceName\ его пространство имен состоит из любого имени в формате \DeviceName\\FileName. (Для файловой системы FileName — это фактическое имя файла в файловой системе.)

Драйвер WDM получает открытые запросы для всех имен в пространстве имен устройства. Драйвер рассматривает открытый запрос "\DeviceName\" как открытие самого объекта устройства. Если драйвер реализует поддержку открытых запросов в пространстве имен устройства, то он рассматривает открытый запрос для \Device\DeviceName\FileName как открытие "файла" в пространстве имен объекта устройства (где понятие "файл" для устройства определяется драйвером).

Большинство драйверов не реализуют поддержку открытых операций в пространстве имен устройства, но все драйверы должны выполнять проверки безопасности, чтобы предотвратить несанкционированный доступ к пространству имен устройства. По умолчанию проверки безопасности для запросов на открытие файлов в пространстве имен устройства (например, \DeviceName\\FileName) полностью выполняются драйвером— список ACL объекта устройства не проверяется операционной системой.

Если задана FILE_DEVICE_SECURE_OPEN характеристика объекта устройства, система применяет дескриптор безопасности объекта устройства ко всем запросам на открытие файлов в пространстве имен устройства. Драйверы могут задавать FILE_DEVICE_SECURE_OPEN при создании объекта устройства с помощью IoCreateDevice или IoCreateDeviceSecure. Для драйверов WDM FILE_DEVICE_SECURE_OPEN также можно задать в реестре. Его также можно задать в реестре для объектов устройств драйверов, не относящихся к WDM, созданных ioCreateDeviceSecure. Дополнительные сведения о настройке свойств объекта устройства, таких как характеристики устройства, в реестре см. в разделе Настройка свойств объекта устройства в реестре. Дополнительные сведения о характеристиках устройства см. в разделе Указание характеристик устройства.

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

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

  • Драйвер может завершиться сбоем любых запросов IRP_MJ_CREATE, указывающих параметр IrpSp-FileObject-FileName>>, длина которого не равна нулю. В этом случае открытые запросы для устройства регулируются системным ACL проверка, а драйвер завершает все запросы на открытие файлов в пространстве имен устройства. (Драйверы, поддерживающие монопольные открытия, должны использовать этот параметр.)

Драйверы для устройств, которые поддерживают пространства имен, также могут использовать два метода для защиты запросов на открытие файлов в пространстве имен устройства:

  • Объекты устройства драйвера имеют FILE_DEVICE_SECURE_OPEN набор характеристик устройства. Это гарантирует, что параметры безопасности для устройства будут одинаково применяться к пространству имен устройства. (Драйвер отвечает за реализацию поддержки пространства имен в своей функции обратного вызова DRIVER_DISPATCH .)

  • Драйвер проверяет все списки управления доступом для имени файла в подпрограмме DispatchCreate . (Даже в этом случае драйвер должен задать FILE_DEVICE_SECURE_OPEN характеристику, если только в пространстве имен устройства не может быть более слабые параметры безопасности, чем у объекта устройства.)

Характеристика FILE_DEVICE_SECURE_OPEN проверяется в верхней части стека, поэтому после присоединения объекты устройства фильтра должны скопировать элемент "Характеристики " следующего нижнего объекта устройства.