亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? vmmap.cpp

?? c++的經典之作.是不可缺少的工具.大家可以現在學習
?? CPP
字號:
/******************************************************************************
Module:  VMMap.cpp
Notices: Copyright (c) 2000 Jeffrey Richter
******************************************************************************/


#include "..\CmnHdr.h"     /* See Appendix A. */
#include <psapi.h>
#include <windowsx.h>
#include <tchar.h>
#include <stdio.h>         // For sprintf
#include "..\04-ProcessInfo\Toolhelp.h"
#include "Resource.h"
#include "VMQuery.h"


///////////////////////////////////////////////////////////////////////////////


DWORD g_dwProcessId = 0;  // Which process to walk?
BOOL  g_fExpandRegions = FALSE;
CToolhelp g_toolhelp;


// GetMappedFileName is only on Windows 2000 in PSAPI.DLL
// If this function exists on the host system, we'll use it
typedef DWORD (WINAPI* PFNGETMAPPEDFILENAME)(HANDLE, PVOID, PTSTR, DWORD);
static PFNGETMAPPEDFILENAME g_pfnGetMappedFileName = NULL;


///////////////////////////////////////////////////////////////////////////////


// I use this function to obtain the dump figures in the book.
void CopyControlToClipboard(HWND hwnd) 
{
   TCHAR szClipData[128 * 1024] = { 0 };

   int nCount = ListBox_GetCount(hwnd);
   for (int nNum = 0; nNum < nCount; nNum++) 
   {
      TCHAR szLine[1000];
      ListBox_GetText(hwnd, nNum, szLine);
      _tcscat(szClipData, szLine);
      _tcscat(szClipData, TEXT("\r\n"));
   }        

   OpenClipboard(NULL); 
   EmptyClipboard();

   // Clipboard accepts only data that is in a block allocated 
   // with GlobalAlloc using the GMEM_MOVEABLE and GMEM_DDESHARE flags.
   HGLOBAL hClipData = GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, 
      sizeof(TCHAR) * (_tcslen(szClipData) + 1));
   PTSTR pClipData = (PTSTR) GlobalLock(hClipData);
   
   _tcscpy(pClipData, szClipData);

#ifdef UNICODE
   BOOL fOk = (SetClipboardData(CF_UNICODETEXT, hClipData) == hClipData);
#else
   BOOL fOk = (SetClipboardData(CF_TEXT, hClipData) == hClipData);
#endif
   CloseClipboard();

   if (!fOk) 
   {
      GlobalFree(hClipData);
      chMB("Error putting text on the clipboard");
   }
}


///////////////////////////////////////////////////////////////////////////////


PCTSTR GetMemStorageText(DWORD dwStorage) 
{
   PCTSTR p = TEXT("Unknown");
   switch (dwStorage) 
   {
   case MEM_FREE:    p = TEXT("Free   "); break;
   case MEM_RESERVE: p = TEXT("Reserve"); break;
   case MEM_IMAGE:   p = TEXT("Image  "); break;
   case MEM_MAPPED:  p = TEXT("Mapped "); break;
   case MEM_PRIVATE: p = TEXT("Private"); break;
   }
   return(p);
}


///////////////////////////////////////////////////////////////////////////////


PTSTR GetProtectText(DWORD dwProtect, PTSTR szBuf, BOOL fShowFlags) 
{
   PCTSTR p = TEXT("Unknown");
   switch (dwProtect & ~(PAGE_GUARD | PAGE_NOCACHE | PAGE_WRITECOMBINE)) 
   {
   case PAGE_READONLY:          p = TEXT("-R--"); break;
   case PAGE_READWRITE:         p = TEXT("-RW-"); break;
   case PAGE_WRITECOPY:         p = TEXT("-RWC"); break;
   case PAGE_EXECUTE:           p = TEXT("E---"); break;
   case PAGE_EXECUTE_READ:      p = TEXT("ER--"); break;
   case PAGE_EXECUTE_READWRITE: p = TEXT("ERW-"); break;
   case PAGE_EXECUTE_WRITECOPY: p = TEXT("ERWC"); break;
   case PAGE_NOACCESS:          p = TEXT("----"); break;
   }
   _tcscpy(szBuf, p);
   if (fShowFlags) 
   {
      _tcscat(szBuf, TEXT(" "));
      _tcscat(szBuf, (dwProtect & PAGE_GUARD)        ? TEXT("G") : TEXT("-"));
      _tcscat(szBuf, (dwProtect & PAGE_NOCACHE)      ? TEXT("N") : TEXT("-"));
      _tcscat(szBuf, (dwProtect & PAGE_WRITECOMBINE) ? TEXT("W") : TEXT("-"));
   }
   return(szBuf);
}


