функция обратного вызова IO_CSQ_RELEASE_LOCK (wdm.h)
Подпрограмма CsqReleaseLock используется системой для снятия блокировки, полученной с помощью CsqAcquireLock.
Синтаксис
IO_CSQ_RELEASE_LOCK IoCsqReleaseLock;
void IoCsqReleaseLock(
[in] PIO_CSQ Csq,
[in] KIRQL Irql
)
{...}
Параметры
[in] Csq
Указатель на структуру IO_CSQ для очереди IRP с безопасной отменой.
[in] Irql
Указывает IRQL. Это значение, сохраненное csqAcquireLock при получении блокировки.
Возвращаемое значение
None
Remarks
Драйвер указывает подпрограмму CsqReleaseLock для безопасной с отменой очереди IRP при инициализации структуры IO_CSQ очереди. Драйвер указывает подпрограмму в качестве параметра CsqReleaseLockioCsqInitialize или IoCsqInitializeEx при инициализации IO_CSQ. Дополнительные сведения см. в разделе Отмена безопасных очередей IRP.
Система вызывает эту функцию, чтобы освободить блокировку, полученную с помощью CsqAcquireLock.
Если драйвер использует спин-блокировку для реализации блокировки очереди, он должен сохранить текущий IRQL при получении блокировки и предоставить хранимый IRQL при освобождении блокировки. Подпрограмма CsqAcquireLock хранит текущий код IRQL, а система передает сохраненное значение в качестве параметра Irqlв CsqReleaseLock. В противном случае драйвер может игнорировать параметр Irql . Сведения о спин-блокировках см. в разделе Спин-блокировки.
Драйверы могут использовать любой механизм блокировки для блокировки очереди, например мьютексы. Дополнительные сведения о мьютексах см. в разделе Объекты мьютексов.
Примеры
Чтобы определить подпрограмму обратного вызова CsqReleaseLock , необходимо сначала предоставить объявление функции, определяющее тип определяемой процедуры обратного вызова. Windows предоставляет набор типов функций обратного вызова для драйверов. Объявление функции с помощью типов функций обратного вызова помогает анализу кода для драйверов, средству проверки статических драйверов (SDV) и другим средствам проверки находить ошибки, и это требование для написания драйверов для операционной системы Windows.
Например, чтобы определить подпрограмму обратного вызова CsqReleaseLock с именем MyCsqReleaseLock
, используйте тип IO_CSQ_RELEASE_LOCK, как показано в следующем примере кода:
IO_CSQ_RELEASE_LOCK MyCsqReleaseLock;
Затем реализуйте процедуру обратного вызова следующим образом:
_Use_decl_annotations_
VOID
MyCsqReleaseLock(
PIO_CSQ Csq,
KIRQL Irql
)
{
// Function body
}
Тип функции IO_CSQ_RELEASE_LOCK определяется в файле заголовка Wdm.h. Чтобы более точно определить ошибки при запуске средств анализа кода, обязательно добавьте заметку в _Use_decl_annotations_
определение функции. Заметка _Use_decl_annotations_
гарантирует, что будут использоваться заметки, которые применяются к типу функции IO_CSQ_RELEASE_LOCK в файле заголовка. Дополнительные сведения о требованиях к объявлениям функций см. в разделе Объявление функций с помощью типов ролей функций для драйверов WDM. Дополнительные сведения о _Use_decl_annotations_
см. в статье Поведение функции с заметками.
Требования
Требование | Значение |
---|---|
Целевая платформа | Персональный компьютер |
Верхняя часть | wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h) |