reactos/sdk/lib/drivers/wdf/shared/inc/primitives/common/mxpagedlock.h

104 lines
1.5 KiB
C
Raw Normal View History

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