15#define MODULE_INVOLVED_IN_ARM3
18#define MI_MAPPED_COPY_PAGES 14
19#define MI_POOL_COPY_BYTES 512
20#define MI_MAX_TRANSFER_SIZE 64 * 1024
47 PMMPTE PointerPte, LastPte;
50#if _MI_PAGING_LEVELS >= 3
53#if _MI_PAGING_LEVELS == 4
61 ASSERT(EndingAddress >= StartingAddress);
72 while (PointerPte <= LastPte)
74#if _MI_PAGING_LEVELS == 4
84 if (PointerPxe->
u.
Long == 0)
97#if _MI_PAGING_LEVELS >= 3
106 if (PointerPpe->
u.
Long == 0)
110#if _MI_PAGING_LEVELS == 4
126 if (PointerPde->
u.
Long == 0)
130#if _MI_PAGING_LEVELS >= 3
132#if _MI_PAGING_LEVELS == 4
145 if (PointerPte->
u.
Long != 0)
154 if (Vad->u.VadFlags.MemCommit)
157 else if (!Vad->u.VadFlags.MemCommit)
168#if _MI_PAGING_LEVELS >= 3
170#if _MI_PAGING_LEVELS == 4
178 return CommittedPages;
294 if (PointerPte->u.Long)
297 if (PointerPte->u.Hard.Valid)
307 if (ValidPages) (*ValidPages)++;
332 ASSERT(PointerPte->u.Soft.Prototype == 0);
333 ASSERT(PointerPte->u.Soft.Transition == 0);
342 ASSERT(PointerPte->u.Soft.PageFileHigh == 0);
404 DPRINT(
"Pte %p is transitional!\n", PointerPte);
425 if (Pfn1->
u3.
e2.ReferenceCount == 0)
432 Pfn1->
u3.
e2.ReferenceCount++;
452#if (_MI_PAGING_LEVELS == 2)
464#if (_MI_PAGING_LEVELS == 2)
536#if (_MI_PAGING_LEVELS >= 3)
539#if (_MI_PAGING_LEVELS >= 4)
549 if ((Vad) && (Vad->u.VadFlags.Spare == 1))
return;
555 if (!(Vad) || (Vad->u.VadFlags.PrivateMemory) || !(Vad->FirstPrototypePte))
564 LastPrototypePte = Vad->FirstPrototypePte + 1;
571 while (Va <= EndingAddress)
573#if (_MI_PAGING_LEVELS >= 4)
579 if (!PointerPxe->
u.
Long)
593#if (_MI_PAGING_LEVELS >= 3)
599 if (!PointerPpe->
u.
Long)
615 if (!PointerPde->
u.
Long)
635 ASSERT(Va <= EndingAddress);
638 if ((AddressGap) && (LastPrototypePte))
673 if ((LastPrototypePte) && (
PrototypePte > LastPrototypePte))
694 (
TempPte.u.Soft.Prototype == 1))
734 }
while ((Va & (
PDE_MAPPED_VA - 1)) && (Va <= EndingAddress));
739 if (Va > EndingAddress)
return;
757 *HaveBadAddress =
FALSE;
779 *HaveBadAddress =
TRUE;
802 SIZE_T TotalSize, CurrentSize, RemainingSize;
818 CurrentSize = TotalSize;
824 while (RemainingSize > 0)
829 if (RemainingSize < CurrentSize) CurrentSize = RemainingSize;
856 FailedInProbe =
TRUE;
866 FailedInProbe =
FALSE;
920 FailedInProbe =
TRUE;
930 FailedInProbe =
FALSE;
936 RtlCopyMemory(CurrentTargetAddress, MdlAddress, CurrentSize);
996 RemainingSize -= CurrentSize;
997 CurrentAddress = (
PVOID)((
ULONG_PTR)CurrentAddress + CurrentSize);
998 CurrentTargetAddress = (
PVOID)((
ULONG_PTR)CurrentTargetAddress + CurrentSize);
1002 if (MdlAddress !=
NULL)
1026 SIZE_T TotalSize, CurrentSize, RemainingSize;
1036 DPRINT(
"Copying %Iu bytes from process %p (address %p) to process %p (Address %p)\n",
1044 CurrentSize = TotalSize;
1055 PoolAddress = (
PVOID)StackBuffer;
1064 HavePoolAddress =
TRUE;
1070 while (RemainingSize > 0)
1075 if (RemainingSize < CurrentSize) CurrentSize = RemainingSize;
1099 FailedInProbe =
TRUE;
1109 FailedInProbe =
FALSE;
1175 FailedInProbe =
TRUE;
1185 FailedInProbe =
FALSE;
1191 RtlCopyMemory(CurrentTargetAddress, PoolAddress, CurrentSize);
1245 RemainingSize -= CurrentSize;
1246 CurrentAddress = (
PVOID)((
ULONG_PTR)CurrentAddress + CurrentSize);
1255 if (HavePoolAddress)
1372 (
TempPte.u.Soft.Prototype == 1))
1475 PMMPTE PointerPte, ProtoPte;
1477#if (_MI_PAGING_LEVELS >= 3)
1480#if (_MI_PAGING_LEVELS >= 4)
1495#if (_MI_PAGING_LEVELS >= 3)
1498#if (_MI_PAGING_LEVELS >= 4)
1507#if (_MI_PAGING_LEVELS >= 4)
1509 if (PointerPxe->
u.
Long == 0)
1523#if (_MI_PAGING_LEVELS >= 3)
1525 if (PointerPpe->
u.
Long == 0)
1541 if (PointerPde->
u.
Long == 0)
1576 ((
TempPte.u.Soft.Prototype == 0) ||
1598 (
TempPte.u.Soft.Prototype == 1) &&
1599 (Vad->u.VadFlags.PrivateMemory == 0) &&
1617 if ((Vad->u.VadFlags.PrivateMemory == 0) && (Vad->ControlArea))
1630 TempProtoPte = *ProtoPte;
1631 if (TempProtoPte.
u.
Long)
1642 else if (Vad->u.VadFlags.MemCommit)
1740 (
PVOID*)&TargetProcess,
1764 DPRINT1(
"Process is dying\n");
1787 if (BaseVpn < Vad->StartingVpn)
1861 MemoryInfo.
Type = 0;
1911 DPRINT1(
"MmQuerySectionView failed. MemoryArea=%p (%p-%p), BaseAddress=%p\n",
1989 DPRINT(
"Base: %p AllocBase: %p AllocProtect: %lx Protect: %lx "
1990 "State: %lx Type: %lx Size: %lx\n",
2005 PMMPTE PointerPte, LastPte;
2008#if _MI_PAGING_LEVELS >= 3
2011#if _MI_PAGING_LEVELS == 4
2027 while (PointerPte <= LastPte)
2029#if _MI_PAGING_LEVELS == 4
2039 if (PointerPxe->
u.
Long != 0)
2048 if (!Vad->u.VadFlags.MemCommit)
return FALSE;
2057#if _MI_PAGING_LEVELS >= 3
2066 if (PointerPpe->
u.
Long != 0)
2075 if (!Vad->u.VadFlags.MemCommit)
return FALSE;
2079#if _MI_PAGING_LEVELS == 4
2091 if (PointerPde->
u.
Long != 0)
2103 if (!Vad->u.VadFlags.MemCommit)
return FALSE;
2108#if _MI_PAGING_LEVELS >= 3
2110#if _MI_PAGING_LEVELS == 4
2121 if (PointerPte->
u.
Long == 0)
2124 if (!Vad->u.VadFlags.MemCommit)
return FALSE;
2142#if _MI_PAGING_LEVELS >= 3
2144#if _MI_PAGING_LEVELS == 4
2164 ULONG OldAccessProtection_;
2179 if (OldAccessProtection ==
NULL) OldAccessProtection = &OldAccessProtection_;
2185 *NumberOfBytesToProtect,
2186 NewAccessProtection,
2187 OldAccessProtection);
2205 ULONG_PTR StartingAddress, EndingAddress;
2206 PMMPTE PointerPte, LastPte;
2210 ULONG ProtectionMask, OldProtect;
2227 DPRINT1(
"Invalid protection mask\n");
2236 DPRINT1(
"Process is dying\n");
2249 NumberOfBytesToProtect,
2250 NewAccessProtection,
2251 OldAccessProtection);
2259 if (
Result != TableFoundNode)
2261 DPRINT(
"Could not find a VAD for this allocation\n");
2279 DPRINT1(
"Illegal VAD for attempting to set protection\n");
2287 DPRINT1(
"Trying to change protection of a NoChange VAD\n");
2298 DPRINT1(
"Illegal VAD for attempting to set protection\n");
2306 DPRINT1(
"Illegal VAD for attempting to set protection\n");
2315 DPRINT1(
"Invalid protection flags for section\n");
2324 DPRINT1(
"Fixme: Not checking for valid protection\n");
2328 DPRINT1(
"Section protection not yet supported\n");
2337 DPRINT1(
"Invalid protection flags for private memory\n");
2353 DPRINT1(
"The entire range is not committed\n");
2368 if (PointerPte->
u.
Long != 0)
2381 while (PointerPte <= LastPte)
2391 PteContents = *PointerPte;
2392 if (PteContents.
u.
Long == 0)
2466 *NumberOfBytesToProtect = EndingAddress - StartingAddress + 1;
2468 *OldAccessProtection = OldProtect;
2484#if _MI_PAGING_LEVELS >= 3
2486#if _MI_PAGING_LEVELS == 4
2508 (PointerPde->u.Hard.Valid))
2527#if _MI_PAGING_LEVELS == 4
2538#if _MI_PAGING_LEVELS >= 3
2560 ASSERT(PointerPde->u.Hard.Valid == 1);
2568 !PointerPde->u.Hard.Valid);
2632 ULONG CommitReduction = 0;
2633 PMMPTE ValidPteList[256];
2653 while (PointerPte <= EndingPte)
2683 PteContents = *PointerPte;
2684 if (PteContents.
u.
Long)
2717 if (PteCount == 256)
2722 ValidPteList[PteCount++] = PointerPte;
2754 if (PointerPte > CommitPte) CommitReduction++;
2771 return CommitReduction;
2868 if (NumberOfBytesToRead)
2888 NumberOfBytesToRead,
2902 if (NumberOfBytesRead)
2982 if (NumberOfBytesToWrite)
3002 NumberOfBytesToWrite,
3016 if (NumberOfBytesWritten)
3116 ULONG OldAccessProtection;
3120 SIZE_T NumberOfBytesToProtect = 0;
3167 NumberOfBytesToProtect = *UnsafeNumberOfBytesToProtect;
3184 NumberOfBytesToProtect = *UnsafeNumberOfBytesToProtect;
3222 if (CurrentProcess !=
Process)
3236 &NumberOfBytesToProtect,
3237 NewAccessProtection,
3238 &OldAccessProtection);
3258 *UnsafeOldAccessProtection = OldAccessProtection;
3260 *UnsafeNumberOfBytesToProtect = NumberOfBytesToProtect;
3350 while (CurrentVa < *EndAddress)
3365 *EndAddress = CurrentVa;
3386 PVOID CurrentVa, EndAddress;
3387 PMMPTE PointerPte, LastPte;
3389#if (_MI_PAGING_LEVELS >= 3)
3392#if (_MI_PAGING_LEVELS == 4)
3422 while (CurrentVa < EndAddress)
3424 (
void)(*(
volatile CHAR*)CurrentVa);
3442#if (_MI_PAGING_LEVELS >= 3)
3445#if (_MI_PAGING_LEVELS == 4)
3507#if (_MI_PAGING_LEVELS >= 3)
3510#if (_MI_PAGING_LEVELS == 4)
3513 }
while (PointerPte <= LastPte);
3538 PVOID CapturedBaseAddress;
3539 SIZE_T CapturedBytesToLock;
3579 CapturedBytesToLock = *NumberOfBytesToLock;
3643 if (CurrentProcess !=
Process)
3656 &CapturedBytesToLock,
3678 *NumberOfBytesToLock = CapturedBytesToLock;
3706 PMMPTE PointerPte, LastPte;
3708#if (_MI_PAGING_LEVELS >= 3)
3711#if (_MI_PAGING_LEVELS == 4)
3743#if (_MI_PAGING_LEVELS >= 3)
3746#if (_MI_PAGING_LEVELS == 4)
3789 DPRINT1(
"FIXME: Should remove the page from WS\n");
3799#if (_MI_PAGING_LEVELS >= 3)
3802#if (_MI_PAGING_LEVELS == 4)
3805 }
while (PointerPte <= LastPte);
3810 goto CleanupWithWsLock;
3818#if (_MI_PAGING_LEVELS >= 3)
3821#if (_MI_PAGING_LEVELS == 4)
3837#if (_MI_PAGING_LEVELS >= 3)
3840#if (_MI_PAGING_LEVELS == 4)
3843 }
while (PointerPte <= LastPte);
3874 PVOID CapturedBaseAddress;
3875 SIZE_T CapturedBytesToUnlock;
3915 CapturedBytesToUnlock = *NumberOfBytesToUnlock;
3979 if (CurrentProcess !=
Process)
3992 &CapturedBytesToUnlock,
4014 *NumberOfBytesToUnlock = CapturedBytesToUnlock;
4041 PVOID CapturedBaseAddress;
4042 SIZE_T CapturedBytesToFlush;
4067 CapturedBytesToFlush = *NumberOfBytesToFlush;
4084 CapturedBytesToFlush = *NumberOfBytesToFlush;
4118 &CapturedBaseAddress,
4119 &CapturedBytesToFlush,
4136 *NumberOfBytesToFlush = 0;
4205 CapturedEntryCount = *EntriesInUserAddressArray;
4227 CapturedEntryCount *
sizeof(
PVOID),
4244 CapturedEntryCount = *EntriesInUserAddressArray;
4245 ASSERT(CapturedEntryCount != 0);
4303 *EntriesInUserAddressArray = 0;
4417 DPRINT(
"Querying class %d about address: %p\n", MemoryInformationClass,
BaseAddress);
4429 MemoryInformationLength,
4446 switch(MemoryInformationClass)
4458 MemoryInformationLength,
4472 MemoryInformationLength,
4478 DPRINT1(
"Unhandled memory information class %d\n", MemoryInformationClass);
4503 ULONG_PTR PRegionSize, StartingAddress, EndingAddress;
4509 ULONG ProtectionMask, QuotaCharge = 0, QuotaFree = 0;
4512 PMMPTE PointerPte, LastPte;
4520 DPRINT1(
"Too many zero bits\n");
4528 DPRINT1(
"Invalid Allocation Type\n");
4535 DPRINT1(
"No memory allocation base type\n");
4542 DPRINT1(
"Invalid use of MEM_RESET\n");
4552 DPRINT1(
"Must supply MEM_COMMIT with MEM_LARGE_PAGES\n");
4559 DPRINT1(
"Using illegal flags with MEM_LARGE_PAGES\n");
4567 DPRINT1(
"MEM_WRITE_WATCH used without MEM_RESERVE\n");
4577 DPRINT1(
"MEM_PHYSICAL used without MEM_RESERVE\n");
4584 DPRINT1(
"Using illegal flags with MEM_PHYSICAL\n");
4591 DPRINT1(
"MEM_PHYSICAL used without PAGE_READWRITE\n");
4600 DPRINT1(
"Invalid protection mask\n");
4616 PBaseAddress = *UBaseAddress;
4617 PRegionSize = *URegionSize;
4629 DPRINT1(
"Virtual allocation base above User Space\n");
4636 DPRINT1(
"Region size would overflow into kernel-memory\n");
4643 DPRINT1(
"Region size is invalid (zero)\n");
4669 if (CurrentProcess !=
Process)
4676 DPRINT(
"NtAllocateVirtualMemory: Process 0x%p, Address 0x%p, Zerobits %lu , RegionSize 0x%x, Allocation type 0x%x, Protect 0x%x.\n",
4687 DPRINT1(
"Privilege not held for MEM_LARGE_PAGES\n");
4689 goto FailPathNoLock;
4697 DPRINT1(
"MEM_LARGE_PAGES not supported\n");
4699 goto FailPathNoLock;
4703 DPRINT1(
"MEM_PHYSICAL not supported\n");
4705 goto FailPathNoLock;
4709 DPRINT1(
"MEM_WRITE_WATCH not supported\n");
4711 goto FailPathNoLock;
4725 DPRINT1(
"Copy on write not allowed through this path\n");
4727 goto FailPathNoLock;
4740 StartingAddress = 0;
4754 goto FailPathNoLock;
4767 StartingAddress = (
ULONG_PTR)PBaseAddress;
4775 goto FailPathNoLock;
4786 DPRINT1(
"Failed to allocate a VAD!\n");
4788 goto FailPathNoLock;
4808 DPRINT1(
"Failed to insert the VAD!\n");
4810 goto FailPathNoLock;
4829 *URegionSize = PRegionSize;
4830 *UBaseAddress = (
PVOID)StartingAddress;
4839 DPRINT(
"Reserved %x bytes at %p.\n", PRegionSize, StartingAddress);
4851 PRegionSize = EndingAddress - StartingAddress + 1;
4860 DPRINT1(
"Process is dying\n");
4872 if (
Result != TableFoundNode)
4874 DPRINT1(
"Could not find a VAD for this allocation\n");
4882 DPRINT(
"MEM_RESET not supported\n");
4891 if ((FoundVad->u.VadFlags.VadType ==
VadAwe) ||
4895 DPRINT1(
"Illegal VAD for attempting a MEM_COMMIT\n");
4903 if (((StartingAddress >>
PAGE_SHIFT) < FoundVad->StartingVpn) ||
4904 ((EndingAddress >>
PAGE_SHIFT) > FoundVad->EndingVpn))
4906 DPRINT1(
"Address range does not fit into the VAD\n");
4918 DPRINT1(
"Illegal commit of non-ARM3 section!\n");
4926 if (FoundVad->u.VadFlags.PrivateMemory ==
FALSE)
4933 DPRINT1(
"Large page sections cannot be VirtualAlloc'd\n");
4944 DPRINT1(
"Cannot use caching flags with anything but rotate VADs\n");
4953 if (FoundVad->u.VadFlags.NoChange)
4970 DPRINT1(
"Secured VAD being messed around with\n");
4978 ASSERT(FoundVad->ControlArea->FilePointer ==
NULL);
4986 DPRINT1(
"Invalid page protection for rotate VAD\n");
4996 QuotaCharge = (
ULONG)(LastPte - PointerPte + 1);
5002 TempPte = FoundVad->ControlArea->Segment->SegmentPteTemplate;
5004 while (PointerPte <= LastPte)
5009 if (PointerPte->
u.
Long == 0)
5023 ASSERT(QuotaCharge >= QuotaFree);
5024 QuotaCharge -= QuotaFree;
5025 FoundVad->ControlArea->Segment->NumberOfCommittedPages += QuotaCharge;
5050 DPRINT1(
"Write copy attempted when not allowed\n");
5059 TempPte.u.Soft.Protection = ProtectionMask;
5074 FoundVad->u.VadFlags.CommitCharge += (1 + LastPte - PointerPte);
5075 Process->CommitCharge += (1 + LastPte - PointerPte);
5090 while (PointerPte <= LastPte)
5107 if (PointerPte->
u.
Long == 0)
5143 ChangeProtection =
TRUE;
5173 if (ChangeProtection)
5175 PVOID ProtectBaseAddress = (
PVOID)StartingAddress;
5176 SIZE_T ProtectSize = PRegionSize;
5177 ULONG OldProtection;
5183 &ProtectBaseAddress,
5206 *URegionSize = PRegionSize;
5207 *UBaseAddress = (
PVOID)StartingAddress;
5236 LONG_PTR AlreadyDecommitted, CommitReduction = 0;
5238 ULONG_PTR StartingAddress, EndingAddress;
5278 PBaseAddress = *UBaseAddress;
5279 PRegionSize = *URegionSize;
5292 DPRINT1(
"Virtual free base above User Space\n");
5301 DPRINT1(
"Region size would overflow into kernel-memory\n");
5327 if (CurrentProcess !=
Process)
5334 DPRINT(
"NtFreeVirtualMemory: Process 0x%p, Address 0x%p, Size 0x%Ix, FreeType 0x%08lx\n",
5362 DPRINT1(
"Unable to find VAD for address 0x%p\n", StartingAddress);
5372 DPRINT1(
"Address 0x%p is beyond the VAD\n", EndingAddress);
5384 DPRINT(
"Attempt to free section memory\n");
5426 DPRINT1(
"Address 0x%p does not match the VAD\n", PBaseAddress);
5546 DPRINT1(
"Failed to allocate a VAD!\n");
5556 DPRINT1(
"Ran out of process quota whilst creating new VAD!\n");
5605 StartingAddress - 1,
5633 PRegionSize = EndingAddress - StartingAddress + 1;
5634 Process->CommitCharge -= CommitReduction;
5656 *URegionSize = PRegionSize;
5657 *UBaseAddress = (
PVOID)StartingAddress;
5674 DPRINT1(
"Trying to decommit from invalid VAD\n");
5688 DPRINT1(
"Decomitting non-committed memory\n");
5708 ASSERT(CommitReduction >= 0);
5772 DPRINT1(
"MM:MmGetPhysicalAddressFailed base address was %p\n",
Address);
#define STATUS_PRIVILEGE_NOT_HELD
HARDWARE_PTE_ARMV6 TempPte
HARDWARE_PDE_ARMV6 TempPde
#define MM_HIGHEST_USER_ADDRESS
_In_ WDFREQUEST _In_ MEDIA_LOCK_TYPE LockType
#define NT_SUCCESS(StatCode)
static const WCHAR Cleanup[]
IN CINT OUT PVOID IN ULONG OUT PULONG ReturnLength
#define ExAllocatePoolWithTag(hernya, size, tag)
#define PsGetCurrentThread()
#define KeGetCurrentIrql()
#define ROUND_DOWN(n, align)
#define ExReleaseRundownProtection
#define ExGetPreviousMode
#define ExAcquireRundownProtection
VOID NTAPI ProbeForRead(IN CONST VOID *Address, IN SIZE_T Length, IN ULONG Alignment)
VOID NTAPI ProbeForWrite(IN PVOID Address, IN SIZE_T Length, IN ULONG Alignment)
_In_opt_ PFILE_OBJECT _In_opt_ PETHREAD Thread
_Must_inspect_result_ _In_ PLARGE_INTEGER _In_ PLARGE_INTEGER _In_ ULONG _In_ PFILE_OBJECT _In_ PVOID Process
#define KeRosDumpStackFrames(Frames, Count)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble * u
VOID FASTCALL KeReleaseGuardedMutexUnsafe(IN OUT PKGUARDED_MUTEX GuardedMutex)
VOID FASTCALL KeAcquireGuardedMutexUnsafe(IN OUT PKGUARDED_MUTEX GuardedMutex)
#define EXCEPTION_EXECUTE_HANDLER
#define PROCESS_QUERY_INFORMATION
#define PROCESS_VM_OPERATION
PMMVAD NTAPI MiLocateAddress(IN PVOID VirtualAddress)
NTSTATUS NTAPI MiQueryMemorySectionName(IN HANDLE ProcessHandle, IN PVOID BaseAddress, OUT PVOID MemoryInformation, IN SIZE_T MemoryInformationLength, OUT PSIZE_T ReturnLength)
FORCEINLINE PMMPTE MI_GET_PROTOTYPE_PTE_FOR_VPN(IN PMMVAD Vad, IN ULONG_PTR Vpn)
FORCEINLINE BOOLEAN MM_ANY_WS_LOCK_HELD_EXCLUSIVE(_In_ PETHREAD Thread)
FORCEINLINE VOID MiLockProcessWorkingSetShared(IN PEPROCESS Process, IN PETHREAD Thread)
FORCEINLINE VOID MiDeletePde(_In_ PMMPDE PointerPde, _In_ PEPROCESS CurrentProcess)
FORCEINLINE VOID MiLockWorkingSet(IN PETHREAD Thread, IN PMMSUPPORT WorkingSet)
VOID NTAPI MiRemoveNode(IN PMMADDRESS_NODE Node, IN PMM_AVL_TABLE Table)
FORCEINLINE VOID MiUnlockProcessWorkingSetForFault(IN PEPROCESS Process, IN PETHREAD Thread, OUT PBOOLEAN Safe, OUT PBOOLEAN Shared)
FORCEINLINE VOID MiLockProcessWorkingSetForFault(IN PEPROCESS Process, IN PETHREAD Thread, IN BOOLEAN Safe, IN BOOLEAN Shared)
#define MI_SET_PFN_DELETED(x)
FORCEINLINE VOID MiUnlockProcessWorkingSetShared(IN PEPROCESS Process, IN PETHREAD Thread)
FORCEINLINE VOID MI_ERASE_PTE(IN PMMPTE PointerPte)
FORCEINLINE USHORT MiDecrementPageTableReferences(IN PVOID Address)
#define MM_INVALID_PROTECTION
VOID NTAPI MiDecrementShareCount(IN PMMPFN Pfn1, IN PFN_NUMBER PageFrameIndex)
FORCEINLINE VOID MiUnlockProcessWorkingSet(IN PEPROCESS Process, IN PETHREAD Thread)
FORCEINLINE VOID MiUnlockProcessWorkingSetUnsafe(IN PEPROCESS Process, IN PETHREAD Thread)
FORCEINLINE VOID MI_WRITE_INVALID_PTE(IN PMMPTE PointerPte, IN MMPTE InvalidPte)
FORCEINLINE VOID MiUnlockWorkingSet(IN PETHREAD Thread, IN PMMSUPPORT WorkingSet)
FORCEINLINE VOID MiDereferencePfnAndDropLockCount(IN PMMPFN Pfn1)
VOID NTAPI MiUnlinkPageFromList(IN PMMPFN Pfn)
FORCEINLINE VOID MiReferenceProbedPageAndBumpLockCount(IN PMMPFN Pfn1)
PSUBSECTION NTAPI MiLocateSubsection(IN PMMVAD Vad, IN ULONG_PTR Vpn)
NTSTATUS NTAPI MiInsertVadEx(_Inout_ PMMVAD Vad, _In_ ULONG_PTR *BaseAddress, _In_ SIZE_T ViewSize, _In_ ULONG_PTR HighestAddress, _In_ ULONG_PTR Alignment, _In_ ULONG AllocationType)
KGUARDED_MUTEX MmSectionCommitMutex
NTSTATUS NTAPI MiCheckSecuredVad(IN PMMVAD Vad, IN PVOID Base, IN SIZE_T Size, IN ULONG ProtectionMask)
NTSTATUS FASTCALL MiCheckPdeForPagedPool(IN PVOID Address)
VOID NTAPI MiDecrementReferenceCount(IN PMMPFN Pfn1, IN PFN_NUMBER PageFrameIndex)
#define MI_PTE_LOOKUP_NEEDED
TABLE_SEARCH_RESULT NTAPI MiCheckForConflictingNode(IN ULONG_PTR StartVpn, IN ULONG_PTR EndVpn, IN PMM_AVL_TABLE Table, OUT PMMADDRESS_NODE *NodeOrParent)
ULONG NTAPI MiMakeProtectionMask(IN ULONG Protect)
FORCEINLINE USHORT MiIncrementPageTableReferences(IN PVOID Address)
PMMADDRESS_NODE NTAPI MiGetNextNode(IN PMMADDRESS_NODE Node)
VOID NTAPI MiInsertVad(_Inout_ PMMVAD Vad, _Inout_ PMM_AVL_TABLE VadRoot)
FORCEINLINE PMMPFN MI_PFN_ELEMENT(IN PFN_NUMBER Pfn)
FORCEINLINE VOID MiLockProcessWorkingSet(IN PEPROCESS Process, IN PETHREAD Thread)
FORCEINLINE VOID MiLockProcessWorkingSetUnsafe(IN PEPROCESS Process, IN PETHREAD Thread)
VOID NTAPI MmProbeAndLockPages(IN PMDL Mdl, IN KPROCESSOR_MODE AccessMode, IN LOCK_OPERATION Operation)
VOID NTAPI MmUnlockPages(IN PMDL Mdl)
PVOID NTAPI MmMapLockedPagesSpecifyCache(IN PMDL Mdl, IN KPROCESSOR_MODE AccessMode, IN MEMORY_CACHING_TYPE CacheType, IN PVOID BaseAddress, IN ULONG BugCheckOnFailure, IN ULONG Priority)
VOID NTAPI MmUnmapLockedPages(IN PVOID BaseAddress, IN PMDL Mdl)
BOOLEAN NTAPI MmIsAddressValid(IN PVOID VirtualAddress)
#define MiAddressToPte(x)
#define MiAddressToPde(x)
#define ExFreePoolWithTag(_P, _T)
static const OBJECT_ATTRIBUTES const LARGE_INTEGER ULONG
static OUT PIO_STATUS_BLOCK IoStatusBlock
#define MM_SHARED_USER_DATA_VA
#define KeGetPreviousMode()
_In_ HANDLE ProcessHandle
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID _In_ ULONG_PTR ZeroBits
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID * BaseAddress
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID _In_ ULONG_PTR _In_ SIZE_T _Inout_opt_ PLARGE_INTEGER _Inout_ PSIZE_T _In_ SECTION_INHERIT _In_ ULONG AllocationType
__kernel_entry _Inout_ _Inout_ PSIZE_T RegionSize
__kernel_entry _Inout_ _Inout_ PSIZE_T _In_ ULONG FreeType
struct _MEMORY_BASIC_INFORMATION * PMEMORY_BASIC_INFORMATION
@ MemoryBasicVlmInformation
@ VadDevicePhysicalMemory
enum _MEMORY_INFORMATION_CLASS MEMORY_INFORMATION_CLASS
struct _MEMORY_BASIC_INFORMATION MEMORY_BASIC_INFORMATION
#define PAGE_ROUND_DOWN(x)
_In_ PMEMORY_AREA MemoryArea
#define PAGE_EXECUTE_READ
#define NtCurrentProcess()
#define PAGE_EXECUTE_WRITECOPY
#define PAGE_EXECUTE_READWRITE
_In_ ULONG _In_ ULONG _In_ ULONG Length
FORCEINLINE VOID KeInvalidateTlbEntry(IN PVOID Address)
FORCEINLINE VOID KeSweepICache(IN PVOID BaseAddress, IN SIZE_T FlushSize)
FORCEINLINE PMMPXE MiPdeToPxe(PMMPDE PointerPde)
FORCEINLINE PVOID MiPpeToAddress(PMMPTE PointerPpe)
FORCEINLINE PMMPDE MiPdeToPpe(PMMPDE PointerPde)
FORCEINLINE PMMPPE MiPteToPpe(PMMPTE PointerPte)
FORCEINLINE PMMPTE MiPxeToPte(PMMPXE PointerPxe)
#define MiIsPteOnPpeBoundary(PointerPte)
FORCEINLINE PMMPTE MiPpeToPte(PMMPPE PointerPpe)
#define MM_HIGHEST_VAD_ADDRESS
#define _MI_PAGING_LEVELS
FORCEINLINE PMMPTE MiAddressToPpe(PVOID Address)
#define MiProtoPteToPte(x)
FORCEINLINE PMMPTE MiAddressToPxe(PVOID Address)
#define MiIsPteOnPdeBoundary(PointerPte)
FORCEINLINE BOOLEAN MI_IS_MAPPED_PTE(PMMPTE PointerPte)
#define MiIsPteOnPxeBoundary(PointerPte)
FORCEINLINE PMMPXE MiPteToPxe(PMMPTE PointerPte)
FORCEINLINE PVOID MiPxeToAddress(PMMPTE PointerPxe)
#define MiPdeToAddress(_Pde)
#define MiPteToAddress(_Pte)
VOID NTAPI KeFlushCurrentTb(VOID)
FORCEINLINE PMMSUPPORT MmGetCurrentAddressSpace(VOID)
FORCEINLINE PMMPFN MiGetPfnEntry(IN PFN_NUMBER Pfn)
FORCEINLINE VOID MmLockAddressSpace(PMMSUPPORT AddressSpace)
#define MM_VIRTMEM_GRANULARITY
#define MI_ASSERT_PFN_LOCK_HELD()
NTSTATUS NTAPI MmQuerySectionView(PMEMORY_AREA MemoryArea, PVOID Address, PMEMORY_BASIC_INFORMATION Info, PSIZE_T ResultLength)
NTSTATUS NTAPI MmProtectSectionView(PMMSUPPORT AddressSpace, PMEMORY_AREA MemoryArea, PVOID BaseAddress, SIZE_T Length, ULONG Protect, PULONG OldProtect)
PMEMORY_AREA NTAPI MmLocateMemoryAreaByAddress(PMMSUPPORT AddressSpace, PVOID Address)
#define MEMORY_AREA_OWNED_BY_ARM3
#define MA_GetEndingAddress(_MemoryArea)
#define MA_GetStartingAddress(_MemoryArea)
FORCEINLINE VOID MmUnlockAddressSpace(PMMSUPPORT AddressSpace)
_Out_ PKAPC_STATE ApcState
#define MEMORY_AREA_SECTION_VIEW
NTSTATUS NTAPI MmAccessFault(IN ULONG FaultCode, IN PVOID Address, IN KPROCESSOR_MODE Mode, IN PVOID TrapInformation)
const LUID SeLockMemoryPrivilege
VOID NTAPI KeFlushEntireTb(IN BOOLEAN Invalid, IN BOOLEAN AllProcessors)
BOOLEAN NTAPI KeAreAllApcsDisabled(VOID)
MMSUPPORT MmSystemCacheWs
LONG MiGetExceptionInfo(IN PEXCEPTION_POINTERS ExceptionInfo, OUT PBOOLEAN HaveBadAddress, OUT PULONG_PTR BadAddress)
NTSTATUS NTAPI NtResetWriteWatch(IN HANDLE ProcessHandle, IN PVOID BaseAddress, IN SIZE_T RegionSize)
static NTSTATUS MiLockVirtualMemory(IN OUT PVOID *BaseAddress, IN OUT PSIZE_T RegionSize, IN ULONG MapType)
NTSTATUS NTAPI NtGetWriteWatch(IN HANDLE ProcessHandle, IN ULONG Flags, IN PVOID BaseAddress, IN SIZE_T RegionSize, IN PVOID *UserAddressArray, OUT PULONG_PTR EntriesInUserAddressArray, OUT PULONG Granularity)
VOID NTAPI MiDeleteVirtualAddresses(IN ULONG_PTR Va, IN ULONG_PTR EndingAddress, IN PMMVAD Vad)
NTSTATUS NTAPI NtFreeVirtualMemory(IN HANDLE ProcessHandle, IN PVOID *UBaseAddress, IN PSIZE_T URegionSize, IN ULONG FreeType)
NTSTATUS NTAPI MmFlushVirtualMemory(IN PEPROCESS Process, IN OUT PVOID *BaseAddress, IN OUT PSIZE_T RegionSize, OUT PIO_STATUS_BLOCK IoStatusBlock)
NTSTATUS NTAPI NtWriteVirtualMemory(IN HANDLE ProcessHandle, IN PVOID BaseAddress, IN PVOID Buffer, IN SIZE_T NumberOfBytesToWrite, OUT PSIZE_T NumberOfBytesWritten OPTIONAL)
#define MI_MAPPED_COPY_PAGES
VOID NTAPI MiProcessValidPteList(IN PMMPTE *ValidPteList, IN ULONG Count)
PVOID NTAPI MmGetVirtualForPhysical(IN PHYSICAL_ADDRESS PhysicalAddress)
NTSTATUS NTAPI MmCopyVirtualMemory(IN PEPROCESS SourceProcess, IN PVOID SourceAddress, IN PEPROCESS TargetProcess, OUT PVOID TargetAddress, IN SIZE_T BufferSize, IN KPROCESSOR_MODE PreviousMode, OUT PSIZE_T ReturnSize)
ULONG NTAPI MiGetPageProtection(IN PMMPTE PointerPte)
NTSTATUS NTAPI NtProtectVirtualMemory(IN HANDLE ProcessHandle, IN OUT PVOID *UnsafeBaseAddress, IN OUT SIZE_T *UnsafeNumberOfBytesToProtect, IN ULONG NewAccessProtection, OUT PULONG UnsafeOldAccessProtection)
VOID NTAPI MiFlushTbAndCapture(IN PMMVAD FoundVad, IN PMMPTE PointerPte, IN ULONG ProtectionMask, IN PMMPFN Pfn1, IN BOOLEAN CaptureDirtyBit)
NTSTATUS NTAPI NtReadVirtualMemory(IN HANDLE ProcessHandle, IN PVOID BaseAddress, OUT PVOID Buffer, IN SIZE_T NumberOfBytesToRead, OUT PSIZE_T NumberOfBytesRead OPTIONAL)
VOID NTAPI MiDeletePte(IN PMMPTE PointerPte, IN PVOID VirtualAddress, IN PEPROCESS CurrentProcess, IN PMMPTE PrototypePte)
NTSTATUS NTAPI NtQueryVirtualMemory(IN HANDLE ProcessHandle, IN PVOID BaseAddress, IN MEMORY_INFORMATION_CLASS MemoryInformationClass, OUT PVOID MemoryInformation, IN SIZE_T MemoryInformationLength, OUT PSIZE_T ReturnLength)
ULONG NTAPI MiMakeSystemAddressValidPfn(IN PVOID VirtualAddress, IN KIRQL OldIrql)
ULONG NTAPI MiCalculatePageCommitment(IN ULONG_PTR StartingAddress, IN ULONG_PTR EndingAddress, IN PMMVAD Vad, IN PEPROCESS Process)
NTSTATUS NTAPI NtLockVirtualMemory(IN HANDLE ProcessHandle, IN OUT PVOID *BaseAddress, IN OUT PSIZE_T NumberOfBytesToLock, IN ULONG MapType)
FORCEINLINE VOID MI_LOCK_VA(PMMPFN Pfn1, ULONG LockType)
NTSTATUS NTAPI MiDoPoolCopy(IN PEPROCESS SourceProcess, IN PVOID SourceAddress, IN PEPROCESS TargetProcess, OUT PVOID TargetAddress, IN SIZE_T BufferSize, IN KPROCESSOR_MODE PreviousMode, OUT PSIZE_T ReturnSize)
PHYSICAL_ADDRESS NTAPI MmGetPhysicalAddress(PVOID Address)
static NTSTATUS MiUnlockVirtualMemory(IN OUT PVOID *BaseAddress, IN OUT PSIZE_T RegionSize, IN ULONG MapType)
VOID NTAPI MmUnsecureVirtualMemory(IN PVOID SecureMem)
FORCEINLINE VOID MI_UNLOCK_VA(PMMPFN Pfn1, ULONG LockType)
NTSTATUS NTAPI NtFlushVirtualMemory(IN HANDLE ProcessHandle, IN OUT PVOID *BaseAddress, IN OUT PSIZE_T NumberOfBytesToFlush, OUT PIO_STATUS_BLOCK IoStatusBlock)
NTSTATUS NTAPI MiDoMappedCopy(IN PEPROCESS SourceProcess, IN PVOID SourceAddress, IN PEPROCESS TargetProcess, OUT PVOID TargetAddress, IN SIZE_T BufferSize, IN KPROCESSOR_MODE PreviousMode, OUT PSIZE_T ReturnSize)
NTSTATUS NTAPI MiProtectVirtualMemory(IN PEPROCESS Process, IN OUT PVOID *BaseAddress, IN OUT PSIZE_T NumberOfBytesToProtect, IN ULONG NewAccessProtection, OUT PULONG OldAccessProtection OPTIONAL)
VOID NTAPI MiMakePdeExistAndMakeValid(IN PMMPDE PointerPde, IN PEPROCESS TargetProcess, IN KIRQL OldIrql)
ULONG NTAPI MiMakeSystemAddressValid(IN PVOID PageTableVirtualAddress, IN PEPROCESS CurrentProcess)
#define MI_MAX_TRANSFER_SIZE
ULONG NTAPI MiDecommitPages(IN PVOID StartingAddress, IN PMMPTE EndingPte, IN PEPROCESS Process, IN PMMVAD Vad)
PVOID NTAPI MmSecureVirtualMemory(IN PVOID Address, IN SIZE_T Length, IN ULONG Mode)
static NTSTATUS MiCheckVadsForLockOperation(_Inout_ PVOID *BaseAddress, _Inout_ PSIZE_T RegionSize, _Inout_ PVOID *EndAddress)
NTSTATUS NTAPI NtUnlockVirtualMemory(IN HANDLE ProcessHandle, IN OUT PVOID *BaseAddress, IN OUT PSIZE_T NumberOfBytesToUnlock, IN ULONG MapType)
FORCEINLINE BOOLEAN MI_IS_LOCKED_VA(PMMPFN Pfn1, ULONG LockType)
NTSTATUS NTAPI MiQueryMemoryBasicInformation(IN HANDLE ProcessHandle, IN PVOID BaseAddress, OUT PVOID MemoryInformation, IN SIZE_T MemoryInformationLength, OUT PSIZE_T ReturnLength)
ULONG NTAPI MiQueryAddressState(IN PVOID Va, IN PMMVAD Vad, IN PEPROCESS TargetProcess, OUT PULONG ReturnedProtect, OUT PVOID *NextVa)
BOOLEAN NTAPI MiIsEntireRangeCommitted(IN ULONG_PTR StartingAddress, IN ULONG_PTR EndingAddress, IN PMMVAD Vad, IN PEPROCESS Process)
PFN_COUNT NTAPI MiDeleteSystemPageableVm(IN PMMPTE PointerPte, IN PFN_NUMBER PageCount, IN ULONG Flags, OUT PPFN_NUMBER ValidPages)
NTSTATUS NTAPI NtAllocateVirtualMemory(IN HANDLE ProcessHandle, IN OUT PVOID *UBaseAddress, IN ULONG_PTR ZeroBits, IN OUT PSIZE_T URegionSize, IN ULONG AllocationType, IN ULONG Protect)
NTSTATUS NTAPI NtFlushInstructionCache(_In_ HANDLE ProcessHandle, _In_opt_ PVOID BaseAddress, _In_ SIZE_T FlushSize)
NTSTATUS NTAPI MiRosProtectVirtualMemory(IN PEPROCESS Process, IN OUT PVOID *BaseAddress, IN OUT PSIZE_T NumberOfBytesToProtect, IN ULONG NewAccessProtection, OUT PULONG OldAccessProtection OPTIONAL)
#define MI_POOL_COPY_BYTES
const ULONG MmProtectToValue[32]
POBJECT_TYPE PsProcessType
BOOLEAN NTAPI SeSinglePrivilegeCheck(_In_ LUID PrivilegeValue, _In_ KPROCESSOR_MODE PreviousMode)
Checks if a single privilege is present in the context of the calling thread.
#define STATUS_QUOTA_EXCEEDED
#define STATUS_UNABLE_TO_DELETE_SECTION
#define STATUS_WAS_LOCKED
#define STATUS_UNABLE_TO_FREE_VM
#define STATUS_MEMORY_NOT_ALLOCATED
#define STATUS_INCOMPATIBLE_FILE_MAP
#define STATUS_INVALID_PARAMETER_4
#define STATUS_ALREADY_COMMITTED
#define STATUS_INVALID_PARAMETER_2
#define STATUS_FREE_VM_NOT_AT_BASE
#define STATUS_PROCESS_IS_TERMINATING
#define STATUS_ACCESS_VIOLATION
#define STATUS_NOT_IMPLEMENTED
#define STATUS_INVALID_PARAMETER_6
#define STATUS_NOT_LOCKED
#define STATUS_IN_PAGE_ERROR
#define STATUS_CONFLICTING_ADDRESSES
#define STATUS_INVALID_PAGE_PROTECTION
#define STATUS_GUARD_PAGE_VIOLATION
#define STATUS_NOT_COMMITTED
#define STATUS_INVALID_PARAMETER_3
#define STATUS_INVALID_PARAMETER_5
#define STATUS_PARTIAL_COPY
NTSTATUS NTAPI ObReferenceObjectByHandle(IN HANDLE Handle, IN ACCESS_MASK DesiredAccess, IN POBJECT_TYPE ObjectType, IN KPROCESSOR_MODE AccessMode, OUT PVOID *Object, OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL)
VOID NTAPI KeStackAttachProcess(IN PKPROCESS Process, OUT PRKAPC_STATE ApcState)
VOID NTAPI KeUnstackDetachProcess(IN PRKAPC_STATE ApcState)
#define _SEH2_GetExceptionCode()
#define _SEH2_EXCEPT(...)
#define _SEH2_GetExceptionInformation()
#define _SEH2_YIELD(__stmt)
NTSTATUS NTAPI PsChargeProcessNonPagedPoolQuota(_In_ PEPROCESS Process, _In_ SIZE_T Amount)
Charges the non paged pool quota of a given process.
VOID NTAPI PsReturnProcessNonPagedPoolQuota(_In_ PEPROCESS Process, _In_ SIZE_T Amount)
Returns the non paged quota pool that the process was taking up.
VOID NTAPI KeBugCheckEx(_In_ ULONG BugCheckCode, _In_ ULONG_PTR BugCheckParameter1, _In_ ULONG_PTR BugCheckParameter2, _In_ ULONG_PTR BugCheckParameter3, _In_ ULONG_PTR BugCheckParameter4)
PVOID MmHighestUserAddress
#define ProbeForWritePointer(Ptr)
#define ProbeForWriteSize_t(Ptr)
#define ProbeForWriteUlong(Ptr)
#define ProbeForWriteIoStatusBlock(Ptr)
PULONG MinorVersion OPTIONAL
union _CONTROL_AREA::@2599 u
struct _EXCEPTION_RECORD * ExceptionRecord
ULONG_PTR ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]
struct _MMADDRESS_NODE * RightChild
struct _MMPFN::@1790::@1796 e2
struct _MMVAD * RightChild
struct _MMVAD * LeftChild
PCONTROL_AREA ControlArea
ULONG_PTR NumberGenericTableElements
MMADDRESS_NODE BalancedRoot
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
#define STATUS_INVALID_PARAMETER
#define STATUS_UNSUCCESSFUL
#define STATUS_INFO_LENGTH_MISMATCH
#define STATUS_INSUFFICIENT_RESOURCES
#define ALIGN_UP_POINTER_BY(ptr, align)
#define ALIGN_DOWN_POINTER_BY(ptr, align)
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG _Out_ PULONG ResultLength
_Must_inspect_result_ _In_ WDFDMATRANSACTION _In_ PFN_WDF_PROGRAM_DMA _In_ WDF_DMA_DIRECTION _In_ PMDL _In_ PVOID VirtualAddress
_In_ WDFDEVICE _In_ PVOID _In_opt_ PMDL Mdl
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PLONGLONG _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_opt_ PULONG_PTR BytesWritten
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PLONGLONG _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_opt_ PULONG_PTR BytesRead
_In_ WDFMEMORY _Out_opt_ size_t * BufferSize
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
_Must_inspect_result_ _In_ ULONG Flags
_Out_ PBOOLEAN QuotaCharged
_In_ ULONG _In_ PHYSICAL_ADDRESS _Inout_ PULONG AddressSpace
_Must_inspect_result_ typedef _In_ PHYSICAL_ADDRESS PhysicalAddress
_Must_inspect_result_ typedef _In_ PHYSICAL_ADDRESS _Inout_ PLARGE_INTEGER _Outptr_ PVOID * TargetAddress
_Must_inspect_result_ typedef _In_ PHYSICAL_ADDRESS SourceAddress
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
#define ROUND_TO_PAGES(Size)
#define MmInitializeMdl(_MemoryDescriptorList, _BaseVa, _Length)
#define BYTES_TO_PAGES(Size)
_Must_inspect_result_ _In_ ULONG NewProtect
#define PAGE_WRITECOMBINE
#define ObDereferenceObject
#define PsGetCurrentProcess
_In_ KPROCESSOR_MODE PreviousMode
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID _In_ ULONG_PTR _In_ SIZE_T _Inout_opt_ PLARGE_INTEGER _Inout_ PSIZE_T _In_ SECTION_INHERIT _In_ ULONG _In_ ULONG Protect