функция обратного вызова IO_CSQ_ACQUIRE_LOCK (wdm.h)
Процедура CsqAcquireLock используется системой для получения блокировки для очереди IRP, реализованной драйвером.
Синтаксис
IO_CSQ_ACQUIRE_LOCK IoCsqAcquireLock;
void IoCsqAcquireLock(
[in] PIO_CSQ Csq,
[out] PKIRQL Irql
)
{...}
Параметры
[in] Csq
Указатель на структуру IO_CSQ для очереди IRP, безопасной для отмены.
[out] Irql
Указатель на переменную, которую подпрограмма CsqAcquireLock может использовать для хранения текущего IRQL. Система передает сохраненное значение CsqReleaseLock при выпуске блокировки.
Возвращаемое значение
Никакой
Замечания
Драйвер задает процедуру CsqAcquireLock для очереди отмены безопасного IRP при инициализации структуры IO_CSQ очереди. Драйвер задает подпрограмму как параметр CsqAcquireLockIoCsqInitialize или IoCsqInitializeEx при инициализации IO_CSQ. Дополнительные сведения см. в Cancel-Safe очередях IRP.
Система вызывает эту подпрограмму для получения блокировки очереди IRP драйвера перед попыткой вставки или удаления IRP из очереди. Система вызывает процедуру CsqReleaseLock для освобождения блокировки.
Если драйвер использует блокировку спина для реализации блокировки очереди, он должен хранить текущий IRQL при выпуске блокировки спина. Система передает указатель на переменную IRQL, которую драйвер может использовать для хранения текущего IRQL. Система передает сохраненное значение в качестве параметра IrqlCsqReleaseLock при выпуске блокировки. В противном случае драйвер может игнорировать параметр Irql. Сведения о блокировках спина см. в разделе Spin Locks.
Драйверы могут использовать любой механизм блокировки для блокировки очереди, например мьютексов. Дополнительные сведения о мьютексах см. в разделе Мьютекс-объекты.
Примеры
Чтобы определить подпрограмму обратного вызова CsqAcquireLock, необходимо сначала указать объявление функции, определяющее тип определяемой процедуры обратного вызова. Windows предоставляет набор типов функций обратного вызова для драйверов. Объявление функции с помощью типов функций обратного вызова помогает анализ кода для драйверов, статический проверяющий драйвер (SDV) и другие средства проверки подлинности, и это требование для написания драйверов для операционной системы Windows.
Например, чтобы определить подпрограмму обратного вызова CsqAcquireLock csqAcquireLock с именем MyCsqAcquireLock
, используйте тип IO_CSQ_ACQUIRE_LOCK, как показано в этом примере кода:
IO_CSQ_ACQUIRE_LOCK MyCsqAcquireLock;
Затем реализуйте подпрограмму обратного вызова следующим образом:
_Use_decl_annotations_
VOID
MyCsqAcquireLock(
PIO_CSQ Csq,
PKIRQL Irql
)
{
// Function body
}
Тип функции IO_CSQ_ACQUIRE_LOCK определен в файле заголовка Wdm.h. Чтобы более точно определить ошибки при запуске средств анализа кода, обязательно добавьте в определение функции _Use_decl_annotations_
заметку. Заметка _Use_decl_annotations_
гарантирует, что используются заметки, применяемые к типу функции IO_CSQ_ACQUIRE_LOCK в файле заголовка. Дополнительные сведения о требованиях к объявлениям функций см. в объявлении функций с помощью типов ролей функций для драйверов WDM. Сведения о _Use_decl_annotations_
см. в поведению функции.
Требования
Требование | Ценность |
---|---|
целевая платформа | Настольный |
заголовка | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
IRQL | См. раздел "Примечания". |