///////////////////////////////////////////////////////////////////////////////


void ConstructRgnInfoLine(HANDLE hProcess, PVMQUERY pVMQ, PTSTR szLine, int nMaxLen) 
{
   _stprintf(szLine, TEXT("%p     %s  %16u  "),
      pVMQ->pvRgnBaseAddress,
      GetMemStorageText(pVMQ->dwRgnStorage),
      pVMQ->RgnSize);

   if (pVMQ->dwRgnStorage != MEM_FREE) 
   {
      wsprintf(_tcschr(szLine, 0), TEXT("%5u  "), pVMQ->dwRgnBlocks);
      GetProtectText(pVMQ->dwRgnProtection, _tcschr(szLine, 0), FALSE);
   }

   _tcscat(szLine, TEXT("     "));

   // Try to obtain the module pathname for this region.
   int nLen = _tcslen(szLine);
   if (pVMQ->pvRgnBaseAddress != NULL) 
   {
      MODULEENTRY32 me = { sizeof(me) };
      
      if (g_toolhelp.ModuleFind(pVMQ->pvRgnBaseAddress, &me)) 
	  {
         lstrcat(&szLine[nLen], me.szExePath);
      } 
	  else 
	  {
         // This is not a module; see if it's a memory-mapped file
         if (g_pfnGetMappedFileName != NULL) 
		 {
            DWORD d = g_pfnGetMappedFileName(hProcess, pVMQ->pvRgnBaseAddress, szLine + nLen, nMaxLen - nLen);
            if (d == 0) 
			{
               // NOTE: GetMappedFileName modifies the string when it fails
               szLine[nLen] = 0;
            }
         }
      }
   }

   if (pVMQ->fRgnIsAStack) 
   {
      _tcscat(szLine, TEXT("Thread Stack"));
   }
}


///////////////////////////////////////////////////////////////////////////////


void ConstructBlkInfoLine(PVMQUERY pVMQ, PTSTR szLine, int nMaxLen) 
{
   _stprintf(szLine, TEXT("   %p  %s  %16u         "),
      pVMQ->pvBlkBaseAddress,
      GetMemStorageText(pVMQ->dwBlkStorage),
      pVMQ->BlkSize);

   if (pVMQ->dwBlkStorage != MEM_FREE) 
   {
      GetProtectText(pVMQ->dwBlkProtection, _tcschr(szLine, 0), TRUE);
   }
}


///////////////////////////////////////////////////////////////////////////////


