Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Предупреждение
UMDF 2 является последней версией UMDF и заменяет UMDF 1. Все новые драйверы UMDF должны быть написаны с помощью UMDF 2. Новые функции не добавляются в UMDF 1, а поддержка UMDF 1 в более новых версиях Windows 10 ограничена. Универсальные драйверы Windows должны использовать UMDF 2.
Архивные примеры UMDF 1 можно найти в Windows 11, версия 22H2 — обновление драйверов за май 2022 года.
Дополнительные сведения см. в разделе Начало работы сUMDF.
Начиная с версии 1.11 UMDF платформа предоставляет набор подпрограмм для доступа к регистрам в пространстве памяти и пространстве портов ввода-вывода. Рутины доступа к регистрам/портам UMDF очень похожи на процедуры HAL, используемые драйверами режима ядра. После сопоставления регистров, как описано в разделе #B0 Поиск и сопоставление аппаратных ресурсов в #A1 драйвера UMDF, драйвер использует функции READ/WRITE_REGISTER_Xxx для чтения и записи в отдельные регистры. Для портов ввода-вывода драйвер вызывает подпрограммы READ/WRITE_PORT_Xxx.
В этом примере показано, как записать в регистр, отображенный на память.
VOID
CMyQueue::WriteToDevice(
__in IWDFDevice3* pWdfDevice,
__in UCHAR Value
)
{
//
// Write the UCHAR value at offset 2 from register base
//
WRITE_REGISTER_UCHAR(pWdfDevice,
(m_MyDevice->m_RegBase)+2,
Value);
}
По умолчанию UMDF внутренне использует системные вызовы для доступа к регистрам, сопоставленным в пространстве памяти или в пространстве порта ввода-вывода. Регистрация в пространстве портов ввода-вывода всегда осуществляется через системный вызов. Однако, при доступе к регистрам, сопоставленным с памятью, драйвер UMDF может вызвать сопоставление этих регистров в адресное пространство пользовательского режима, установив директиву INF UmdfRegisterAccessMode в значение RegisterAccessUsingUserModeMapping. Некоторым драйверам может потребоваться сделать это по соображениям производительности. Полный список директив UMDF INF см. в Указания о WDF директнивах в INF файлах.
Драйвер должен использовать подпрограммы READ/WRITE_REGISTER_Xxx, даже если он сопоставляет регистры в пользовательском режиме. Эти подпрограммы проверяют входные данные драйвера и гарантируют, что драйвер не запрашивает доступ к недопустимым расположениям. В редких случаях драйверу может потребоваться доступ к сопоставленным регистрам в пользовательском режиме напрямую, не используя эти подпрограммы. Для этого драйвер получает адрес, сопоставленный в режиме пользователя, вызывая IWDFDevice3::GetHardwareRegisterMappedAddress на сопоставленном базовом адресе. Так как UMDF не проверяет доступ на чтение и запись, выполненные таким образом, этот метод не рекомендуется для регистрации доступа.