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


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

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

Синтаксис

void NdisDprAcquireSpinLock(
  [in]  _SpinLock
);

Параметры

[in] _SpinLock

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

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

Никакой

Замечания

Минипорт-драйвер должен инициализировать переменную типа 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 (include 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