mirror of
https://github.com/reactos/reactos.git
synced 2025-03-10 10:14:44 +00:00
103 lines
1.5 KiB
C++
103 lines
1.5 KiB
C++
/*++
|
|
|
|
Copyright (c) Microsoft Corporation
|
|
|
|
ModuleName:
|
|
|
|
MxPagedLock.h
|
|
|
|
Abstract:
|
|
|
|
Mode agnostic definition of paged lock
|
|
|
|
See MxPagedLockKm.h and MxPagedLockUm.h for mode
|
|
specific implementations
|
|
|
|
Author:
|
|
|
|
|
|
|
|
Revision History:
|
|
|
|
|
|
|
|
--*/
|
|
|
|
#pragma once
|
|
|
|
//
|
|
// MxPagedLockNoDynam has no c'tor/d'tor
|
|
// so as to be usable in global structs in km
|
|
//
|
|
// MxPagedLock dervies from it and adds c'tor/d'tor
|
|
//
|
|
class MxPagedLockNoDynam
|
|
{
|
|
|
|
DECLARE_DBGFLAG_INITIALIZED;
|
|
|
|
protected:
|
|
MdPagedLock m_Lock;
|
|
public:
|
|
_Must_inspect_result_
|
|
__inline
|
|
NTSTATUS
|
|
Initialize(
|
|
);
|
|
|
|
__drv_maxIRQL(APC_LEVEL)
|
|
__drv_setsIRQL(APC_LEVEL)
|
|
__drv_savesIRQLGlobal(FastMutexObject, this->m_Lock)
|
|
_Acquires_lock_(this->m_Lock)
|
|
__inline
|
|
VOID
|
|
Acquire(
|
|
);
|
|
|
|
|
|
__inline
|
|
VOID
|
|
AcquireUnsafe(
|
|
);
|
|
|
|
_Must_inspect_result_
|
|
__drv_maxIRQL(APC_LEVEL)
|
|
__drv_savesIRQLGlobal(FastMutexObject, this->m_Lock)
|
|
__drv_valueIs(==1;==0)
|
|
__drv_when(return==1, __drv_setsIRQL(APC_LEVEL))
|
|
_When_(return==1, _Acquires_lock_(this->m_Lock))
|
|
__inline
|
|
BOOLEAN
|
|
TryToAcquire(
|
|
);
|
|
|
|
__drv_requiresIRQL(APC_LEVEL)
|
|
__drv_restoresIRQLGlobal(FastMutexObject,this->m_Lock)
|
|
_Releases_lock_(this->m_Lock)
|
|
__inline
|
|
VOID
|
|
Release(
|
|
);
|
|
|
|
|
|
__inline
|
|
VOID
|
|
ReleaseUnsafe(
|
|
);
|
|
|
|
__inline
|
|
VOID
|
|
Uninitialize(
|
|
);
|
|
};
|
|
|
|
class MxPagedLock : public MxPagedLockNoDynam
|
|
{
|
|
public:
|
|
__inline
|
|
MxPagedLock();
|
|
|
|
__inline
|
|
~MxPagedLock();
|
|
};
|
|
|