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


Макрос NdisAcquireSpinLock (ndis.h)

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

Синтаксис

void NdisAcquireSpinLock(
  [in]  _SpinLock
);

Параметры

[in] _SpinLock

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

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

Никакой

Замечания

Драйвер должен инициализировать переменную типа NDIS_SPIN_LOCK с NdisAllocateSpinLock перед вызовом любой другой функции NdisXxxSpinLock. Драйвер должен предоставить хранилище резидентов для хозяйских блокировок, которые он использует.

После получения блокировки спина с NdisAcquireSpinLock, вызывающий объект должен освободить блокировку с вызовом NdisReleaseSpinLock. Драйвер должен вызывать NdisReleaseSpinLock после каждого вызова NdisAcquireSpinLock. В противном случае возникает взаимоблокировка, зависание драйвера.

Блокировка спина, полученная с NdisAcquireSpinLock, должна быть выпущена с NdisReleaseSpinLock. Блокировка спина, полученная с NdisDprAcquireSpinLock, должна быть выпущена с NdisDprReleaseSpinLock.

Драйвер никогда не должен хранить блокировку спина в течение длительного периода (более нескольких инструкций). Хранение блокировки спина дольше 25 микросекунд снижает производительность системы и драйвера.

Минипорт-драйвер не может использовать блокировку спина для защиты ресурсов, совместно используемых другими функциями с MiniportInterrupt и/или функции MiniportDisableInterruptEx. Вместо этого минипорт-драйвер должен вызывать NdisMSynchronizeWithInterruptEx, чтобы его MiniportSynchronizeInterrupt функция обращается к таким общим ресурсам в том же DIRQL, по которому он
Функции MiniportInterrupt и/или MiniportDisableInterruptEx.

Дополнительные сведения о получении и выпуске блокировок спина NDIS см. в синхронизации и уведомлений в сетевых драйверах.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Поддерживается для драйверов NDIS 6.0 и NDIS 5.1 (см. NdisAcquireSpinLock (NDIS 5.1)) в Windows Vista. Поддерживается для драйверов NDIS 5.1 (см. NdisAcquireSpinLock (NDIS 5.1)) в Windows XP.
целевая платформа Всеобщий
заголовка ndis.h (include Ndis.h)
библиотеки Ndis.lib
IRQL <= DISPATCH_LEVEL
правил соответствия DDI Irql_Synch_Function(ndis), SpinLock(ndis), SpinLockBalanced(ndis), SpinLockDpr(ndis), SpinLockDprRelease(ndis), SpinlockRelease(ndis)

См. также

MiniportDisableInterruptEx

MiniportHaltEx

MiniportInitializeEx

MiniportInterrupt

MiniportSynchronizeInterrupt

NdisAllocateSpinLock

NdisDprAcquireSpinLock

NdisMSynchronizeWithInterruptEx

NdisReleaseSpinLock