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


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

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

Синтаксис

KSYNCHRONIZE_ROUTINE KsynchronizeRoutine;

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

Параметры

[in] SynchronizeContext

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

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

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

Замечания

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

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

Подпрограмма synchCritSec tion драйвера выполняется в том же 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 (include Wdm.h, Ntddk.h, Ntifs.h)
IRQL Вызывается в DIRQL (см. раздел "Примечания").