Указание режима синхронизации обратного вызова
Предупреждение
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 в параметре LockTypeобъекта IWDFDeviceInitialize::SetLockingConstraint , чтобы определить режим блокировки. Указанный тип ограничения (или блокировки) зависит от того, насколько параллелизм может использовать аппаратное устройство и как может обработать драйвер.
Значение | Значение |
---|---|
Нет (0) |
Указывает, что функции обратного вызова в драйвере не синхронизированы. |
WdfDeviceLevel (1) |
Указывает, что все функции обратного вызова очереди в драйвере синхронизированы. |
Примечание Если драйвер не вызывает IWDFDeviceInitialize::SetLockingConstraint для указания значения, платформа устанавливает для этого свойства значение по умолчанию WdfDeviceLevel.
Ограничения применяются только к функциям обратного вызова очереди, но не к функциям обратного вызова Plug and Play (PnP) и управления питанием. Функции обратного вызова очереди включают следующее:
Функции обратного вызова автоматической отправки, такие как IQueueCallbackRead::OnRead и IQueueCallbackWrite::OnWrite. Дополнительные сведения см. в разделе Функции обратного вызова событий очереди ввода-вывода.
Функции обратного вызова изменения состояния очереди, такие как IQueueCallbackStateChange::OnStateChange.
Функции обратного вызова отмены, такие как IRequestCallbackCancel::OnCancel.
Функции очистки и закрытия файлов обратного вызова, такие как IFileCallbackCleanup::OnCleanupFile и IFileCallbackClose::OnCloseFile.
Функции обратного вызова завершения запроса (IRequestCallbackRequestCompletion::OnCompletion) не являются функциями обратного вызова очереди. Поэтому они не синхронизируются.