update for HEAD-2003091401
[reactos.git] / subsys / win32k / eng / mem.c
index ba88a64..f5a7e15 100644 (file)
@@ -1,4 +1,23 @@
 /*
+ *  ReactOS W32 Subsystem
+ *  Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 ReactOS Team
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+/* $Id$
+ *
  * COPYRIGHT:         See COPYING in the top level directory
  * PROJECT:           ReactOS kernel
  * PURPOSE:           GDI Driver Memory Management Functions
 #include <ddk/ntddk.h>
 #include <ddk/winddi.h>
 
+#define NDEBUG
+#include <win32k/debug1.h>
+#include <debug.h>
+
+typedef struct _USERMEMHEADER
+  {
+  ULONG Tag;
+  ULONG MemSize;
+  }
+USERMEMHEADER, *PUSERMEMHEADER;
+
+/*
+ * @implemented
+ */
 PVOID STDCALL
 EngAllocMem(ULONG Flags,
            ULONG MemSize,
@@ -28,26 +61,68 @@ EngAllocMem(ULONG Flags,
   return newMem;
 }
 
+/*
+ * @implemented
+ */
 VOID STDCALL
 EngFreeMem(PVOID Mem)
 {
   ExFreePool(Mem);
 }
 
+/*
+ * @implemented
+ */
 PVOID STDCALL
-EngAllocUserMem(ULONG cj, ULONG tag)
+EngAllocUserMem(ULONG cj, ULONG Tag)
 {
-  PVOID newMem = NULL;
-  NTSTATUS status;
+  PVOID NewMem = NULL;
+  NTSTATUS Status;
+  ULONG MemSize = sizeof(USERMEMHEADER) + cj;
+  PUSERMEMHEADER Header;
 
-  status = ZwAllocateVirtualMemory(NtCurrentProcess(), &newMem, 0, &cj, MEM_COMMIT, PAGE_READWRITE);
+  Status = ZwAllocateVirtualMemory(NtCurrentProcess(), &NewMem, 0, &MemSize, MEM_COMMIT, PAGE_READWRITE);
 
-  if(status != STATUS_SUCCESS) return NULL;
-  return newMem;
+  if (! NT_SUCCESS(Status))
+    {
+      return NULL;
+    }
+
+  Header = (PUSERMEMHEADER) NewMem;
+  Header->Tag = Tag;
+  Header->MemSize = cj;
+
+  return (PVOID)(Header + 1);
 }
 
+/*
+ * @implemented
+ */
 VOID STDCALL
 EngFreeUserMem(PVOID pv)
 {
-  ZwFreeVirtualMemory (NtCurrentProcess(), &pv, 0, MEM_DECOMMIT);
+  PUSERMEMHEADER Header = ((PUSERMEMHEADER) pv) - 1;
+  ULONG MemSize = sizeof(USERMEMHEADER) + Header->MemSize;
+
+  ZwFreeVirtualMemory(NtCurrentProcess(), (PVOID *) &Header, &MemSize, MEM_DECOMMIT);
+}
+
+/*
+ * @implemented
+ */
+HANDLE STDCALL
+EngSecureMem(PVOID Address, ULONG Length)
+{
+  return MmSecureVirtualMemory(Address, Length, PAGE_READWRITE);
 }
+
+/*
+ * @implemented
+ */
+VOID STDCALL
+EngUnsecureMem(HANDLE Mem)
+{
+  return MmUnsecureVirtualMemory((PVOID) Mem);
+}
+
+/* EOF */