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