Skip to content

Commit 64675a3

Browse files
committed
update MemorySetSectionProtection
1 parent c55c84c commit 64675a3

1 file changed

Lines changed: 7 additions & 23 deletions

File tree

MemoryModule/MemoryModule.cpp

Lines changed: 7 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -171,35 +171,19 @@ NTSTATUS MemorySetSectionProtection(
171171
NTSTATUS status = STATUS_SUCCESS;
172172
PIMAGE_SECTION_HEADER section = IMAGE_FIRST_SECTION(lpNtHeaders);
173173

174-
//
175-
// Determine whether it is a .NET assembly
176-
//
177-
auto& com = lpNtHeaders->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR];
178-
bool CorImage = com.Size && com.VirtualAddress;
179-
180174
for (DWORD i = 0; i < lpNtHeaders->FileHeader.NumberOfSections; ++i, ++section) {
181175
LPVOID address = LPBYTE(base) + section->VirtualAddress;
182176
SIZE_T size = AlignValueUp(section->Misc.VirtualSize, lpNtHeaders->OptionalHeader.SectionAlignment);
183177

184-
if (section->Characteristics & IMAGE_SCN_MEM_DISCARDABLE && !CorImage) {
185-
//
186-
// If it is a .NET assembly, we cannot release this memory block
187-
//
188-
#pragma warning(disable:6250)
189-
VirtualFree(address, size, MEM_DECOMMIT);
190-
#pragma warning(default:6250)
191-
}
192-
else {
193-
BOOL executable = (section->Characteristics & IMAGE_SCN_MEM_EXECUTE) != 0,
194-
readable = (section->Characteristics & IMAGE_SCN_MEM_READ) != 0,
195-
writeable = (section->Characteristics & IMAGE_SCN_MEM_WRITE) != 0;
196-
DWORD protect = ProtectionFlags[executable][readable][writeable], oldProtect;
178+
BOOL executable = (section->Characteristics & IMAGE_SCN_MEM_EXECUTE) != 0,
179+
readable = (section->Characteristics & IMAGE_SCN_MEM_READ) != 0,
180+
writeable = (section->Characteristics & IMAGE_SCN_MEM_WRITE) != 0;
181+
DWORD protect = ProtectionFlags[executable][readable][writeable], oldProtect;
197182

198-
if (section->Characteristics & IMAGE_SCN_MEM_NOT_CACHED) protect |= PAGE_NOCACHE;
183+
if (section->Characteristics & IMAGE_SCN_MEM_NOT_CACHED) protect |= PAGE_NOCACHE;
199184

200-
status = NtProtectVirtualMemory(NtCurrentProcess(), &address, &size, protect, &oldProtect);
201-
if (!NT_SUCCESS(status))break;
202-
}
185+
status = NtProtectVirtualMemory(NtCurrentProcess(), &address, &size, protect, &oldProtect);
186+
if (!NT_SUCCESS(status))break;
203187
}
204188

205189
return status;

0 commit comments

Comments
 (0)