Из того, что я могу понять:
KeAcquireSpinLock
эквивалентен spin_lock_bh
: один поднимает IRQL до DISPATCH_LEVEL, другой маскирует нижнюю половину прерывания - функционально то же самое. В то время как вариант NT сохраняет OldIrql, вариант Linux, похоже, нигде не хранит "wereInterruptsAlreadyMasked". Означает ли это, что spin_unlock_bh
всегда демаскирует их? KeAcquireInterruptSpinLock
подобен spin_lock_irqsave
. Что такое NT-эквивалент spin_lock
?
Если spin_unlock_bh
всегда демаскирует прерывания (на языке NT всегда снижает IRQL до KeAcquireSpinLockAtDpcLevel
?