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 NtFlushInstructionCache(
141 _In_ HANDLE ProcessHandle
,
142 _In_ PVOID BaseAddress
,
143 _In_ SIZE_T NumberOfBytesToFlush
149 NtFlushVirtualMemory(
150 _In_ HANDLE ProcessHandle
,
151 _Inout_ PVOID
*BaseAddress
,
152 _Inout_ PSIZE_T RegionSize
,
153 _Out_ PIO_STATUS_BLOCK IoStatus
158 NtFreeUserPhysicalPages(
159 _In_ HANDLE ProcessHandle
,
160 _Inout_ PULONG_PTR NumberOfPages
,
161 _Inout_ PULONG_PTR UserPfnArray
165 _IRQL_requires_max_(PASSIVE_LEVEL
)
170 _In_ HANDLE ProcessHandle
,
171 _Inout_
__drv_freesMem(Mem
) PVOID
*BaseAddress
,
172 _Inout_ PSIZE_T RegionSize
,
179 _In_ HANDLE ProcessHandle
,
181 _In_ PVOID BaseAddress
,
182 _In_ SIZE_T RegionSize
,
183 _In_ PVOID
*UserAddressArray
,
184 _Out_ PULONG_PTR EntriesInUserAddressArray
,
185 _Out_ PULONG Granularity
192 _In_ HANDLE ProcessHandle
,
193 _Inout_ PVOID
*BaseAddress
,
194 _Inout_ PSIZE_T NumberOfBytesToLock
,
200 NtMapUserPhysicalPages(
201 _In_ PVOID VirtualAddresses
,
202 _In_ ULONG_PTR NumberOfPages
,
203 _Inout_ PULONG_PTR UserPfnArray
208 NtMapUserPhysicalPagesScatter(
209 _In_ PVOID
*VirtualAddresses
,
210 _In_ ULONG_PTR NumberOfPages
,
211 _Inout_ PULONG_PTR UserPfnArray
218 _In_ HANDLE SectionHandle
,
219 _In_ HANDLE ProcessHandle
,
220 _Inout_ PVOID
*BaseAddress
,
221 _In_ ULONG_PTR ZeroBits
,
222 _In_ SIZE_T CommitSize
,
223 _Inout_opt_ PLARGE_INTEGER SectionOffset
,
224 _Inout_ PSIZE_T ViewSize
,
225 _In_ SECTION_INHERIT InheritDisposition
,
226 _In_ ULONG AllocationType
,
227 _In_ ULONG AccessProtection
234 _Out_ PHANDLE SectionHandle
,
235 _In_ ACCESS_MASK DesiredAccess
,
236 _In_ POBJECT_ATTRIBUTES ObjectAttributes
242 NtProtectVirtualMemory(
243 _In_ HANDLE ProcessHandle
,
244 _In_ PVOID
*BaseAddress
,
245 _In_ SIZE_T
*NumberOfBytesToProtect
,
246 _In_ ULONG NewAccessProtection
,
247 _Out_ PULONG OldAccessProtection
254 _In_ HANDLE SectionHandle
,
255 _In_ SECTION_INFORMATION_CLASS SectionInformationClass
,
256 _Out_ PVOID SectionInformation
,
258 _Out_ PSIZE_T ResultLength
264 NtQueryVirtualMemory(
265 _In_ HANDLE ProcessHandle
,
267 _In_ MEMORY_INFORMATION_CLASS VirtualMemoryInformationClass
,
268 _Out_ PVOID VirtualMemoryInformation
,
270 _Out_opt_ PSIZE_T ResultLength
277 _In_ HANDLE ProcessHandle
,
278 _In_ PVOID BaseAddress
,
280 _In_ SIZE_T NumberOfBytesToRead
,
281 _Out_opt_ PSIZE_T NumberOfBytesRead
287 _In_ HANDLE ProcessHandle
,
288 _In_ PVOID BaseAddress
,
289 _In_ SIZE_T RegionSize
295 NtUnlockVirtualMemory(
296 _In_ HANDLE ProcessHandle
,
297 _Inout_ PVOID
*BaseAddress
,
298 _Inout_ PSIZE_T NumberOfBytesToUnlock
,
305 NtUnmapViewOfSection(
306 _In_ HANDLE ProcessHandle
,
307 _In_ PVOID BaseAddress
313 NtWriteVirtualMemory(
314 _In_ HANDLE ProcessHandle
,
315 _In_ PVOID BaseAddress
,
317 _In_ SIZE_T NumberOfBytesToWrite
,
318 _Out_opt_ PSIZE_T NumberOfBytesWritten
324 ZwAreMappedFilesTheSame(
325 _In_ PVOID File1MappedAsAnImage
,
326 _In_ PVOID File2MappedAsFile
329 _Must_inspect_result_
330 _At_(*BaseAddress
, __drv_allocatesMem(Mem
))
335 ZwAllocateVirtualMemory(
336 _In_ HANDLE ProcessHandle
,
337 _Inout_
_Outptr_result_buffer_(*RegionSize
) PVOID
*BaseAddress
,
338 _In_ ULONG_PTR ZeroBits
,
339 _Inout_ PSIZE_T RegionSize
,
340 _In_ ULONG AllocationType
,
348 _In_ PUNICODE_STRING FileName
,
349 _In_ PLARGE_INTEGER InitialSize
,
350 _In_ PLARGE_INTEGER MaxiumSize
,
354 _IRQL_requires_max_(APC_LEVEL
)
359 _Out_ PHANDLE SectionHandle
,
360 _In_ ACCESS_MASK DesiredAccess
,
361 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
362 _In_opt_ PLARGE_INTEGER MaximumSize
,
363 _In_ ULONG SectionPageProtection
,
364 _In_ ULONG AllocationAttributes
,
365 _In_opt_ HANDLE FileHandle
372 _In_ HANDLE SectionHandle
,
373 _In_ PLARGE_INTEGER NewMaximumSize
376 _IRQL_requires_max_(PASSIVE_LEVEL
)
381 _In_ HANDLE ProcessHandle
,
382 _Inout_
__drv_freesMem(Mem
) PVOID
*BaseAddress
,
383 _Inout_ PSIZE_T RegionSize
,
391 _In_ HANDLE ProcessHandle
,
392 _Inout_ PVOID
*BaseAddress
,
393 _Inout_ PSIZE_T NumberOfBytesToLock
,
397 _IRQL_requires_max_(PASSIVE_LEVEL
)
402 _In_ HANDLE SectionHandle
,
403 _In_ HANDLE ProcessHandle
,
404 _Outptr_result_bytebuffer_(*ViewSize
) PVOID
*BaseAddress
,
405 _In_ ULONG_PTR ZeroBits
,
406 _In_ SIZE_T CommitSize
,
407 _Inout_opt_ PLARGE_INTEGER SectionOffset
,
408 _Inout_ PSIZE_T ViewSize
,
409 _In_ SECTION_INHERIT InheritDisposition
,
410 _In_ ULONG AllocationType
,
411 _In_ ULONG Win32Protect
418 _Out_ PHANDLE SectionHandle
,
419 _In_ ACCESS_MASK DesiredAccess
,
420 _In_ POBJECT_ATTRIBUTES ObjectAttributes
426 ZwProtectVirtualMemory(
427 _In_ HANDLE ProcessHandle
,
428 _In_ PVOID
*BaseAddress
,
429 _In_ SIZE_T
*NumberOfBytesToProtect
,
430 _In_ ULONG NewAccessProtection
,
431 _Out_ PULONG OldAccessProtection
438 _In_ HANDLE SectionHandle
,
439 _In_ SECTION_INFORMATION_CLASS SectionInformationClass
,
440 _Out_ PVOID SectionInformation
,
442 _Out_opt_ PSIZE_T ResultLength
448 ZwQueryVirtualMemory(
449 _In_ HANDLE ProcessHandle
,
451 _In_ MEMORY_INFORMATION_CLASS VirtualMemoryInformationClass
,
452 _Out_ PVOID VirtualMemoryInformation
,
454 _Out_opt_ PSIZE_T ResultLength
461 _In_ HANDLE ProcessHandle
,
462 _In_ PVOID BaseAddress
,
464 _In_ SIZE_T NumberOfBytesToRead
,
465 _Out_opt_ PSIZE_T NumberOfBytesRead
471 ZwUnlockVirtualMemory(
472 _In_ HANDLE ProcessHandle
,
473 _Inout_ PVOID
*BaseAddress
,
474 _Inout_ PSIZE_T NumberOfBytesToUnlock
,
478 _IRQL_requires_max_(PASSIVE_LEVEL
)
482 ZwUnmapViewOfSection(
483 _In_ HANDLE ProcessHandle
,
484 _In_opt_ PVOID BaseAddress
490 ZwWriteVirtualMemory(
491 _In_ HANDLE ProcessHandle
,
492 _In_ PVOID BaseAddress
,
494 _In_ SIZE_T NumberOfBytesToWrite
,
495 _Out_opt_ PSIZE_T NumberOfBytesWritten