3 Copyright (c) Alex Ionescu. All rights reserved.
11 Functions definitions for the Memory Manager.
15 Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
28 #ifndef NTOS_MODE_USER
36 _Out_ PVOID
*SectionObject
,
37 _In_ ACCESS_MASK DesiredAccess
,
38 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
39 _In_ PLARGE_INTEGER MaximumSize
,
40 _In_ ULONG SectionPageProtection
,
41 _In_ ULONG AllocationAttributes
,
42 _In_opt_ HANDLE FileHandle
,
43 _In_opt_ PFILE_OBJECT File
49 _In_ PVOID SectionObject
,
50 _In_ PEPROCESS Process
,
51 _Inout_ PVOID
*BaseAddress
,
52 _In_ ULONG_PTR ZeroBits
,
53 _In_ SIZE_T CommitSize
,
54 _Inout_opt_ PLARGE_INTEGER SectionOffset
,
55 _Inout_ PSIZE_T ViewSize
,
56 _In_ SECTION_INHERIT InheritDisposition
,
57 _In_ ULONG AllocationType
,
64 _In_
struct _EPROCESS
* Process
,
65 _In_ PVOID BaseAddress
76 NtAreMappedFilesTheSame(
77 _In_ PVOID File1MappedAsAnImage
,
78 _In_ PVOID File2MappedAsFile
83 NtAllocateUserPhysicalPages(
84 _In_ HANDLE ProcessHandle
,
85 _Inout_ PULONG_PTR NumberOfPages
,
86 _Inout_ PULONG_PTR UserPfnArray
90 _At_(*BaseAddress
, __drv_allocatesMem(Mem
))
95 NtAllocateVirtualMemory(
96 _In_ HANDLE ProcessHandle
,
97 _Inout_
_Outptr_result_buffer_(*RegionSize
) PVOID
*BaseAddress
,
98 _In_ ULONG_PTR ZeroBits
,
99 _Inout_ PSIZE_T RegionSize
,
100 _In_ ULONG AllocationType
,
108 _In_ PUNICODE_STRING FileName
,
109 _In_ PLARGE_INTEGER InitialSize
,
110 _In_ PLARGE_INTEGER MaxiumSize
,
114 _Must_inspect_result_
120 _Out_ PHANDLE SectionHandle
,
121 _In_ ACCESS_MASK DesiredAccess
,
122 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
123 _In_opt_ PLARGE_INTEGER MaximumSize
,
124 _In_ ULONG SectionPageProtection
,
125 _In_ ULONG AllocationAttributes
,
126 _In_opt_ HANDLE FileHandle
133 _In_ HANDLE SectionHandle
,
134 _In_ PLARGE_INTEGER NewMaximumSize
140 NtFlushVirtualMemory(
141 _In_ HANDLE ProcessHandle
,
142 _Inout_ PVOID
*BaseAddress
,
143 _Inout_ PSIZE_T RegionSize
,
144 _Out_ PIO_STATUS_BLOCK IoStatus
149 NtFreeUserPhysicalPages(
150 _In_ HANDLE ProcessHandle
,
151 _Inout_ PULONG_PTR NumberOfPages
,
152 _Inout_ PULONG_PTR UserPfnArray
156 _IRQL_requires_max_(PASSIVE_LEVEL
)
161 _In_ HANDLE ProcessHandle
,
162 _Inout_
__drv_freesMem(Mem
) PVOID
*BaseAddress
,
163 _Inout_ PSIZE_T RegionSize
,
170 _In_ HANDLE ProcessHandle
,
172 _In_ PVOID BaseAddress
,
173 _In_ SIZE_T RegionSize
,
174 _In_ PVOID
*UserAddressArray
,
175 _Out_ PULONG_PTR EntriesInUserAddressArray
,
176 _Out_ PULONG Granularity
183 _In_ HANDLE ProcessHandle
,
184 _Inout_ PVOID
*BaseAddress
,
185 _Inout_ PSIZE_T NumberOfBytesToLock
,
191 NtMapUserPhysicalPages(
192 _In_ PVOID VirtualAddresses
,
193 _In_ ULONG_PTR NumberOfPages
,
194 _Inout_ PULONG_PTR UserPfnArray
199 NtMapUserPhysicalPagesScatter(
200 _In_ PVOID
*VirtualAddresses
,
201 _In_ ULONG_PTR NumberOfPages
,
202 _Inout_ PULONG_PTR UserPfnArray
209 _In_ HANDLE SectionHandle
,
210 _In_ HANDLE ProcessHandle
,
211 _Inout_ PVOID
*BaseAddress
,
212 _In_ ULONG_PTR ZeroBits
,
213 _In_ SIZE_T CommitSize
,
214 _Inout_opt_ PLARGE_INTEGER SectionOffset
,
215 _Inout_ PSIZE_T ViewSize
,
216 _In_ SECTION_INHERIT InheritDisposition
,
217 _In_ ULONG AllocationType
,
218 _In_ ULONG AccessProtection
225 _Out_ PHANDLE SectionHandle
,
226 _In_ ACCESS_MASK DesiredAccess
,
227 _In_ POBJECT_ATTRIBUTES ObjectAttributes
233 NtProtectVirtualMemory(
234 _In_ HANDLE ProcessHandle
,
235 _In_ PVOID
*BaseAddress
,
236 _In_ SIZE_T
*NumberOfBytesToProtect
,
237 _In_ ULONG NewAccessProtection
,
238 _Out_ PULONG OldAccessProtection
245 _In_ HANDLE SectionHandle
,
246 _In_ SECTION_INFORMATION_CLASS SectionInformationClass
,
247 _Out_ PVOID SectionInformation
,
249 _Out_ PSIZE_T ResultLength
255 NtQueryVirtualMemory(
256 _In_ HANDLE ProcessHandle
,
258 _In_ MEMORY_INFORMATION_CLASS VirtualMemoryInformationClass
,
259 _Out_ PVOID VirtualMemoryInformation
,
261 _Out_opt_ PSIZE_T ResultLength
268 _In_ HANDLE ProcessHandle
,
269 _In_ PVOID BaseAddress
,
271 _In_ SIZE_T NumberOfBytesToRead
,
272 _Out_opt_ PSIZE_T NumberOfBytesRead
278 _In_ HANDLE ProcessHandle
,
279 _In_ PVOID BaseAddress
,
280 _In_ SIZE_T RegionSize
286 NtUnlockVirtualMemory(
287 _In_ HANDLE ProcessHandle
,
288 _Inout_ PVOID
*BaseAddress
,
289 _Inout_ PSIZE_T NumberOfBytesToUnlock
,
296 NtUnmapViewOfSection(
297 _In_ HANDLE ProcessHandle
,
298 _In_ PVOID BaseAddress
304 NtWriteVirtualMemory(
305 _In_ HANDLE ProcessHandle
,
306 _In_ PVOID BaseAddress
,
308 _In_ SIZE_T NumberOfBytesToWrite
,
309 _Out_opt_ PSIZE_T NumberOfBytesWritten
315 ZwAreMappedFilesTheSame(
316 _In_ PVOID File1MappedAsAnImage
,
317 _In_ PVOID File2MappedAsFile
320 _Must_inspect_result_
321 _At_(*BaseAddress
, __drv_allocatesMem(Mem
))
326 ZwAllocateVirtualMemory(
327 _In_ HANDLE ProcessHandle
,
328 _Inout_
_Outptr_result_buffer_(*RegionSize
) PVOID
*BaseAddress
,
329 _In_ ULONG_PTR ZeroBits
,
330 _Inout_ PSIZE_T RegionSize
,
331 _In_ ULONG AllocationType
,
339 _In_ PUNICODE_STRING FileName
,
340 _In_ PLARGE_INTEGER InitialSize
,
341 _In_ PLARGE_INTEGER MaxiumSize
,
345 _IRQL_requires_max_(APC_LEVEL
)
350 _Out_ PHANDLE SectionHandle
,
351 _In_ ACCESS_MASK DesiredAccess
,
352 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
353 _In_opt_ PLARGE_INTEGER MaximumSize
,
354 _In_ ULONG SectionPageProtection
,
355 _In_ ULONG AllocationAttributes
,
356 _In_opt_ HANDLE FileHandle
363 _In_ HANDLE SectionHandle
,
364 _In_ PLARGE_INTEGER NewMaximumSize
367 _IRQL_requires_max_(PASSIVE_LEVEL
)
372 _In_ HANDLE ProcessHandle
,
373 _Inout_
__drv_freesMem(Mem
) PVOID
*BaseAddress
,
374 _Inout_ PSIZE_T RegionSize
,
382 _In_ HANDLE ProcessHandle
,
383 _Inout_ PVOID
*BaseAddress
,
384 _Inout_ PSIZE_T NumberOfBytesToLock
,
388 _IRQL_requires_max_(PASSIVE_LEVEL
)
393 _In_ HANDLE SectionHandle
,
394 _In_ HANDLE ProcessHandle
,
395 _Outptr_result_bytebuffer_(*ViewSize
) PVOID
*BaseAddress
,
396 _In_ ULONG_PTR ZeroBits
,
397 _In_ SIZE_T CommitSize
,
398 _Inout_opt_ PLARGE_INTEGER SectionOffset
,
399 _Inout_ PSIZE_T ViewSize
,
400 _In_ SECTION_INHERIT InheritDisposition
,
401 _In_ ULONG AllocationType
,
402 _In_ ULONG Win32Protect
409 _Out_ PHANDLE SectionHandle
,
410 _In_ ACCESS_MASK DesiredAccess
,
411 _In_ POBJECT_ATTRIBUTES ObjectAttributes
417 ZwProtectVirtualMemory(
418 _In_ HANDLE ProcessHandle
,
419 _In_ PVOID
*BaseAddress
,
420 _In_ SIZE_T
*NumberOfBytesToProtect
,
421 _In_ ULONG NewAccessProtection
,
422 _Out_ PULONG OldAccessProtection
429 _In_ HANDLE SectionHandle
,
430 _In_ SECTION_INFORMATION_CLASS SectionInformationClass
,
431 _Out_ PVOID SectionInformation
,
433 _Out_opt_ PSIZE_T ResultLength
439 ZwQueryVirtualMemory(
440 _In_ HANDLE ProcessHandle
,
442 _In_ MEMORY_INFORMATION_CLASS VirtualMemoryInformationClass
,
443 _Out_ PVOID VirtualMemoryInformation
,
445 _Out_opt_ PSIZE_T ResultLength
452 _In_ HANDLE ProcessHandle
,
453 _In_ PVOID BaseAddress
,
455 _In_ SIZE_T NumberOfBytesToRead
,
456 _Out_opt_ PSIZE_T NumberOfBytesRead
462 ZwUnlockVirtualMemory(
463 _In_ HANDLE ProcessHandle
,
464 _Inout_ PVOID
*BaseAddress
,
465 _Inout_ PSIZE_T NumberOfBytesToUnlock
,
469 _IRQL_requires_max_(PASSIVE_LEVEL
)
473 ZwUnmapViewOfSection(
474 _In_ HANDLE ProcessHandle
,
475 _In_opt_ PVOID BaseAddress
481 ZwWriteVirtualMemory(
482 _In_ HANDLE ProcessHandle
,
483 _In_ PVOID BaseAddress
,
485 _In_ SIZE_T NumberOfBytesToWrite
,
486 _Out_opt_ PSIZE_T NumberOfBytesWritten