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


Создание драйвера клиента уведомлений оборудования

В этом разделе приводятся общие рекомендации по разработке аппаратного драйвера клиента уведомлений, который использует расширение класса KMDF, предоставляемое корпорацией Майкрософт.

  1. Создайте файл для реализации драйвера клиента, который связывается с Mshwnclxstub.lib и содержит заголовки hwn.h и hwnclx.h.

  2. Определите экземпляры необходимых функций обратного вызова расширения KMDF и аппаратного класса уведомлений. В частности, необходимо реализовать и зарегистрировать эти функции обратного вызова, как показано в следующем примере кода.

    DRIVER_INITIALIZE DriverEntry;
    EVT_WDF_DRIVER_DEVICE_ADD HwnClientEvtDeviceAdd;
    HWN_CLIENT_INITIALIZE_DEVICE HwnClientInitializeDevice;
    HWN_CLIENT_UNINITIALIZE_DEVICE HwnClientUnInitializeDevice;
    HWN_CLIENT_QUERY_DEVICE_INFORMATION HwnClientQueryDeviceInformation;
    HWN_CLIENT_START_DEVICE HwnClientStartDevice;
    HWN_CLIENT_STOP_DEVICE HwnClientStopDevice;
    HWN_CLIENT_SET_STATE HwnClientSetState;
    HWN_CLIENT_GET_STATE HwnClientGetState;
    
  3. Реализуйте подпрограмму DriverEntry , которая является точкой входа драйвера клиента и отвечает за инициализацию. Для драйвера клиента уведомлений оборудования эта функция должна обрабатывать следующее:

  4. Реализуйте функцию EVT_WDF_DRIVER_DEVICE_ADD , которая отвечает за выполнение операций инициализации устройства, когда диспетчер PnP сообщает о существовании устройства. Для драйвера клиента уведомлений оборудования эта функция должна обрабатывать следующее:

    • Вызов HwNProcessAddDevicePreDeviceCreate, который предоставляет обратные вызовы подготовки, выпуска и выхода устройства, необходимые KMDF для перевода устройства в различные состояния.

    • Вызов WdfDeviceCreate для создания объекта устройства платформы.

    • Вызов HwNProcessAddDevicePostDeviceCreate для создания очередей ввода-вывода.

  5. Реализуйте определенную функцию HWN_CLIENT_INITIALIZE_DEVICE , которая вызывается расширением класса для подготовки аппаратного контроллера уведомлений к использованию.

  6. Реализуйте определенную функцию HWN_CLIENT_UNINITIALIZE_DEVICE , которая вызывается расширением класса для неинициализации аппаратного контроллера уведомлений.

  7. Реализуйте определенную функцию HWN_CLIENT_QUERY_DEVICE_INFORMATION , которая вызывается расширением класса. Эта функция отвечает за получение атрибутов аппаратного компонента уведомления.

  8. Реализуйте определенную функцию HWN_CLIENT_START_DEVICE , которая вызывается расширением класса. Эта функция отвечает за запуск аппаратного контроллера уведомлений и выделение ресурсов ACPI для драйвера клиента.

  9. Реализуйте определенную функцию HWN_CLIENT_STOP_DEVICE , которая вызывается расширением класса. Эта функция отвечает за остановку аппаратного контроллера уведомлений и освобождение ресурсов ACPI, используемых драйвером клиента.

  10. Реализуйте определенный HWN_CLIENT_SET_STATE, который вызывается расширением класса. Эта функция отвечает за настройку состояний компонента уведомления оборудования.

  11. Реализуйте определенный HWN_CLIENT_GET_STATE, который вызывается расширением класса. Эта функция отвечает за получение текущих значений компонентов уведомления оборудования. Если входной буфер имеет значение NULL, то есть пользователь не указал конкретное состояние уведомления оборудования, эта функция должна возвращать сведения о состоянии для всех компонентов уведомления оборудования.

Уведомления оборудования