@@ -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