[WDF] Add Windows Driver Framework files
[reactos.git] / sdk / lib / drivers / wdf / shared / inc / primitives / common / mxworkitem.h
diff --git a/sdk/lib/drivers/wdf/shared/inc/primitives/common/mxworkitem.h b/sdk/lib/drivers/wdf/shared/inc/primitives/common/mxworkitem.h
new file mode 100644 (file)
index 0000000..126c05e
--- /dev/null
@@ -0,0 +1,118 @@
+/*++
+
+Copyright (c) Microsoft Corporation
+
+ModuleName:
+
+    MxWorkItem.h
+
+Abstract:
+
+    Mode agnostic definition of WorkItem functions
+
+    See MxWorkItemKm.h and MxWorkItemUm.h for mode
+    specific implementations
+
+Author:
+
+
+
+Revision History:
+
+
+
+--*/
+
+#pragma once
+
+class MxWorkItem
+{
+
+protected:
+    MdWorkItem m_WorkItem;
+
+public:
+
+    __inline
+    MxWorkItem(
+        );
+
+    //
+    // This is used only by the UM implementation
+    //
+
+#if ((FX_CORE_MODE)==(FX_CORE_USER_MODE))
+    static
+    VOID
+    CALLBACK
+    _WorkerThunk (
+        _Inout_ PTP_CALLBACK_INSTANCE Instance,
+        _Inout_opt_ PVOID Parameter,
+        _Inout_ PTP_WAIT Wait,
+        _In_ TP_WAIT_RESULT WaitResult
+        );
+
+    VOID
+    WaitForCallbacksToComplete(
+        VOID
+        );
+
+#endif
+
+    _Must_inspect_result_
+    __inline
+    NTSTATUS
+    Allocate(
+        __in MdDeviceObject DeviceObject,
+        __in_opt PVOID ThreadPoolEnv = NULL
+        );
+
+    __inline
+    VOID
+    Enqueue(
+        __in PMX_WORKITEM_ROUTINE Callback,
+        __in PVOID Context
+        );
+
+    __inline
+    MdWorkItem
+    GetWorkItem(
+        );
+
+    static
+    __inline
+    VOID
+    _Free(
+        __in MdWorkItem Item
+        );
+
+    __inline
+    VOID
+    Free(
+        );
+
+    __inline
+    ~MxWorkItem(
+        )
+    {
+    }
+
+};
+
+//
+// MxAutoWorkItem adds value to MxWorkItem by automatically freeing the
+// associated MdWorkItem when it goes out of scope
+//
+struct MxAutoWorkItem : public MxWorkItem {
+public:
+
+    MxAutoWorkItem(
+        )
+    {
+    }
+
+    __inline
+    ~MxAutoWorkItem(
+        );
+};
+