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

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

Синтаксис

void NdisDprAcquireSpinLock(
  [in]  _SpinLock
);

Параметры

[in] _SpinLock

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

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

None

Remarks

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

NdisDprAcquireSpinLock — это оптимизированная версия NdisAcquireSpinLock , которую драйвер мини-порта может вызывать только во время выполнения в IRQL = DISPATCH_LEVEL.

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

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

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

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

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

Требования

Требование Значение
Минимальная версия клиента Поддерживается для драйверов NDIS 6.0 и NDIS 5.1 (см. раздел NdisDprAcquireSpinLock (NDIS 5.1)) в Windows Vista. Поддерживается для драйверов NDIS 5.1 (см. раздел NdisDprAcquireSpinLock (NDIS 5.1)) в Windows XP.
Целевая платформа Универсальное
Верхняя часть ndis.h (включая Ndis.h)
Библиотека Ndis.lib
IRQL DISPATCH_LEVEL
Правила соответствия DDI Irql_Synch_Function(ndis), SpinLock(ndis), SpinLockBalanced(ndis), SpinLockDpr(ndis), SpinLockDprRelease(ndis), SpinlockRelease(ndis)

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

MiniportDisableInterruptEx

MiniportInterrupt

MiniportSynchronizeInterrupt

NdisAcquireSpinLock

NdisAllocateSpinLock

NdisDprReleaseSpinLock

NdisMSynchronizeWithInterruptEx

NetTimerCallback