--- /dev/null
+/*++
+
+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();
+};