Макрос NdisAcquireSpinLock (ndis.h)
Функция NdisAcquireSpinLock получает спин-блокировку, чтобы вызывающий объект получил монопольный доступ к ресурсам, совместно используемым функциями драйвера, которые защищает спин-блокировка.
Синтаксис
void NdisAcquireSpinLock(
[in] _SpinLock
);
Параметры
[in] _SpinLock
Указатель на непрозрачную блокировку спина, уже инициализированную вызывающим элементом.
Возвращаемое значение
None
Remarks
Драйвер должен инициализировать переменную типа 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 (включая Ndis.h) |
Библиотека | Ndis.lib |
IRQL | <= DISPATCH_LEVEL |
Правила соответствия DDI | Irql_Synch_Function(ndis), SpinLock(ndis), SpinLockBalanced(ndis), SpinLockDpr(ndis), SpinLockDprRelease(ndis), SpinlockRelease(ndis) |