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