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


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

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

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

Синтаксис

void NdisInitializeReadWriteLock(
  [out] PNDIS_RW_LOCK Lock
);

Параметры

[out] Lock

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

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

Никакой

Замечания

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

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

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

После вызова 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 (include Ndis.h)
библиотеки Ndis.lib
DLL Ndis.sys
IRQL Любой уровень (см. раздел "Примечания")

См. также

NdisAcquireReadWriteLock

NdisReleaseReadWriteLock