reactos/sdk/lib/drivers/wdf/shared/inc/primitives/km/mxpagedlockkm.h
Victor Perevertkin 1f377076d7
[WDF] Fix KMDF so it can compile with ReactOS SDK
Not all files are included, but these are necessary to compile cdrom driver.
So far it can only be statically linked with drivers, a proper
implementation requires wdfldr helper driver
2020-11-03 00:06:27 +03:00

139 lines
2.1 KiB
C

/*++
Copyright (c) Microsoft Corporation
ModuleName:
MxPagedLockKm.h
Abstract:
Kernel mode implementation of paged lock defined in
MxPagedLock.h
Author:
Revision History:
--*/
#pragma once
#include "dbgmacros.h"
typedef FAST_MUTEX MdPagedLock;
#include "mxpagedlock.h"
__inline
MxPagedLock::MxPagedLock(
)
{
CLEAR_DBGFLAG_INITIALIZED;
//
// Temporarily call initialize from c'tor
// so that we don't have to churn all of the KMDF code
//
#ifndef MERGE_COMPLETE
(VOID) MxPagedLock::Initialize();
#endif
}
__inline
NTSTATUS
#ifdef _MSC_VER
#pragma prefast(suppress:__WARNING_UNMATCHED_DEFN, "_Must_inspect_result_ not needed in kernel mode as the function always succeeds");
#endif
MxPagedLockNoDynam::Initialize(
)
{
ExInitializeFastMutex(&m_Lock);
SET_DBGFLAG_INITIALIZED;
return STATUS_SUCCESS;
}
__drv_maxIRQL(APC_LEVEL)
__drv_setsIRQL(APC_LEVEL)
__drv_savesIRQLGlobal(FastMutexObject, this->m_Lock)
_Acquires_lock_(this->m_Lock)
__inline
VOID
MxPagedLockNoDynam::Acquire(
)
{
ASSERT_DBGFLAG_INITIALIZED;
ExAcquireFastMutex(&m_Lock);
}
__inline
VOID
MxPagedLockNoDynam::AcquireUnsafe(
)
{
ASSERT_DBGFLAG_INITIALIZED;
ExAcquireFastMutexUnsafe(&m_Lock);
}
_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
MxPagedLockNoDynam::TryToAcquire(
)
{
ASSERT_DBGFLAG_INITIALIZED;
return ExTryToAcquireFastMutex(&m_Lock);
}
__drv_requiresIRQL(APC_LEVEL)
__drv_restoresIRQLGlobal(FastMutexObject, this->m_Lock)
_Releases_lock_(this->m_Lock)
__inline
VOID
MxPagedLockNoDynam::Release(
)
{
ASSERT_DBGFLAG_INITIALIZED;
ExReleaseFastMutex(&m_Lock);
}
__inline
VOID
MxPagedLockNoDynam::ReleaseUnsafe(
)
{
ASSERT_DBGFLAG_INITIALIZED;
ExReleaseFastMutexUnsafe(&m_Lock);
}
__inline
VOID
MxPagedLockNoDynam::Uninitialize(
)
{
CLEAR_DBGFLAG_INITIALIZED;
}
__inline
MxPagedLock::~MxPagedLock(
)
{
CLEAR_DBGFLAG_INITIALIZED;
}