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


Функция KeSrcuSynchronize (wdm.h)

Подпрограмма KeSrcuSynchronize ожидает завершения всех текущих активных критических разделов на стороне чтения для секции с спящегоCopy-Update (SRCU).

Синтаксис

VOID KeSrcuSynchronize(
  [in] PKE_SRCU Rcu
);

Параметры

[in] Rcu

Указатель на экземпляр SRCU, который ранее был выделен KeSrcuAllocate.

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

None

Замечания

KeSrcuSynchronize реализует операцию "sync" для SRCU, которая запускает льготный период и ожидает выхода всех активных читателей, чтобы выйти из своих критически важных разделов. Эта функция необходима для безопасного восстановления памяти и обновлений структуры данных.

Семантика льготного периода выглядит следующим образом:

  • Функция ожидает только читателей, которые были активными при вызове.
  • Новые средства чтения, которые вводят после начала вызова, не включаются в ожидание.
  • Функция может блокироваться до тех пор, пока все целевые читатели не вызовут KeSrcuReadUnlock.
  • Одновременно может выполняться несколько операций синхронизации.

Вызовите эту функцию только в IRQL < DISPATCH_LEVEL, так как она может блокироваться. Эта функция может спянуть, что подходит для страничного кода. Не вызывайте эту функцию в критическом разделе SRCU на стороне чтения.

Типичный шаблон записи выглядит следующим образом:

  1. Удалите структуру данных из глобальной видимости.
  2. Вызовите KeSrcuSynchronize, чтобы ждать существующих читателей.
  3. Безопасное освобождение или изменение структуры данных.

Функция гарантирует, что читатели не получают доступ к данным при возврате, что делает его безопасным для выполнения обновлений или восстановления памяти.

Требования

Требование Ценность
целевая платформа Всеобщий
Header wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <DISPATCH_LEVEL

См. также

KeSrcuAllocate

KeSrcuFree

KeSrcuReadLock

KeSrcuReadUnlock