Макрос 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) |