SlavaI
Главный специалист
Offline
|
|
« Ответ #2 : 04-11-2003 06:56 » |
|
Если посмотреть на определение этого класса, то там только два конструктора и ф-ция Initialize, которые только и делают, что присваивают значение указателю m_pInterrupt, при такой операции зависаний быть не может.
class KInterruptSpinLock { // Construction public: SAFE_DESTRUCTORS KInterruptSpinLock(void) : m_pInterrupt(NULL) {} KInterruptSpinLock(PKINTERRUPT pInterrupt) : m_pInterrupt(pInterrupt) {} VOID Initialize(PKINTERRUPT pInterrupt) { m_pInterrupt = pInterrupt; }
VOID Invalidate(void) { m_pInterrupt = NULL; } BOOLEAN IsValid(void){ return (m_pInterrupt != NULL); }
// Methods public: VOID Lock() { m_PreviousIrql = KeAcquireInterruptSpinLock(m_pInterrupt); } VOID Unlock() { KeReleaseInterruptSpinLock(m_pInterrupt, m_PreviousIrql); }
KIRQL& OldIrql(void) { return m_PreviousIrql; }
// Data protected: PKINTERRUPT m_pInterrupt; KIRQL m_PreviousIrql; };
|