Example #1
0
CProcessesHandles::CEntry::CMemBlock::~CMemBlock()
{
  SIZE_T nSize;

  if (lpBaseAddress != NULL && nFreeCount >= (65536 / nSlotSize))
  {
    nSize = 0;
    NktNtFreeVirtualMemory(hProc, (PVOID*)&lpBaseAddress, &nSize, MEM_RELEASE);
  }
  if (lpFreeEntries != NULL)
    NktHookLibHelpers::MemFree(lpFreeEntries);
  return;
}
Example #2
0
NTSTATUS NtFreeVirtualMemory64(__in HANDLE ProcessHandle, __inout ULONGLONG *BaseAddress, __inout PSIZE_T RegionSize,
                               __in ULONG FreeType)
{
#if defined(_M_IX86)
  ULONGLONG nRegionSize;
  NTSTATUS nNtStatus;

  Initialize();
  //----
  if (NktHookLib_fnNtFreeVirtualMemory64 == 0ui64)
    return STATUS_NOT_IMPLEMENTED;
  nRegionSize = (ULONGLONG)(*RegionSize);
  nNtStatus = NktHookLib_CallWow64(NktHookLib_fnNtFreeVirtualMemory64, Handle2Ull(ProcessHandle), Ptr2Ull(BaseAddress),
                                   Ptr2Ull(&nRegionSize), Ul2Ull(FreeType), 0ui64, 0ui64, 0ui64, 0ui64, 0ui64, 0ui64,
                                   0ui64);
  *RegionSize = (SIZE_T)nRegionSize;
  return nNtStatus;
#elif defined(_M_X64)
  return NktNtFreeVirtualMemory(ProcessHandle, (PVOID*)BaseAddress, RegionSize, FreeType);
#endif
}