2 * PROJECT: ReactOS Win32 Base API
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: dll/win32/kernel32/mem/virtual.c
5 * PURPOSE: Handles virtual memory APIs
6 * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org)
9 /* INCLUDES ******************************************************************/
16 /* FUNCTIONS *****************************************************************/
23 VirtualAllocEx(IN HANDLE hProcess
,
26 IN DWORD flAllocationType
,
31 if (lpAddress
!= NULL
)
33 SetLastErrorByStatus(STATUS_INVALID_PARAMETER
);
37 /* Allocate the memory */
38 Status
= NtAllocateVirtualMemory(hProcess
,
44 if (!NT_SUCCESS(Status
))
47 SetLastErrorByStatus(Status
);
51 /* Return the allocated address */
60 VirtualAlloc(IN LPVOID lpAddress
,
62 IN DWORD flAllocationType
,
65 /* Call the extended API */
66 return VirtualAllocEx(GetCurrentProcess(),
78 VirtualFreeEx(IN HANDLE hProcess
,
85 if (dwSize
== 0 || !(dwFreeType
& MEM_RELEASE
))
88 Status
= NtFreeVirtualMemory(hProcess
,
92 if (!NT_SUCCESS(Status
))
95 SetLastErrorByStatus(Status
);
103 SetLastErrorByStatus(STATUS_INVALID_PARAMETER
);
112 VirtualFree(IN LPVOID lpAddress
,
116 /* Call the extended API */
117 return VirtualFreeEx(GetCurrentProcess(),
128 VirtualProtect(IN LPVOID lpAddress
,
130 IN DWORD flNewProtect
,
131 OUT PDWORD lpflOldProtect
)
133 /* Call the extended API */
134 return VirtualProtectEx(GetCurrentProcess(),
146 VirtualProtectEx(IN HANDLE hProcess
,
149 IN DWORD flNewProtect
,
150 OUT PDWORD lpflOldProtect
)
154 /* Change the protection */
155 Status
= NtProtectVirtualMemory(hProcess
,
159 (PULONG
)lpflOldProtect
);
160 if (!NT_SUCCESS(Status
))
163 SetLastErrorByStatus(Status
);
176 VirtualLock(IN LPVOID lpAddress
,
182 /* Lock the memory */
183 Status
= NtLockVirtualMemory(NtCurrentProcess(),
187 if (!NT_SUCCESS(Status
))
190 SetLastErrorByStatus(Status
);
203 VirtualQuery(IN LPCVOID lpAddress
,
204 OUT PMEMORY_BASIC_INFORMATION lpBuffer
,
207 /* Call the extended API */
208 return VirtualQueryEx(NtCurrentProcess(),
219 VirtualQueryEx(IN HANDLE hProcess
,
220 IN LPCVOID lpAddress
,
221 OUT PMEMORY_BASIC_INFORMATION lpBuffer
,
227 /* Query basic information */
228 Status
= NtQueryVirtualMemory(hProcess
,
230 MemoryBasicInformation
,
234 if (!NT_SUCCESS(Status
))
237 SetLastErrorByStatus(Status
);
241 /* Return the length returned */
250 VirtualUnlock(IN LPVOID lpAddress
,
256 /* Unlock the memory */
257 Status
= NtUnlockVirtualMemory(NtCurrentProcess(),
261 if (!NT_SUCCESS(Status
))
264 SetLastErrorByStatus(Status
);
282 PULONG_PTR lpdwCount
,
283 PULONG lpdwGranularity
288 Status
= NtGetWriteWatch(GetCurrentProcess(),
296 if (!NT_SUCCESS(Status
))
298 SetLastError(RtlNtStatusToDosError(Status
));