/*++ Copyright (c) Microsoft Corporation ModuleName: MxLock.h Abstract: Mode agnostic definition of lock See MxLockKm.h and MxLockUm.h for mode specific implementations Author: Revision History: --*/ #pragma once // // MxLockNoDynam has no c'tor/d'tor // so as to be usable in global structs in km // // MxLock dervies from it and adds c'tor/d'tor // class MxLockNoDynam { DECLARE_DBGFLAG_INITIALIZED; protected: MdLock m_Lock; public: MdLock & Get( ) { return m_Lock; } __inline VOID Initialize( ); _Acquires_lock_(this->m_Lock) __drv_maxIRQL(DISPATCH_LEVEL) __drv_setsIRQL(DISPATCH_LEVEL) __inline VOID Acquire( __out __drv_deref(__drv_savesIRQL) KIRQL * OldIrql ); #if ((FX_CORE_MODE)==(FX_CORE_USER_MODE)) CHECK_RETURN_IF_USER_MODE __inline BOOLEAN TryToAcquire( VOID ); #endif _Acquires_lock_(this->m_Lock) __drv_requiresIRQL(DISPATCH_LEVEL) __inline VOID AcquireAtDpcLevel( ); _Releases_lock_(this->m_Lock) __drv_requiresIRQL(DISPATCH_LEVEL) __inline VOID Release( __drv_restoresIRQL KIRQL NewIrql ); _Releases_lock_(this->m_Lock) __drv_requiresIRQL(DISPATCH_LEVEL) __inline VOID ReleaseFromDpcLevel( ); __inline VOID Uninitialize( ); }; class MxLock : public MxLockNoDynam { public: __inline MxLock(); __inline ~MxLock(); };