[BASESRV]
[reactos.git] / include / ndk / mmfuncs.h
1 /*++ NDK Version: 0098
2
3 Copyright (c) Alex Ionescu. All rights reserved.
4
5 Header Name:
6
7 mmfuncs.h
8
9 Abstract:
10
11 Functions definitions for the Memory Manager.
12
13 Author:
14
15 Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
16
17 --*/
18
19 #ifndef _MMFUNCS_H
20 #define _MMFUNCS_H
21
22 //
23 // Dependencies
24 //
25 #include <umtypes.h>
26 #include <mmtypes.h>
27
28 #ifndef NTOS_MODE_USER
29
30 //
31 // Section Functions
32 //
33 NTSTATUS
34 NTAPI
35 MmCreateSection(
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
44 );
45
46 NTSTATUS
47 NTAPI
48 MmMapViewOfSection(
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,
58 _In_ ULONG Protect
59 );
60
61 NTSTATUS
62 NTAPI
63 MmUnmapViewOfSection(
64 _In_ struct _EPROCESS* Process,
65 _In_ PVOID BaseAddress
66 );
67
68 #endif
69
70 //
71 // Native calls
72 //
73 NTSYSCALLAPI
74 NTSTATUS
75 NTAPI
76 NtAreMappedFilesTheSame(
77 _In_ PVOID File1MappedAsAnImage,
78 _In_ PVOID File2MappedAsFile
79 );
80
81 NTSTATUS
82 NTAPI
83 NtAllocateUserPhysicalPages(
84 _In_ HANDLE ProcessHandle,
85 _Inout_ PULONG_PTR NumberOfPages,
86 _Inout_ PULONG_PTR UserPfnArray
87 );
88
89 _Must_inspect_result_
90 _At_(*BaseAddress, __drv_allocatesMem(Mem))
91 __kernel_entry
92 NTSYSCALLAPI
93 NTSTATUS
94 NTAPI
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,
101 _In_ ULONG Protect
102 );
103
104 NTSYSCALLAPI
105 NTSTATUS
106 NTAPI
107 NtCreatePagingFile(
108 _In_ PUNICODE_STRING FileName,
109 _In_ PLARGE_INTEGER InitialSize,
110 _In_ PLARGE_INTEGER MaxiumSize,
111 _In_ ULONG Reserved
112 );
113
114 _Must_inspect_result_
115 __kernel_entry
116 NTSYSCALLAPI
117 NTSTATUS
118 NTAPI
119 NtCreateSection(
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
127 );
128
129 NTSYSCALLAPI
130 NTSTATUS
131 NTAPI
132 NtExtendSection(
133 _In_ HANDLE SectionHandle,
134 _In_ PLARGE_INTEGER NewMaximumSize
135 );
136
137 NTSYSCALLAPI
138 NTSTATUS
139 NTAPI
140 NtFlushVirtualMemory(
141 _In_ HANDLE ProcessHandle,
142 _Inout_ PVOID *BaseAddress,
143 _Inout_ PSIZE_T RegionSize,
144 _Out_ PIO_STATUS_BLOCK IoStatus
145 );
146
147 NTSTATUS
148 NTAPI
149 NtFreeUserPhysicalPages(
150 _In_ HANDLE ProcessHandle,
151 _Inout_ PULONG_PTR NumberOfPages,
152 _Inout_ PULONG_PTR UserPfnArray
153 );
154
155 __kernel_entry
156 _IRQL_requires_max_(PASSIVE_LEVEL)
157 NTSYSCALLAPI
158 NTSTATUS
159 NTAPI
160 NtFreeVirtualMemory(
161 _In_ HANDLE ProcessHandle,
162 _Inout_ __drv_freesMem(Mem) PVOID *BaseAddress,
163 _Inout_ PSIZE_T RegionSize,
164 _In_ ULONG FreeType
165 );
166
167 NTSTATUS
168 NTAPI
169 NtGetWriteWatch(
170 _In_ HANDLE ProcessHandle,
171 _In_ ULONG Flags,
172 _In_ PVOID BaseAddress,
173 _In_ SIZE_T RegionSize,
174 _In_ PVOID *UserAddressArray,
175 _Out_ PULONG_PTR EntriesInUserAddressArray,
176 _Out_ PULONG Granularity
177 );
178
179 NTSYSCALLAPI
180 NTSTATUS
181 NTAPI
182 NtLockVirtualMemory(
183 _In_ HANDLE ProcessHandle,
184 _Inout_ PVOID *BaseAddress,
185 _Inout_ PSIZE_T NumberOfBytesToLock,
186 _In_ ULONG MapType
187 );
188
189 NTSTATUS
190 NTAPI
191 NtMapUserPhysicalPages(
192 _In_ PVOID VirtualAddresses,
193 _In_ ULONG_PTR NumberOfPages,
194 _Inout_ PULONG_PTR UserPfnArray
195 );
196
197 NTSTATUS
198 NTAPI
199 NtMapUserPhysicalPagesScatter(
200 _In_ PVOID *VirtualAddresses,
201 _In_ ULONG_PTR NumberOfPages,
202 _Inout_ PULONG_PTR UserPfnArray
203 );
204
205 NTSYSCALLAPI
206 NTSTATUS
207 NTAPI
208 NtMapViewOfSection(
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
219 );
220
221 NTSYSCALLAPI
222 NTSTATUS
223 NTAPI
224 NtOpenSection(
225 _Out_ PHANDLE SectionHandle,
226 _In_ ACCESS_MASK DesiredAccess,
227 _In_ POBJECT_ATTRIBUTES ObjectAttributes
228 );
229
230 NTSYSCALLAPI
231 NTSTATUS
232 NTAPI
233 NtProtectVirtualMemory(
234 _In_ HANDLE ProcessHandle,
235 _In_ PVOID *BaseAddress,
236 _In_ SIZE_T *NumberOfBytesToProtect,
237 _In_ ULONG NewAccessProtection,
238 _Out_ PULONG OldAccessProtection
239 );
240
241 NTSYSCALLAPI
242 NTSTATUS
243 NTAPI
244 NtQuerySection(
245 _In_ HANDLE SectionHandle,
246 _In_ SECTION_INFORMATION_CLASS SectionInformationClass,
247 _Out_ PVOID SectionInformation,
248 _In_ SIZE_T Length,
249 _Out_ PSIZE_T ResultLength
250 );
251
252 NTSYSCALLAPI
253 NTSTATUS
254 NTAPI
255 NtQueryVirtualMemory(
256 _In_ HANDLE ProcessHandle,
257 _In_ PVOID Address,
258 _In_ MEMORY_INFORMATION_CLASS VirtualMemoryInformationClass,
259 _Out_ PVOID VirtualMemoryInformation,
260 _In_ SIZE_T Length,
261 _Out_opt_ PSIZE_T ResultLength
262 );
263
264 NTSYSCALLAPI
265 NTSTATUS
266 NTAPI
267 NtReadVirtualMemory(
268 _In_ HANDLE ProcessHandle,
269 _In_ PVOID BaseAddress,
270 _Out_ PVOID Buffer,
271 _In_ SIZE_T NumberOfBytesToRead,
272 _Out_opt_ PSIZE_T NumberOfBytesRead
273 );
274
275 NTSTATUS
276 NTAPI
277 NtResetWriteWatch(
278 _In_ HANDLE ProcessHandle,
279 _In_ PVOID BaseAddress,
280 _In_ SIZE_T RegionSize
281 );
282
283 NTSYSCALLAPI
284 NTSTATUS
285 NTAPI
286 NtUnlockVirtualMemory(
287 _In_ HANDLE ProcessHandle,
288 _Inout_ PVOID *BaseAddress,
289 _Inout_ PSIZE_T NumberOfBytesToUnlock,
290 _In_ ULONG MapType
291 );
292
293 NTSYSCALLAPI
294 NTSTATUS
295 NTAPI
296 NtUnmapViewOfSection(
297 _In_ HANDLE ProcessHandle,
298 _In_ PVOID BaseAddress
299 );
300
301 NTSYSCALLAPI
302 NTSTATUS
303 NTAPI
304 NtWriteVirtualMemory(
305 _In_ HANDLE ProcessHandle,
306 _In_ PVOID BaseAddress,
307 _In_ PVOID Buffer,
308 _In_ SIZE_T NumberOfBytesToWrite,
309 _Out_opt_ PSIZE_T NumberOfBytesWritten
310 );
311
312 NTSYSAPI
313 NTSTATUS
314 NTAPI
315 ZwAreMappedFilesTheSame(
316 _In_ PVOID File1MappedAsAnImage,
317 _In_ PVOID File2MappedAsFile
318 );
319
320 _Must_inspect_result_
321 _At_(*BaseAddress, __drv_allocatesMem(Mem))
322 __kernel_entry
323 NTSYSAPI
324 NTSTATUS
325 NTAPI
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,
332 _In_ ULONG Protect
333 );
334
335 NTSYSAPI
336 NTSTATUS
337 NTAPI
338 ZwCreatePagingFile(
339 _In_ PUNICODE_STRING FileName,
340 _In_ PLARGE_INTEGER InitialSize,
341 _In_ PLARGE_INTEGER MaxiumSize,
342 _In_ ULONG Reserved
343 );
344
345 _IRQL_requires_max_(APC_LEVEL)
346 NTSYSAPI
347 NTSTATUS
348 NTAPI
349 ZwCreateSection(
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
357 );
358
359 NTSYSAPI
360 NTSTATUS
361 NTAPI
362 ZwExtendSection(
363 _In_ HANDLE SectionHandle,
364 _In_ PLARGE_INTEGER NewMaximumSize
365 );
366
367 _IRQL_requires_max_(PASSIVE_LEVEL)
368 NTSYSAPI
369 NTSTATUS
370 NTAPI
371 ZwFreeVirtualMemory(
372 _In_ HANDLE ProcessHandle,
373 _Inout_ __drv_freesMem(Mem) PVOID *BaseAddress,
374 _Inout_ PSIZE_T RegionSize,
375 _In_ ULONG FreeType
376 );
377
378 NTSYSAPI
379 NTSTATUS
380 NTAPI
381 ZwLockVirtualMemory(
382 _In_ HANDLE ProcessHandle,
383 _Inout_ PVOID *BaseAddress,
384 _Inout_ PSIZE_T NumberOfBytesToLock,
385 _In_ ULONG MapType
386 );
387
388 _IRQL_requires_max_(PASSIVE_LEVEL)
389 NTSYSAPI
390 NTSTATUS
391 NTAPI
392 ZwMapViewOfSection(
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
403 );
404
405 NTSYSAPI
406 NTSTATUS
407 NTAPI
408 ZwOpenSection(
409 _Out_ PHANDLE SectionHandle,
410 _In_ ACCESS_MASK DesiredAccess,
411 _In_ POBJECT_ATTRIBUTES ObjectAttributes
412 );
413
414 NTSYSAPI
415 NTSTATUS
416 NTAPI
417 ZwProtectVirtualMemory(
418 _In_ HANDLE ProcessHandle,
419 _In_ PVOID *BaseAddress,
420 _In_ SIZE_T *NumberOfBytesToProtect,
421 _In_ ULONG NewAccessProtection,
422 _Out_ PULONG OldAccessProtection
423 );
424
425 NTSYSAPI
426 NTSTATUS
427 NTAPI
428 ZwQuerySection(
429 _In_ HANDLE SectionHandle,
430 _In_ SECTION_INFORMATION_CLASS SectionInformationClass,
431 _Out_ PVOID SectionInformation,
432 _In_ SIZE_T Length,
433 _Out_opt_ PSIZE_T ResultLength
434 );
435
436 NTSYSAPI
437 NTSTATUS
438 NTAPI
439 ZwQueryVirtualMemory(
440 _In_ HANDLE ProcessHandle,
441 _In_ PVOID Address,
442 _In_ MEMORY_INFORMATION_CLASS VirtualMemoryInformationClass,
443 _Out_ PVOID VirtualMemoryInformation,
444 _In_ SIZE_T Length,
445 _Out_opt_ PSIZE_T ResultLength
446 );
447
448 NTSYSAPI
449 NTSTATUS
450 NTAPI
451 ZwReadVirtualMemory(
452 _In_ HANDLE ProcessHandle,
453 _In_ PVOID BaseAddress,
454 _Out_ PVOID Buffer,
455 _In_ SIZE_T NumberOfBytesToRead,
456 _Out_opt_ PSIZE_T NumberOfBytesRead
457 );
458
459 NTSYSAPI
460 NTSTATUS
461 NTAPI
462 ZwUnlockVirtualMemory(
463 _In_ HANDLE ProcessHandle,
464 _Inout_ PVOID *BaseAddress,
465 _Inout_ PSIZE_T NumberOfBytesToUnlock,
466 _In_ ULONG MapType
467 );
468
469 _IRQL_requires_max_(PASSIVE_LEVEL)
470 NTSYSAPI
471 NTSTATUS
472 NTAPI
473 ZwUnmapViewOfSection(
474 _In_ HANDLE ProcessHandle,
475 _In_opt_ PVOID BaseAddress
476 );
477
478 NTSYSAPI
479 NTSTATUS
480 NTAPI
481 ZwWriteVirtualMemory(
482 _In_ HANDLE ProcessHandle,
483 _In_ PVOID BaseAddress,
484 _In_ PVOID Buffer,
485 _In_ SIZE_T NumberOfBytesToWrite,
486 _Out_opt_ PSIZE_T NumberOfBytesWritten
487 );
488
489 #endif