функция обратного вызова GPIO_CLIENT_QUERY_ACTIVE_INTERRUPTS (gpioclx.h)
Функция обратного вызова события CLIENT_QueryActiveInterrupts запрашивает состояние набора контактов ввода-вывода общего назначения (GPIO), настроенных в качестве входных данных прерывания.
Синтаксис
GPIO_CLIENT_QUERY_ACTIVE_INTERRUPTS GpioClientQueryActiveInterrupts;
NTSTATUS GpioClientQueryActiveInterrupts(
[in] PVOID Context,
[in, out] PGPIO_QUERY_ACTIVE_INTERRUPTS_PARAMETERS QueryActiveParameters
)
{...}
Параметры
[in] Context
Указатель на контекст устройства драйвера контроллера GPIO.
[in, out] QueryActiveParameters
Указатель на структуру GPIO_QUERY_ACTIVE_INTERRUPTS_PARAMETERS , которая при входе описывает контакты прерываний GPIO для запроса, а при выходе содержит активное и включенное состояние прерывания этих контактов.
Возвращаемое значение
Функция CLIENT_QueryActiveInterrupts возвращает STATUS_SUCCESS, если вызов выполнен успешно. В противном случае возвращается соответствующий код ошибки.
Комментарии
Эта функция обратного вызова реализуется драйвером контроллера GPIO. Расширение платформы GPIO (GpioClx) вызывает эту функцию для запроса набора контактов GPIO, настроенных как входные данные запроса прерывания.
Параметр QueryActiveParameters указывает на структуру, выделенную вызывающим объектом GPIO_QUERY_ACTIVE_INTERRUPTS_PARAMETERS . Вызывающий объект задает значения элементов BankId и EnabledMask этой структуры. Функция CLIENT_QueryActiveInterrupts выполняет запись в элемент ActiveMask структуры .
При записи биты, заданные в элементе EnabledMask , должны соответствовать набору включенных в данный момент прерываний в банке. При возврате биты, заданные в элементе ActiveMask , должны соответствовать включенным и активным прерываниям. Таким образом, если бит в EnabledMask равен нулю, соответствующий бит в ActiveMask должен быть равен нулю.
Чтобы зарегистрировать функцию обратного вызова CLIENT_QueryActiveInterrupts драйвера, вызовите метод GPIO_CLX_RegisterClient . Этот метод принимает в качестве входного параметра указатель на структуру GPIO_CLIENT_REGISTRATION_PACKET , содержащую указатель функции CLIENT_QueryActiveInterrupts .
GpioClx вызывает функцию обратного вызова CLIENT_QueryActiveInterrupts на PASSIVE_LEVEL или DIRQL в зависимости от сведений об устройстве, которые функция обратного вызова CLIENT_QueryControllerBasicInformation предоставляет GpioClx. Функция CLIENT_QueryControllerBasicInformation предоставляет сведения об устройстве в виде структуры CLIENT_CONTROLLER_BASIC_INFORMATION . Если бит флага MemoryMappedController задан в элементе Flags этой структуры, GpioClx вызывает функцию CLIENT_QueryActiveInterrupts в DIRQL, которая является IRQL, на которой выполняется ISR в GpioClx. В противном случае эта функция вызывается в PASSIVE_LEVEL. Дополнительные сведения об этом бите флага см. в разделах Необязательные и обязательные функции обратного вызова GPIO.
Примеры
Чтобы определить CLIENT_QueryActiveInterrupts функцию обратного вызова, необходимо сначала предоставить объявление функции, определяющее тип определяемой функции обратного вызова. Windows предоставляет набор типов функций обратного вызова для драйверов. Объявление функции с помощью типов функций обратного вызова помогает анализу кода для драйверов, средству проверки статических драйверов (SDV) и другим средствам проверки находить ошибки, и это требование для написания драйверов для операционной системы Windows.
Например, чтобы определить функцию обратного вызова CLIENT_QueryActiveInterrupts с именем MyEvtGpioQueryActiveInterrupts
, используйте тип функции GPIO_CLIENT_QUERY_ACTIVE_INTERRUPTS, как показано в следующем примере кода:
GPIO_CLIENT_QUERY_ACTIVE_INTERRUPTS MyEvtGpioQueryActiveInterrupts;
Затем реализуйте функцию обратного вызова следующим образом:
_Use_decl_annotations_
NTSTATUS
MyEvtGpioQueryActiveInterrupts(
PVOID Context,
PGPIO_QUERY_ACTIVE_INTERRUPTS_PARAMETERS QueryActiveParameters
)
{ ... }
Тип функции GPIO_CLIENT_QUERY_ACTIVE_INTERRUPTS определен в файле заголовка Gpioclx.h. Чтобы более точно определить ошибки при запуске средств анализа кода, обязательно добавьте заметку Use_decl_annotations в определение функции. Заметка Use_decl_annotations гарантирует использование заметок, которые применяются к типу функции GPIO_CLIENT_QUERY_ACTIVE_INTERRUPTS в файле заголовка. Дополнительные сведения о требованиях к объявлениям функций см. в разделе Объявление функций с помощью типов ролей функций для драйверов KMDF. Дополнительные сведения о Use_decl_annotations см. в статье Поведение функции с заметками.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Поддерживается начиная с Windows 8. |
Целевая платформа | Персональный компьютер |
Верхняя часть | gpioclx.h |
IRQL | См. заметки. |
См. также раздел
CLIENT_CONTROLLER_BASIC_INFORMATION
CLIENT_QueryControllerBasicInformation