void Refresh(HWND hwndLB, DWORD dwProcessId, BOOL fExpandRegions) 
{
   // Delete contents of list box & add a horizontal scroll bar
   ListBox_ResetContent(hwndLB);
   ListBox_SetHorizontalExtent(hwndLB, 300 * LOWORD(GetDialogBaseUnits()));

   // Is the process still running?
   HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, dwProcessId);

   if (hProcess == NULL) 
   {
      ListBox_AddString(hwndLB, TEXT(""));   // Blank line, looks better
      ListBox_AddString(hwndLB, TEXT("    The process ID identifies a process that is not running"));
      return;
   }

   // Grab a new snapshot of the process
   g_toolhelp.CreateSnapshot(TH32CS_SNAPALL, dwProcessId);
   
   // Walk the virtual address space, adding entries to the list box.
   BOOL fOk = TRUE;
   PVOID pvAddress = NULL;

   SetWindowRedraw(hwndLB, FALSE);
   while (fOk) 
   {
      VMQUERY vmq;
      fOk = VMQuery(hProcess, pvAddress, &vmq);

      if (fOk) 
	  {
         // Construct the line to be displayed, and add it to the list box.
         TCHAR szLine[1024];
         ConstructRgnInfoLine(hProcess, &vmq, szLine, sizeof(szLine));
         ListBox_AddString(hwndLB, szLine);

         if (fExpandRegions) 
		 {
            for (DWORD dwBlock = 0; fOk && (dwBlock < vmq.dwRgnBlocks); dwBlock++) 
			{
               ConstructBlkInfoLine(&vmq, szLine, sizeof(szLine));
               ListBox_AddString(hwndLB, szLine);

               // Get the address of the next region to test.
               pvAddress = ((PBYTE) pvAddress + vmq.BlkSize);
               if (dwBlock < vmq.dwRgnBlocks - 1) 
			   {
                  // Don't query the memory info after the last block.
                  fOk = VMQuery(hProcess, pvAddress, &vmq);
               }
            }
         }
         // Get the address of the next region to test.
         pvAddress = ((PBYTE) vmq.pvRgnBaseAddress + vmq.RgnSize);
      }
   }
   SetWindowRedraw(hwndLB, TRUE);
   CloseHandle(hProcess);
}


///////////////////////////////////////////////////////////////////////////////


BOOL Dlg_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam) 
{
   chSETDLGICONS(hwnd, IDI_VMMAP);

   // Show which process we're walking in the window's caption
   TCHAR szCaption[MAX_PATH * 2];
   GetWindowText(hwnd, szCaption, chDIMOF(szCaption));
   g_toolhelp.CreateSnapshot(TH32CS_SNAPALL, g_dwProcessId);
   PROCESSENTRY32 pe = { sizeof(pe) };
   wsprintf(&szCaption[lstrlen(szCaption)], TEXT(" (PID=%u \"%s\")"), 
      g_dwProcessId, g_toolhelp.ProcessFind(g_dwProcessId, &pe) 
         ? pe.szExeFile : TEXT("unknown"));
   SetWindowText(hwnd, szCaption);

   // VMMap has so much info to show, let's maximize it by default
   ShowWindow(hwnd, SW_MAXIMIZE);

   // Force the list box to refresh itself
   Refresh(GetDlgItem(hwnd, IDC_LISTBOX), g_dwProcessId, g_fExpandRegions);
   return(TRUE);
}


///////////////////////////////////////////////////////////////////////////////


void Dlg_OnSize(HWND hwnd, UINT state, int cx, int cy) 
{
   // The list box always fills the whole client area
   SetWindowPos(GetDlgItem(hwnd, IDC_LISTBOX), NULL, 0, 0, cx, cy, SWP_NOZORDER);
}


///////////////////////////////////////////////////////////////////////////////


void Dlg_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) 
{
   switch (id) 
   {
      case IDCANCEL:
         EndDialog(hwnd, id);
         break;

      case ID_REFRESH:
         Refresh(GetDlgItem(hwnd, IDC_LISTBOX), g_dwProcessId, g_fExpandRegions);
         break;

      case ID_EXPANDREGIONS:
         g_fExpandRegions = g_fExpandRegions ? FALSE: TRUE;
         Refresh(GetDlgItem(hwnd, IDC_LISTBOX), g_dwProcessId, g_fExpandRegions);
         break;

      case ID_COPYTOCLIPBOARD:
         CopyControlToClipboard(GetDlgItem(hwnd, IDC_LISTBOX));
         break;
   }
}


///////////////////////////////////////////////////////////////////////////////


INT_PTR WINAPI Dlg_Proc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 
{
   switch (uMsg) 
   {
      chHANDLE_DLGMSG(hwnd, WM_INITDIALOG, Dlg_OnInitDialog);
      chHANDLE_DLGMSG(hwnd, WM_COMMAND,    Dlg_OnCommand);
      chHANDLE_DLGMSG(hwnd, WM_SIZE,       Dlg_OnSize);
   }
   return(FALSE);
}


