функция обратного вызова GPIO_CLIENT_RELEASE_CONTROLLER (gpioclx.h)

Функция обратного вызова события CLIENT_ReleaseController выполняет операции, необходимые, когда устройство контроллера ввода-вывода общего назначения (GPIO) больше не доступно.

Синтаксис

GPIO_CLIENT_RELEASE_CONTROLLER GpioClientReleaseController;

NTSTATUS GpioClientReleaseController(
  [in] WDFDEVICE Device,
  [in] PVOID Context
)
{...}

Параметры

[in] Device

Дескриптор WDFDEVICE для объекта устройства платформы, представляющего контроллер GPIO.

[in] Context

Указатель на контекст устройства драйвера контроллера GPIO.

Возвращаемое значение

Функция CLIENT_ReleaseController возвращает STATUS_SUCCESS, если вызов выполнен успешно. В противном случае возвращается соответствующий код ошибки.

Комментарии

Эта функция обратного вызова реализуется драйвером контроллера GPIO. Расширение платформы GPIO (GpioClx) вызывает эту функцию после того, как устройство контроллера GPIO больше не доступно.

Во время обратного вызова CLIENT_ReleaseController драйвер контроллера GPIO должен освободить все аппаратные ресурсы, полученные в результате предыдущего вызова функции обратного вызова CLIENT_PrepareController . В случае устройства контроллера GPIO, сопоставленного в памяти, драйвер должен отменить сопоставление диапазона адресов памяти или диапазонов, назначенных аппаратным регистрам. Для контроллера, который не сопоставлен с памятью, драйвер должен закрыть ранее открытое логическое подключение к контроллеру.

Чтобы зарегистрировать функцию обратного вызова CLIENT_ReleaseController драйвера, вызовите метод GPIO_CLX_RegisterClient . Этот метод принимает в качестве входного параметра указатель на структуру GPIO_CLIENT_REGISTRATION_PACKET , содержащую указатель CLIENT_ReleaseController функции.

Хотя функция обратного вызова CLIENT_ReleaseController вызывается в irQL = PASSIVE_LEVEL, не следует делать эту функцию страничной. Обратный вызов CLIENT_ReleaseController находится в критическом пути времени для восстановления питания устройств на аппаратной платформе, и по соображениям производительности он не должен задерживаться ошибками страницы.

Примеры

Чтобы определить функцию обратного вызова CLIENT_ReleaseController , необходимо сначала предоставить объявление функции, определяющее тип определяемой функции обратного вызова. Windows предоставляет набор типов функций обратного вызова для драйверов. Объявление функции с помощью типов функций обратного вызова помогает анализу кода для драйверов, средству проверки статических драйверов (SDV) и другим средствам проверки находить ошибки, и это требование для написания драйверов для операционной системы Windows.

Например, чтобы определить функцию обратного вызова CLIENT_ReleaseController с именем MyEvtGpioReleaseController, используйте тип функции GPIO_CLIENT_RELEASE_CONTROLLER, как показано в следующем примере кода:

GPIO_CLIENT_RELEASE_CONTROLLER  MyEvtGpioReleaseController;

Затем реализуйте функцию обратного вызова следующим образом:

_Use_decl_annotations_
NTSTATUS
  MyEvtGpioReleaseController(
    WDFDEVICE Device,
    PVOID Context
)
{ ... }

Тип функции GPIO_CLIENT_RELEASE_CONTROLLER определен в файле заголовка Gpioclx.h. Чтобы более точно определить ошибки при запуске средств анализа кода, не забудьте добавить заметку Use_decl_annotations в определение функции. Заметка Use_decl_annotations гарантирует использование заметок, которые применяются к типу функции GPIO_CLIENT_RELEASE_CONTROLLER в файле заголовка. Дополнительные сведения о требованиях к объявлениям функций см. в статье Объявление функций с помощью типов ролей функций для драйверов KMDF. Дополнительные сведения о Use_decl_annotations см. в статье О поведении функции.

Требования

Требование Значение
Минимальная версия клиента Поддерживается начиная с Windows 8.
Целевая платформа Персональный компьютер
Верхняя часть gpioclx.h
IRQL Вызывается на PASSIVE_LEVEL.

См. также раздел

GPIO_CLIENT_REGISTRATION_PACKET

GPIO_CLX_RegisterClient