Git conversion: Make reactos the root directory, move rosapps, rostests, wallpapers...
[reactos.git] / ntoskrnl / cache / mdlsup.c
diff --git a/ntoskrnl/cache/mdlsup.c b/ntoskrnl/cache/mdlsup.c
new file mode 100644 (file)
index 0000000..4673e9d
--- /dev/null
@@ -0,0 +1,127 @@
+/*
+ * COPYRIGHT:       See COPYING in the top level directory
+ * PROJECT:         ReactOS Kernel
+ * FILE:            ntoskrnl/cache/mdlsup.c
+ * PURPOSE:         Logging and configuration routines
+ * PROGRAMMERS:     Alex Ionescu (alex.ionescu@reactos.org)
+ */
+
+/* INCLUDES *******************************************************************/
+
+#include <ntoskrnl.h>
+#include "newcc.h"
+#define NDEBUG
+#include <debug.h>
+
+/* GLOBALS ********************************************************************/
+
+/* FUNCTIONS ******************************************************************/
+
+PMDL
+NTAPI
+CcpBuildCacheMdl(PFILE_OBJECT FileObject,
+                 PLARGE_INTEGER FileOffset,
+                 ULONG Length,
+                 PIO_STATUS_BLOCK IOSB)
+{
+    PMDL Mdl;
+    PVOID Bcb, Buffer;
+
+    BOOLEAN Result = CcMapData(FileObject,
+                               FileOffset,
+                               Length,
+                               PIN_WAIT,
+                               &Bcb,
+                               &Buffer);
+
+    if (!Result)
+    {
+        IOSB->Information = 0;
+        IOSB->Status = STATUS_UNSUCCESSFUL;
+        return NULL;
+    }
+
+    IOSB->Information = Length;
+    IOSB->Status = STATUS_SUCCESS;
+
+    Mdl = IoAllocateMdl(Buffer, Length, FALSE, FALSE, NULL);
+
+    if (!Mdl)
+    {
+        IOSB->Information = 0;
+        IOSB->Status = STATUS_NO_MEMORY;
+        return NULL;
+    }
+
+    IOSB->Information = Length;
+    IOSB->Status = STATUS_SUCCESS;
+
+    return Mdl;
+}
+
+VOID
+NTAPI
+CcMdlRead(IN PFILE_OBJECT FileObject,
+          IN PLARGE_INTEGER FileOffset,
+          IN ULONG Length,
+          OUT PMDL *MdlChain,
+          OUT PIO_STATUS_BLOCK IoStatus)
+{
+    *MdlChain = CcpBuildCacheMdl(FileObject, FileOffset, Length, IoStatus);
+}
+
+VOID
+NTAPI
+CcMdlReadComplete(IN PFILE_OBJECT FileObject,
+                  IN PMDL MdlChain)
+{
+    IoFreeMdl(MdlChain);
+}
+
+VOID
+NTAPI
+CcMdlReadComplete2(IN PFILE_OBJECT FileObject,
+                   IN PMDL MdlChain)
+{
+    UNIMPLEMENTED
+}
+
+VOID
+NTAPI
+CcPrepareMdlWrite(IN PFILE_OBJECT FileObject,
+                  IN PLARGE_INTEGER FileOffset,
+                  IN ULONG Length,
+                  OUT PMDL *MdlChain,
+                  OUT PIO_STATUS_BLOCK IoStatus)
+{
+    *MdlChain = CcpBuildCacheMdl(FileObject, FileOffset, Length, IoStatus);
+}
+
+VOID
+NTAPI
+CcMdlWriteComplete(IN PFILE_OBJECT FileObject,
+                   IN PLARGE_INTEGER FileOffset,
+                   IN PMDL MdlChain)
+{
+    IoFreeMdl(MdlChain);
+}
+
+VOID
+NTAPI
+CcMdlWriteComplete2(IN PFILE_OBJECT FileObject,
+                    IN PLARGE_INTEGER FileOffset,
+                    IN PMDL MdlChain)
+{
+    UNIMPLEMENTED
+}
+
+VOID
+NTAPI
+CcMdlWriteAbort(IN PFILE_OBJECT FileObject,
+                IN PMDL MdlChain)
+{
+    ASSERT(FALSE);
+    IoFreeMdl(MdlChain);
+}
+
+/* EOF */