MCPcopy Create free account
hub / github.com/HoShiMin/Kernel-Bridge / CopyMemory

Function CopyMemory

Kernel-Bridge/API/MemoryUtils.cpp:75–117  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

73 }
74
75 BOOLEAN CopyMemory(PVOID Dest, PVOID Src, SIZE_T Size, BOOLEAN Intersects, OPTIONAL BOOLEAN CheckBuffersPresence) {
76 if (CheckBuffersPresence) {
77 if (AddressRange::IsKernelAddress(Src) && !IsMemoryRangePresent(Src, Size)) return FALSE;
78 if (AddressRange::IsKernelAddress(Dest) && !IsMemoryRangePresent(Dest, Size)) return FALSE;
79 }
80
81 switch (Size) {
82 case sizeof(UCHAR): {
83 *reinterpret_cast<PUCHAR>(Dest) = *reinterpret_cast<PUCHAR>(Src);
84 break;
85 }
86 case sizeof(USHORT): {
87 *reinterpret_cast<PUSHORT>(Dest) = *reinterpret_cast<PUSHORT>(Src);
88 break;
89 }
90 case sizeof(ULONG): {
91 *reinterpret_cast<PULONG>(Dest) = *reinterpret_cast<PULONG>(Src);
92 break;
93 }
94#ifdef _AMD64_
95 case sizeof(ULONGLONG): {
96 *reinterpret_cast<PULONGLONG>(Dest) = *reinterpret_cast<PULONGLONG>(Src);
97 break;
98 }
99#endif
100 default: {
101 if (Intersects) {
102 RtlMoveMemory(
103 reinterpret_cast<PVOID>(Dest),
104 reinterpret_cast<PVOID>(Src),
105 Size
106 );
107 } else {
108 RtlCopyMemory(
109 reinterpret_cast<PVOID>(Dest),
110 reinterpret_cast<PVOID>(Src),
111 Size
112 );
113 }
114 }
115 }
116 return TRUE;
117 }
118
119 _IRQL_requires_max_(APC_LEVEL)
120 BOOLEAN SecureMemory(

Callers 5

ReadPhysicalMemoryFunction · 0.85
WritePhysicalMemoryFunction · 0.85
OperateProcessMemoryFunction · 0.85
KbCopyMoveMemoryFunction · 0.85
PELoaderMethod · 0.85

Calls 2

IsKernelAddressFunction · 0.70
IsMemoryRangePresentFunction · 0.70

Tested by

no test coverage detected