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 /* Allocate the memory */
32 Status
= NtAllocateVirtualMemory(hProcess
,
38 if (!NT_SUCCESS(Status
))
41 SetLastErrorByStatus(Status
);
45 /* Return the allocated address */
54 VirtualAlloc(IN LPVOID lpAddress
,
56 IN DWORD flAllocationType
,
59 /* Call the extended API */
60 return VirtualAllocEx(GetCurrentProcess(),
72 VirtualFreeEx(IN HANDLE hProcess
,
79 if (dwSize
== 0 || !(dwFreeType
& MEM_RELEASE
))
82 Status
= NtFreeVirtualMemory(hProcess
,
86 if (!NT_SUCCESS(Status
))
89 SetLastErrorByStatus(Status
);
97 SetLastErrorByStatus(STATUS_INVALID_PARAMETER
);
106 VirtualFree(IN LPVOID lpAddress
,
110 /* Call the extended API */
111 return VirtualFreeEx(GetCurrentProcess(),
122 VirtualProtect(IN LPVOID lpAddress
,
124 IN DWORD flNewProtect
,
125 OUT PDWORD lpflOldProtect
)
127 /* Call the extended API */
128 return VirtualProtectEx(GetCurrentProcess(),
140 VirtualProtectEx(IN HANDLE hProcess
,
143 IN DWORD flNewProtect
,
144 OUT PDWORD lpflOldProtect
)
148 /* Change the protection */
149 Status
= NtProtectVirtualMemory(hProcess
,
153 (PULONG
)lpflOldProtect
);
154 if (!NT_SUCCESS(Status
))
157 SetLastErrorByStatus(Status
);
170 VirtualLock(IN LPVOID lpAddress
,
176 /* Lock the memory */
177 Status
= NtLockVirtualMemory(NtCurrentProcess(),
181 if (!NT_SUCCESS(Status
))
184 SetLastErrorByStatus(Status
);
197 VirtualQuery(IN LPCVOID lpAddress
,
198 OUT PMEMORY_BASIC_INFORMATION lpBuffer
,
201 /* Call the extended API */
202 return VirtualQueryEx(NtCurrentProcess(),
213 VirtualQueryEx(IN HANDLE hProcess
,
214 IN LPCVOID lpAddress
,
215 OUT PMEMORY_BASIC_INFORMATION lpBuffer
,
221 /* Query basic information */
222 Status
= NtQueryVirtualMemory(hProcess
,
224 MemoryBasicInformation
,
228 if (!NT_SUCCESS(Status
))
231 SetLastErrorByStatus(Status
);
235 /* Return the length returned */
244 VirtualUnlock(IN LPVOID lpAddress
,
250 /* Unlock the memory */
251 Status
= NtUnlockVirtualMemory(NtCurrentProcess(),
255 if (!NT_SUCCESS(Status
))
258 SetLastErrorByStatus(Status
);
276 PULONG_PTR lpdwCount
,
277 PULONG lpdwGranularity
282 Status
= NtGetWriteWatch(GetCurrentProcess(),
290 if (!NT_SUCCESS(Status
))
292 SetLastError(RtlNtStatusToDosError(Status
));