функция обратного вызова 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 (см. раздел "Примечания"). |