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


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

Подпрограмма SynchCritSection используется для доступа к аппаратным ресурсам или данным драйверов, которые совместно используются в подпрограмме прерывания драйвера .

Синтаксис

KSYNCHRONIZE_ROUTINE KsynchronizeRoutine;

BOOLEAN KsynchronizeRoutine(
  [in] PVOID SynchronizeContext
)
{...}

Параметры

[in] SynchronizeContext

Сведения о контексте, предоставляемые вызывающим объектом, задаваемые вызовом драйвера к KeSynchronizeExecution.

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

Если операция подпрограммы выполнена успешно, подпрограмма должна вернуть значение TRUE; В противном случае он должен возвращать значение FALSE. (Успешное и неудачное выполнение этой подпрограммы определяется драйвером.) Указанное возвращаемое значение становится возвращаемым значением для KeSynchronizeExecution.

Комментарии

Драйверы должны использовать подпрограммы SynchCritSection для доступа к аппаратным ресурсам или данным драйверов, которые также могут быть доступны с помощью подпрограммы Прерывания Службы (ISR).

Система вызывает подпрограмму SynchCritSection драйвера, когда драйвер вызывает KeSynchronizeExecution. Когда драйвер вызывает KeSynchronizeExecution, он указывает адрес подпрограммы SynchCritSection , сведения о контексте для подпрограммы и указатель объекта прерывания. Подпрограмма KeSynchronizeExecution получает спиновую блокировку объекта прерывания, а затем вызывает подпрограмму SynchCritSection .

Подпрограмма SynchCritSection драйвера выполняется в той же среде IRQL, что и isr, с которой она связана. В частности, он выполняется в некоторых DIRQL, назначаемых системой, как указано в параметре SynchronizeIrql для IoConnectInterrupt. (Другие устройства с более высокими значениями DIRQL могут прерывать подпрограмму SynchCritSection .)

Примеры

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

Например, чтобы определить подпрограмму обратного вызова SynchCritSection с именем MySynchCritSection, используйте тип KSYNCHRONIZE_ROUTINE, как показано в следующем примере кода:

KSYNCHRONIZE_ROUTINE MySynchCritSection;

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

_Use_decl_annotations_
BOOLEAN
  MySynchCritSection(
    PVOID  SynchronizeContext
    )
  {
      // Function body
  }

Тип функции KSYNCHRONIZE_ROUTINE определен в файле заголовка Wdm.h. Чтобы более точно определить ошибки при запуске средств анализа кода, не забудьте добавить заметку _Use_decl_annotations_ в определение функции. Заметка _Use_decl_annotations_ гарантирует, что будут использоваться заметки, которые применяются к типу функции KSYNCHRONIZE_ROUTINE в файле заголовка. Дополнительные сведения о требованиях к объявлениям функций см. в статье Объявление функций с помощью типов ролей функций для драйверов WDM. Сведения о _Use_decl_annotations_см. в статье Поведение функции с заметками.

Требования

Требование Значение
Целевая платформа Персональный компьютер
Верхняя часть wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h)
IRQL Вызывается в DIRQL (см. раздел "Примечания").