///////////////////////////////////////////////////////////////////////////////


int WINAPI _tWinMain(HINSTANCE hinstExe, HINSTANCE, PTSTR pszCmdLine, int) 
{
   CToolhelp::EnableDebugPrivilege();

   // Try to load PSAPI.DLL and get the address of GetMappedFileName
   HMODULE hmodPSAPI = LoadLibrary(TEXT("PSAPI"));
   if (hmodPSAPI != NULL) 
   {
#ifdef UNICODE
      g_pfnGetMappedFileName = (PFNGETMAPPEDFILENAME) 
         GetProcAddress(hmodPSAPI, "GetMappedFileNameW");
#else
      g_pfnGetMappedFileName = (PFNGETMAPPEDFILENAME) 
         GetProcAddress(hmodPSAPI, "GetMappedFileNameA");
#endif      
   }

   g_dwProcessId = _ttoi(pszCmdLine);
   if (g_dwProcessId == 0) 
   {
      g_dwProcessId = GetCurrentProcessId();
   }

   DialogBox(hinstExe, MAKEINTRESOURCE(IDD_VMMAP), NULL, Dlg_Proc);

   if (hmodPSAPI != NULL) 
      FreeLibrary(hmodPSAPI); // Free PSAPI.DLL if we loaded it

   return(0);
}


