mirror of
https://github.com/reactos/reactos.git
synced 2025-03-10 10:14:44 +00:00
109 lines
1.5 KiB
C++
109 lines
1.5 KiB
C++
/*++
|
|
|
|
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();
|
|
};
|