Move the inclusion of <debug.h> to individual files and consolidate the inclusion...
[reactos.git] / reactos / subsys / win32k / eng / mem.c
1 /*
2 * ReactOS W32 Subsystem
3 * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 ReactOS Team
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18 */
19 /* $Id$
20 *
21 * COPYRIGHT: See COPYING in the top level directory
22 * PROJECT: ReactOS kernel
23 * PURPOSE: GDI Driver Memory Management Functions
24 * FILE: subsys/win32k/eng/mem.c
25 * PROGRAMER: Jason Filby
26 * REVISION HISTORY:
27 * 3/7/1999: Created
28 */
29
30 #include <w32k.h>
31
32 #define NDEBUG
33 #include <debug.h>
34
35 typedef struct _USERMEMHEADER
36 {
37 ULONG Tag;
38 ULONG MemSize;
39 }
40 USERMEMHEADER, *PUSERMEMHEADER;
41
42 /*
43 * @implemented
44 */
45 PVOID STDCALL
46 EngAllocMem(ULONG Flags,
47 ULONG MemSize,
48 ULONG Tag)
49 {
50 PVOID newMem;
51
52 newMem = ExAllocatePoolWithTag(PagedPool, MemSize, Tag);
53
54 if (Flags == FL_ZERO_MEMORY && NULL != newMem)
55 {
56 RtlZeroMemory(newMem, MemSize);
57 }
58
59 return newMem;
60 }
61
62 /*
63 * @implemented
64 */
65 VOID STDCALL
66 EngFreeMem(PVOID Mem)
67 {
68 ExFreePool(Mem);
69 }
70
71 /*
72 * @implemented
73 */
74 PVOID STDCALL
75 EngAllocUserMem(ULONG cj, ULONG Tag)
76 {
77 PVOID NewMem = NULL;
78 NTSTATUS Status;
79 ULONG MemSize = sizeof(USERMEMHEADER) + cj;
80 PUSERMEMHEADER Header;
81
82 Status = ZwAllocateVirtualMemory(NtCurrentProcess(), &NewMem, 0, &MemSize, MEM_COMMIT, PAGE_READWRITE);
83
84 if (! NT_SUCCESS(Status))
85 {
86 return NULL;
87 }
88
89 Header = (PUSERMEMHEADER) NewMem;
90 Header->Tag = Tag;
91 Header->MemSize = cj;
92
93 return (PVOID)(Header + 1);
94 }
95
96 /*
97 * @implemented
98 */
99 VOID STDCALL
100 EngFreeUserMem(PVOID pv)
101 {
102 PUSERMEMHEADER Header = ((PUSERMEMHEADER) pv) - 1;
103 ULONG MemSize = sizeof(USERMEMHEADER) + Header->MemSize;
104
105 ZwFreeVirtualMemory(NtCurrentProcess(), (PVOID *) &Header, &MemSize, MEM_DECOMMIT);
106 }
107
108 /*
109 * @implemented
110 */
111 HANDLE STDCALL
112 EngSecureMem(PVOID Address, ULONG Length)
113 {
114 return MmSecureVirtualMemory(Address, Length, PAGE_READWRITE);
115 }
116
117 /*
118 * @implemented
119 */
120 VOID STDCALL
121 EngUnsecureMem(HANDLE Mem)
122 {
123 return MmUnsecureVirtualMemory((PVOID) Mem);
124 }
125
126 /* EOF */