//////////////////////////////// End of File //////////////////////////////////

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线观看成人免费视频| 亚洲人成电影网站色mp4| 日韩电影免费在线观看网站| 日韩欧美一区二区在线视频| 亚洲香蕉伊在人在线观| 欧美亚洲综合色| 日韩精彩视频在线观看| 日韩欧美国产不卡| 懂色中文一区二区在线播放| 1024成人网| 欧美日韩精品一区二区三区| 蜜臀av亚洲一区中文字幕| 久久亚区不卡日本| a亚洲天堂av| 亚洲国产精品久久久久秋霞影院| 欧美日韩另类国产亚洲欧美一级| 日韩经典中文字幕一区| 国产日产欧美一区二区三区| 在线影视一区二区三区| 麻豆91免费观看| 中文字幕在线免费不卡| 555www色欧美视频| 国产黄色成人av| 亚洲午夜久久久| 久久久欧美精品sm网站| 91美女蜜桃在线| 蜜桃视频一区二区三区在线观看| 欧美国产乱子伦| 欧美片在线播放| 国产成人啪免费观看软件| 亚洲一区视频在线| 国产日韩欧美精品在线| 欧美日韩综合在线| 成人免费精品视频| 蜜桃在线一区二区三区| 亚洲欧洲日产国码二区| 欧美一区二区三区在线| 91捆绑美女网站| 精久久久久久久久久久| 亚洲福利一区二区| 国产精品高潮呻吟| 日韩欧美国产成人一区二区| 91久久精品午夜一区二区| 黄一区二区三区| 亚洲国产精品视频| 国产精品久久久久久久久免费相片| 欧美高清精品3d| 色网站国产精品| 成人午夜视频福利| 久久99日本精品| 五月天欧美精品| 亚洲三级在线播放| 久久精子c满五个校花| 正在播放一区二区| 欧美在线高清视频| 97aⅴ精品视频一二三区| 国产成人亚洲综合a∨婷婷图片| 午夜视频一区二区三区| 一区二区三区在线视频免费| 中文字幕制服丝袜成人av| 久久综合狠狠综合久久激情| 日韩视频免费观看高清完整版在线观看 | 美女在线观看视频一区二区| 日韩伦理免费电影| 国产精品久久毛片av大全日韩| 久久这里只有精品首页| 日韩片之四级片| 91精品国产全国免费观看| 欧美亚洲动漫精品| 91免费版pro下载短视频| 国产精品一区二区在线播放| 久久99国内精品| 男女男精品视频网| 美女国产一区二区三区| 亚洲国产精品天堂| 婷婷成人综合网| 亚洲超碰97人人做人人爱| 一区二区三区在线视频免费观看| 国产精品国产馆在线真实露脸 | 蜜臀久久久久久久| 天堂资源在线中文精品| 亚洲va天堂va国产va久| 亚洲一区二区在线免费看| 亚洲一区二区欧美激情| 亚洲一区中文在线| 亚洲va欧美va人人爽午夜| 婷婷久久综合九色国产成人 | 精品欧美乱码久久久久久1区2区| 欧美嫩在线观看| 91精品国产色综合久久不卡蜜臀| 欧美久久久久久久久| 欧美一区二区精品在线| 日韩一区二区三区在线观看| 日韩欧美一级二级三级久久久| 日韩欧美一二区| 欧美精品一区二区三区蜜桃视频| 欧美xxx久久| 日本一区二区三区电影| 亚洲欧洲国产日本综合| 亚洲国产视频在线| 轻轻草成人在线| 狠狠色丁香婷婷综合久久片| 国产乱国产乱300精品| 99热在这里有精品免费| 欧美色爱综合网| 日韩欧美国产系列| 国产女人aaa级久久久级| 亚洲欧美自拍偷拍| 日韩成人免费在线| 成人av在线一区二区| 91黄色激情网站| 日韩精品一区二区三区视频播放| 久久精品人人做人人综合 | 三级一区在线视频先锋| 狠狠v欧美v日韩v亚洲ⅴ| 成人av电影在线| 欧美精品精品一区| 中文子幕无线码一区tr| 亚洲成人免费影院| 国产不卡免费视频| 欧美日韩一区二区不卡| 国产日韩欧美在线一区| 亚洲第一综合色| 成人午夜又粗又硬又大| 欧美一级理论片| 亚洲欧美日韩小说| 精品一区在线看| 日本乱人伦一区| 久久综合成人精品亚洲另类欧美| 玉足女爽爽91| 国产98色在线|日韩| 91精品婷婷国产综合久久性色| 欧美激情综合网| 婷婷亚洲久悠悠色悠在线播放| 国产999精品久久| 欧美一区二区三区四区五区 | 国产欧美日韩三区| 日日噜噜夜夜狠狠视频欧美人| eeuss鲁一区二区三区| 欧美一卡二卡在线观看| 亚洲精品中文字幕乱码三区| 国产成人av资源| 日韩欧美一区二区久久婷婷| 亚洲国产精品久久久久婷婷884| 高清国产一区二区| 欧美tickle裸体挠脚心vk| 亚洲444eee在线观看| 成人app在线观看| 久久精品亚洲精品国产欧美kt∨ | 免费成人在线播放| 欧美丝袜自拍制服另类| 中文字幕在线不卡| 成人黄色一级视频| 国产欧美一区二区精品秋霞影院| 麻豆久久久久久| 日韩欧美精品在线视频| 香蕉久久一区二区不卡无毒影院| 91高清视频免费看| 亚洲免费在线观看| 成人精品鲁一区一区二区| 国产无一区二区| 国产不卡视频在线播放| 欧美激情一区二区三区在线| 国产制服丝袜一区| 久久天堂av综合合色蜜桃网| 久久精品国产一区二区| 9191国产精品| 美女任你摸久久| 欧美哺乳videos| 国内精品伊人久久久久av影院| 日韩欧美一区在线观看| 免费成人在线观看| 欧美精品一区二区三区在线播放| 加勒比av一区二区| 久久九九国产精品| 成人激情黄色小说| 亚洲精品高清在线| 欧美日韩激情在线| 日本不卡1234视频| 26uuu国产在线精品一区二区| 国产一区二区在线观看视频| 久久久久久久精| 成人黄色在线网站| 亚洲影院免费观看| 91精品黄色片免费大全| 精品一区在线看| 国产精品成人一区二区艾草 | 日韩一区二区三区四区五区六区| 麻豆一区二区三| 国产精品午夜免费| 日本韩国欧美三级| 日本大胆欧美人术艺术动态| 久久久久成人黄色影片| 91浏览器入口在线观看| 天天影视网天天综合色在线播放| 欧美r级在线观看| 91免费观看在线| 美女视频黄免费的久久| 国产精品久久网站| 欧美日韩一区二区在线观看|