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


Пример связывания интерфейсов обратного вызова

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

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

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

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

В следующем примере кода показано, как драйвер реализует метод создания экземпляра, который драйвер использует для создания объекта обратного вызова устройства. Драйвер выделяет контекст обратного вызова и связывает предоставленный интерфейс IUnknown с одним или несколькими интерфейсами обратного вызова. Впоследствии платформа может использовать QueryInterface для обнаружения интерфейсов обратного вызова, поддерживаемых драйвером.

static HRESULT CreateInstance(
                  IUnknown **ppUnknown, 
                  IWDFDeviceInitialize *pDeviceInit,
                  HANDLE CompletionPort 
                  ) {
   ...
   // Allocate the callback context
   CMyDevice *pMyDevice = new CMyDevice();
   ...
   HRESULT hr;
   // Discover the callback interface
   hr = pMyDevice->QueryInterface( 
                      __uuidof(IUnknown), 
                      (void **) ppUnknown
                      );
   ...
   return hr;
}