NTAPI - malloc() wrapper
by putrid - Thursday June 13, 2024 at 04:30 AM
#1
To be used on Windows API / NTKRNL systems (ReactOS)

Works the same way and same functionality as normal malloc

#include <Windows.h> static HANDLE hHeap; LPVOID WINAPI memalloc(DWORD dwSize) {     LPVOID p;     p = NULL;     if(NtAllocateVirtualMemory(CURRENT_PROCESS, &p, 0, &dwSize, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE) >= 0)     {         memzero(p, dwSize);     }     return p; } void WINAPI memfree(void* pData) {     DWORD dwFree;     if (pData)     {         dwFree = 0;         NtFreeVirtualMemory(CURRENT_PROCESS, &pData, &dwFree, MEM_RELEASE);     } } void WINAPI memzero(LPVOID lpData, DWORD dwLength) {     DWORD i;     char* pszData;     if ((pszData = (char*)lpData) == NULL)         return;     for (i = 0; i < dwLength; i++)         pszData[i] = 0x00; } void WINAPI memcopy(void* pDestination, const void* pSource, DWORD dwSize) {     DWORD i;     for (i = 0; i < dwSize; i++)     {         ((LPBYTE)pDestination)[i] = ((LPBYTE)pSource)[i];     } } //void memcopy_reverse(void* pDestination, const void* pSource, DWORD dwSize) //{ //  DWORD i; // //  i = 0; // //  while(dwSize > 0) //  { //      ((LPBYTE)pDestination)[i] = ((LPBYTE)pSource)[dwSize - 1]; // //      i++; //      dwSize--; //  } //} BOOL WINAPI memreallocEx(void *old, DWORD size) {     if (size == 0)     {         memfree(*(LPBYTE *)old);         *(LPBYTE *)old = NULL;     }     else     {         register void *p = memrealloc(*(LPBYTE *)old, size);         if (p == NULL) return FALSE;         *(LPBYTE *)old = (LPBYTE)p;     }     return TRUE; } DWORD GetMemSize(LPVOID lpAddr) {     MEMORY_BASIC_INFORMATION MemInfo;     if (!lpAddr)     {         return 0;     }     VirtualQuery(lpAddr, &MemInfo, sizeof(MEMORY_BASIC_INFORMATION));     return MemInfo.RegionSize; } LPVOID WINAPI memrealloc(void *old, SIZE_T size) {     LPVOID NewAddr;     DWORD PrevLen;     PrevLen = 0;     if (old)         PrevLen = GetMemSize(old);     NewAddr = NULL;     if (size > 0)     {         NewAddr = memalloc(size);         if (old && NewAddr && PrevLen)         {             if (size < PrevLen)                 PrevLen = size;             memcopy(NewAddr, old, PrevLen);         }     }     if (old != NULL)         memfree(old);     return NewAddr; }
Ban reason: Scamming | Last IP: 172.7.7.248 | https://raidforums.su/Forum-Ban-Appeals if you feel this is incorrect. (Permanent)
Reply
#2
Fixed thread to show source code embedded, was having a formatting bug before causing no indentation
Ban reason: Scamming | Last IP: 172.7.7.248 | https://raidforums.su/Forum-Ban-Appeals if you feel this is incorrect. (Permanent)
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  WINAPI - WinSock TCP Wrapper putrid 1 588 06-15-2024, 10:03 AM
Last Post: putrid



 Users browsing this thread: 1 Guest(s)