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


Указание режима синхронизации обратного вызова

Предупреждение

UMDF 2 является последней версией UMDF и заменяет UMDF 1. Все новые драйверы UMDF должны быть написаны с помощью UMDF 2. Новые функции не добавляются в UMDF 1, а поддержка UMDF 1 в более новых версиях Windows 10 ограничена. Универсальные драйверы Windows должны использовать UMDF 2.

Архивные примеры UMDF 1 можно найти в Windows 11, версия 22H2 — обновление драйверов за май 2022 года.

Дополнительные сведения см. в разделе Начало работы сUMDF.

Драйвер может указать, как его функции обратного вызова вызываются платформой. Драйвер задает режим синхронизации (или блокировки) для устройства перед вызовом метода IWDFDriver::CreateDevice для создания объекта устройства для устройства. Чтобы указать режим синхронизации, драйвер должен вызвать метод IWDFDeviceInitialize::SetLockingConstraint . Драйвер получает указатель на интерфейс IWDFDeviceInitialize при вызове метода IDriverEntry::OnDeviceAdd , чтобы добавить устройство в систему.

Драйвер может указать одно из следующих значений из типа перечисления WDF_CALLBACK_CONSTRAINT в параметре LockTypeIWDFDeviceInitialize::SetLockingConstraint , чтобы определить режим блокировки. Указанный тип ограничения (или блокировки) зависит от того, сколько параллелизма аппаратное устройство может использовать и сколько может обрабатывать драйвер.

Ценность Значение

Нет (0)

Указывает, что функции обратного вызова в драйвер не синхронизированы.

WdfDeviceLevel (1)

Указывает, что все функции очереди обратного вызова в драйвере синхронизированы.

Заметка Если драйвер не вызывает IWDFDeviceInitialize::SetLockingConstraint , чтобы указать значение, платформа задает значение по умолчанию этого свойства wdfDeviceLevel.

Ограничения применяются только к функциям обратного вызова очереди, но не к функциям обратного вызова Plug and Play (PnP) и управления питанием. Функции обратного вызова очереди включают следующие:

Функции обратного вызова завершения запроса (IRequestCallbackRequestCompletion::OnCompletion) не являются функциями обратного вызова очереди. Поэтому они не синхронизированы.