Функция NdisInitializeReadWriteLock (ndis.h)

Функция NdisInitializeReadWriteLock инициализирует переменную блокировки чтения или записи типа NDIS_RW_LOCK.

Примечание Интерфейс блокировки чтения и записи не рекомендуется использовать для драйверов NDIS 6.20 и более поздних версий, в которых вместо NdisInitializeReadWriteLock следует использовать NdisAllocateRWLock.
 

Синтаксис

void NdisInitializeReadWriteLock(
  [out] PNDIS_RW_LOCK Lock
);

Параметры

[out] Lock

Указатель на непрозрачную переменную NDIS_RW_LOCK , представляющую блокировку. Вызывающий объект может использовать эту блокировку для получения доступа на запись или чтение к ресурсам, которые являются общими для потоков драйверов, не относящихся к ISR.

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

None

Remarks

Переменная NDIS_RW_LOCK используется для ограничения доступа на запись к общим ресурсам одним потоком драйвера, не относящийся к ISR. Этот NDIS_RW_LOCK может разрешить нескольким потокам драйверов, не относящихся к ISR, одновременный доступ на чтение этих ресурсов. Такой доступ на чтение не разрешен во время доступа на запись.

Указатель блокировки , передаваемый в NdisInitializeReadWriteLock , является обязательным параметром для всех остальных Ndis.. Функции ReadWriteLock .

Прежде чем драйвер вызывает функцию NdisAcquireReadWriteLock для получения доступа на запись или чтение к ресурсу, драйвер должен вызвать NdisInitializeReadWriteLock , чтобы инициализировать блокировку, связанную с этим ресурсом. Вызывающий объект должен предоставить непагрегированное хранилище для переменной в разделе Блокировка .

После вызова NdisInitializeReadWriteLock драйвер может вызвать NdisAcquireReadWriteLock , чтобы получить доступ на запись или чтение к ресурсу. Доступ на запись к ресурсу может получить только один поток драйвера, отличный от ISR. Если один поток, отличный от ISR, имеет доступ на запись, все доступы на чтение и запись других потоков, отличных от ISR, должны ждать, пока владелец доступа для записи спустит блокировку. Однако если поток, отличный от ISR, имеет доступ на чтение, другие потоки, не относящиеся к ISR, могут одновременно получать доступ на чтение.

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

После завершения доступа к ресурсу драйвер вызываетФункция NdisReleaseReadWriteLock.

Каждая блокировка, инициализируемая драйвером, выполняет одно из следующих действий.

  • Защищает дискретный набор общих ресурсов от одновременного доступа на запись и чтение потоками драйвера, которые выполняются в IRQL <= DISPATCH_LEVEL.
  • Предоставляет дискретный набор общих ресурсов для одновременного доступа к чтению потоками драйвера, которые выполняются в IRQL <= DISPATCH_LEVEL.
Вызывающие компоненты NdisInitializeReadWriteLock могут выполняться в любом IRQL. Обычно вызывающий объект выполняется в irQL = PASSIVE_LEVEL во время инициализации.

Требования

Требование Значение
Минимальная версия клиента Не рекомендуется использовать драйверы NDIS 6.20 и более поздних версий, которые должны использовать NdisAllocateRWLock вместо NdisInitializeReadWriteLock. Поддерживается для драйверов NDIS 6.0 и NDIS 5.1 (см. раздел NdisInitializeReadWriteLock (NDIS 5.1)) в Windows Vista. Поддерживается для драйверов NDIS 5.1 (см. раздел NdisInitializeReadWriteLock (NDIS 5.1)) в Windows XP.
Целевая платформа Универсальное
Верхняя часть ndis.h (включая Ndis.h)
Библиотека Ndis.lib
DLL Ndis.sys
IRQL Любой уровень (см. раздел "Примечания")

См. также раздел

NdisAcquireReadWriteLock

NdisReleaseReadWriteLock