Распространенные проблемы с безопасностью WIA
Существует несколько распространенных проблем, которые могут помешать успешному запуску существующего драйвера WIA (который работал нормально в LocalSystem) под учетной записью LocalService .
Наиболее распространенные проблемы возникают с:
Доступ к файловой системе
Учетная запись LocalService имеет строго ограниченный доступ к файлам. Например, драйверы больше не могут выполнять запись в каталог %windir%.
Доступ к реестру
Многие разделы реестра, открытые для учетных записей LocalSystem, доступны только для чтения в LocalService. Например, драйверы больше не могут выполнять запись в разделы реестра поддереве HKLM.
Именованные объекты ядра
Убедитесь, что именованные объекты (например, события и мьютексы), к которым обращается драйвер WIA и внешние компоненты, такие как пакетные приложения, имеют соответствующие списки управления доступом. Если приложение создает именованный объект события, но специально не предоставляет доступ к учетной записи LocalService , драйвер не сможет его использовать. Аналогичным образом, если мини-диск создает именованный объект события, он должен предоставить тот же доступ, иначе приложение не сможет использовать объект события.
Внепроцессные COM-объекты
Любая попытка создать или использовать внепроцессный COM-интерфейс завершится ошибкой, если этот компонент явно не предоставит соответствующие разрешения учетной записи LocalService . Например, вызовы CoCreateInstance или CoCreateInstanceEx (оба описаны в документации по Microsoft Windows SDK) с установленным флагом CLSCTX_LOCAL_SERVER могут завершиться ошибкой, если компонент не предоставит разрешение учетной записи LocalService. Аналогичным образом, попытка драйвера использовать указатель на COM-интерфейс, который не является внутрипроцессным, может завершиться ошибкой. Это может произойти, если компонент вызывает драйвер и передает ему указатель на интерфейс, с помощью которого драйвер может вызывать интерфейс.
Создание и открытие процессов
Драйверы WIA не должны вручную запускать другие процессы (например, путем вызова CreateProcess или CreateProcessAsUser). Хотя это поведение было бы успешным для драйверов в учетных записях LocalSystem , драйверы больше не могут сделать это в новой учетной записи LocalService . Дополнительные сведения о CreateProcess и CreateProcessAsUser см. в документации по Windows SDK.