[WDF] Add Windows Driver Framework files
[reactos.git] / sdk / lib / drivers / wdf / shared / inc / private / common / fxpagedobject.hpp
diff --git a/sdk/lib/drivers/wdf/shared/inc/private/common/fxpagedobject.hpp b/sdk/lib/drivers/wdf/shared/inc/private/common/fxpagedobject.hpp
new file mode 100644 (file)
index 0000000..3c79424
--- /dev/null
@@ -0,0 +1,90 @@
+/*++
+
+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_