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


Рекомендации по нулю сеансов для драйверов UMDF

Начиная с Windows Vista операционная система изолирует службы и системные процессы в сеансе 0, а приложения выполняются в последующих сеансах с более высокими номерами. Так как хост-процесс UMDF (WUDFHost.exe) является одним из системных процессов, выполняемых в сеансе 0, драйверы UMDF изолированы от приложений. Поэтому при разработке драйвера необходимо следовать следующим рекомендациям:

  • Не создавайте элемент пользовательского интерфейса, например диалоговое окно, и не зависите от введенных пользователем данных. Так как пользователь не работает в сеансе 0, он никогда не видит пользовательский интерфейс и не может ответить на него.

    Аналогичным образом не управляйте никакими элементами пользовательского интерфейса. Например, драйвер UMDF не может перечислять окна в сеансе пользователя.

  • Если драйвер должен взаимодействовать со службой, используйте механизм клиента или сервера, например удаленный вызов процедур (RPC) или именованные каналы.

  • Будьте внимательны при вызове функций в API Windows. Некоторые функции могут управлять элементами пользовательского интерфейса или пытаться получить доступ к именованным объектам в сеансе пользователя. Не вызывайте функции Windows, которые не будут вызываться из службы пользовательского режима. Как правило, драйвер UMDF может безопасно вызывать функции, экспортированные в kernel32.dll, но не функции, экспортированные в user32.dll.

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

    • Драйвер может вызывать функции SetupDiXxx для получения свойства устройства Plug and Play. Например, UMDF Sample Driver for OSR USB Fx2 Learning Kit вызывает SetupDiGetDeviceRegistryProperty , чтобы получить GUID для типа шины устройства. Примечание Драйвер UMDF не может безопасно вызывать многие функции SetupDiXxx , но можно вызывать функции, извлекающие свойства узла устройства.

    • Драйвер, извлекающий запросы ввода-вывода из очереди вручную, может создать периодический таймер для опроса очереди. Например, пример WudfVhidmini регистрирует подпрограмму обратного вызова таймера путем вызова CreateThreadpoolTimer, а затем задает периодический таймер путем вызова Метода SetThreadpoolTimer. Примечание Начиная с версии 1.11, UMDF обеспечивает поддержку рабочих элементов. Дополнительные сведения см. в разделе Использование рабочих элементов.

Дополнительные сведения об использовании системных служб за пределами платформ см. в главе 14 ("За пределами платформ") Орвика, Пенни и Гая Смита. Разработка драйверов с помощью Windows Driver Foundation. Редмонд, WA: Microsoft Press, 2007.

Дополнительные сведения об нулевой изоляции сеанса см. в статье Влияние изоляции сеанса 0 на службы и драйверы в Windows.