/*++ 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_