mirror of
https://github.com/reactos/reactos.git
synced 2025-03-10 10:14:44 +00:00
91 lines
1.5 KiB
C++
91 lines
1.5 KiB
C++
![]() |
/*++
|
||
|
|
||
|
Copyright (c) Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
FxPagedObject.hpp
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
This module defines the abstract FxPagedObject class.
|
||
|
|
||
|
Author:
|
||
|
|
||
|
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#ifndef _FXPAGEDOBJECT_H_
|
||
|
#define _FXPAGEDOBJECT_H_
|
||
|
|
||
|
class FxPagedObject : public FxObject
|
||
|
{
|
||
|
private:
|
||
|
MxPagedLock* m_Lock;
|
||
|
|
||
|
public:
|
||
|
|
||
|
FxPagedObject(
|
||
|
__in WDFTYPE Type,
|
||
|
__in USHORT Size,
|
||
|
__in PFX_DRIVER_GLOBALS FxDriverGlobals
|
||
|
) :
|
||
|
FxObject(Type, Size, FxDriverGlobals)
|
||
|
{
|
||
|
m_Lock = NULL;
|
||
|
|
||
|
// no need to hold the lock while the object is being constructed
|
||
|
MarkPassiveCallbacks(ObjectDoNotLock);
|
||
|
}
|
||
|
|
||
|
virtual
|
||
|
~FxPagedObject(
|
||
|
VOID
|
||
|
)
|
||
|
{
|
||
|
if (m_Lock != NULL) {
|
||
|
FxPoolFree(m_Lock);
|
||
|
m_Lock = NULL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
VOID
|
||
|
Lock(
|
||
|
VOID
|
||
|
)
|
||
|
{
|
||
|
m_Lock->Acquire();
|
||
|
}
|
||
|
|
||
|
VOID
|
||
|
Unlock(
|
||
|
VOID
|
||
|
)
|
||
|
{
|
||
|
m_Lock->Release();
|
||
|
}
|
||
|
|
||
|
_Must_inspect_result_
|
||
|
NTSTATUS
|
||
|
Initialize(
|
||
|
VOID
|
||
|
)
|
||
|
{
|
||
|
PFX_DRIVER_GLOBALS fxDriverGlobals;
|
||
|
|
||
|
fxDriverGlobals = GetDriverGlobals();
|
||
|
m_Lock = (MxPagedLock*) FxPoolAllocate(fxDriverGlobals,
|
||
|
NonPagedPool,
|
||
|
sizeof(MxPagedLock));
|
||
|
if (m_Lock != NULL) {
|
||
|
return m_Lock->Initialize();
|
||
|
}
|
||
|
else {
|
||
|
return STATUS_INSUFFICIENT_RESOURCES;
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
#endif // _FXPAGEDOBJECT_H_
|