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

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

?? vmmap.cpp

?? Windows via C/C++, Fifth Edition圖書源代碼
?? CPP
字號:
/******************************************************************************
Module:  VMMap.cpp
Notices: Copyright (c) 2008 Jeffrey Richter & Christophe Nasarre
******************************************************************************/


#include "..\CommonFiles\CmnHdr.h"     /* See Appendix A. */
#include "..\CommonFiles\Toolhelp.h"
#include <psapi.h>
#include <windowsx.h>
#include <tchar.h>
#include "Resource.h"
#include "VMQuery.h"
#include <strsafe.h>


// Look for the .lib corresponding to psapi.dll
#pragma comment(lib, "psapi")


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


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



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


// 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_s(szClipData, _countof(szClipData), szLine);
      _tcscat_s(szClipData, _countof(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_s(pClipData, _tcslen(szClipData) + 1, szClipData);

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

   if (!bOk) {
      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, size_t chSize, 
   BOOL bShowFlags) {

   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_s(szBuf, chSize, p);
   if (bShowFlags) {
      _tcscat_s(szBuf, chSize, TEXT(" "));
      _tcscat_s(szBuf, chSize, (dwProtect & PAGE_GUARD)        
         ? TEXT("G") : TEXT("-"));
      _tcscat_s(szBuf, chSize, (dwProtect & PAGE_NOCACHE)      
         ? TEXT("N") : TEXT("-"));
      _tcscat_s(szBuf, chSize, (dwProtect & PAGE_WRITECOMBINE) 
         ? TEXT("W") : TEXT("-"));
   }
   return(szBuf);
}


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


void ConstructRgnInfoLine(HANDLE hProcess, PVMQUERY pVMQ, 
   PTSTR szLine, int cchMaxLen) {

   StringCchPrintf(szLine, cchMaxLen, TEXT("%p\t%s\t%12u\t"),
      pVMQ->pvRgnBaseAddress,
      GetMemStorageText(pVMQ->dwRgnStorage),
      pVMQ->RgnSize);

   if (pVMQ->dwRgnStorage != MEM_FREE) {
      StringCchPrintf(_tcschr(szLine, 0), cchMaxLen - _tcslen(szLine), 
         TEXT("%u\t"), pVMQ->dwRgnBlocks);
      GetProtectText(pVMQ->dwRgnProtection, _tcschr(szLine, 0), 
         cchMaxLen - _tcslen(szLine), FALSE);
   } else {
      _tcscat_s(szLine, cchMaxLen, TEXT("\t"));
   }

   _tcscat_s(szLine, cchMaxLen, TEXT("\t"));

   // Try to obtain the module pathname for this region.
   if ((pVMQ->dwRgnStorage != MEM_FREE) && (pVMQ->pvRgnBaseAddress != NULL)) {

      MODULEENTRY32 me = { sizeof(me) };
      if (g_toolhelp.ModuleFind(pVMQ->pvRgnBaseAddress, &me)) {
         _tcscat_s(szLine, cchMaxLen, me.szExePath);
      } else {
		 int cchLen = _tcslen(szLine);
         // This is not a module; see if it's a memory-mapped file
         DWORD dwLen = GetMappedFileName(hProcess, 
            pVMQ->pvRgnBaseAddress, szLine + cchLen, cchMaxLen - cchLen);
         if (dwLen == 0) {
            // NOTE: GetMappedFileName modifies the string when it fails
            szLine[cchLen] = 0;
         }
      }
   }

   if (pVMQ->bRgnIsAStack) {
      _tcscat_s(szLine, cchMaxLen, TEXT("Thread Stack"));
   }
}


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


void ConstructBlkInfoLine(PVMQUERY pVMQ, PTSTR szLine, int cchMaxLen) {

   _stprintf_s(szLine, cchMaxLen, TEXT("   %p\t%s\t%12u\t"),
      pVMQ->pvBlkBaseAddress,
      GetMemStorageText(pVMQ->dwBlkStorage),
      pVMQ->BlkSize);

   if (pVMQ->dwBlkStorage != MEM_FREE) {
      // add an empty cell for number of regions
      _tcscat_s(szLine, cchMaxLen, TEXT("\t"));
      GetProtectText(pVMQ->dwBlkProtection, _tcschr(szLine, 0), 
         cchMaxLen - _tcslen(szLine), TRUE);
   } else {
      _tcscat_s(szLine, cchMaxLen, TEXT("\t"));
   }

   _tcscat_s(szLine, cchMaxLen, TEXT("\t"));
}


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


void Refresh(HWND hWndLB, DWORD dwProcessId, BOOL bExpandRegions) {

   // 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 bOk = TRUE;
   PVOID pvAddress = NULL;

   SetWindowRedraw(hWndLB, FALSE);
   while (bOk) {

      VMQUERY vmq;
      bOk = VMQuery(hProcess, pvAddress, &vmq);

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

         if (bExpandRegions) {
            for (DWORD dwBlock = 0; bOk && (dwBlock < vmq.dwRgnBlocks);
               dwBlock++) {

               ConstructBlkInfoLine(&vmq, szLine, _countof(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.
                  bOk = 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, _countof(szCaption));
   g_toolhelp.CreateSnapshot(TH32CS_SNAPALL, g_dwProcessId);
   PROCESSENTRY32 pe = { sizeof(pe) };
   StringCchPrintf(&szCaption[_tcslen(szCaption)], 
      _countof(szCaption) - _tcslen(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);

   // Set the columns width
   int aTabs[5];
   aTabs[0] = 48;
   aTabs[1] = aTabs[0] + 40;
   aTabs[2] = aTabs[1] + 52;  // count
   aTabs[3] = aTabs[2] + 12;  // flags
   aTabs[4] = aTabs[3] + 20;  // description
   ListBox_SetTabStops(GetDlgItem(hWnd, IDC_LISTBOX), _countof(aTabs), aTabs);

   // Force the list box to refresh itself
   Refresh(GetDlgItem(hWnd, IDC_LISTBOX), g_dwProcessId, g_bExpandRegions);
   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_bExpandRegions);
         break;

      case ID_EXPANDREGIONS:
         g_bExpandRegions = g_bExpandRegions ? FALSE: TRUE;
         Refresh(GetDlgItem(hWnd, IDC_LISTBOX), 
            g_dwProcessId, g_bExpandRegions);
         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::EnablePrivilege(SE_DEBUG_NAME, TRUE);

   g_dwProcessId = _ttoi(pszCmdLine);
   if (g_dwProcessId == 0) {
      g_dwProcessId = GetCurrentProcessId();
      MessageBox(NULL, 
         TEXT("No Process Id passed on command line. Defaulting to this process"), 
         TEXT("VMMap"), MB_ICONINFORMATION);
   }

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

   return(0);
}



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


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜日韩在线电影| 国产福利一区在线| 久久精品夜夜夜夜久久| 99精品国产热久久91蜜凸| 日韩精品免费视频人成| 亚洲欧美一区二区久久| 国产午夜亚洲精品理论片色戒 | 欧美在线|欧美| 国产精品一线二线三线| 亚洲成av人影院在线观看网| 成人免费小视频| 久久这里都是精品| 欧美福利电影网| 色播五月激情综合网| 成人av动漫网站| 久久69国产一区二区蜜臀| 亚洲午夜在线电影| 亚洲女同一区二区| 中文字幕字幕中文在线中不卡视频| 精品国产乱码久久久久久闺蜜| 欧美日本不卡视频| 欧美亚洲图片小说| 一本大道综合伊人精品热热| 成人性色生活片免费看爆迷你毛片| 美国三级日本三级久久99| 亚洲愉拍自拍另类高清精品| 国产精品成人一区二区三区夜夜夜| 久久综合久久99| 日韩女优av电影| 欧美一级艳片视频免费观看| 欧美日韩黄色一区二区| 在线观看成人小视频| 91丝袜呻吟高潮美腿白嫩在线观看| 国产精品1区二区.| 国产精品亚洲午夜一区二区三区| 美女一区二区视频| 免费成人av在线| 久久av老司机精品网站导航| 日本欧美在线看| 日韩高清一级片| 日韩和欧美一区二区| 男男视频亚洲欧美| 蜜臀av性久久久久蜜臀av麻豆 | 亚洲少妇最新在线视频| 综合分类小说区另类春色亚洲小说欧美| 欧美激情一区二区三区在线| 国产精品久久久久久久久免费相片| 国产精品欧美久久久久无广告| 成人免费一区二区三区视频| 亚洲免费在线看| 亚洲午夜激情网站| 日韩激情一区二区| 国产在线日韩欧美| 成人午夜看片网址| 91成人免费在线视频| 制服丝袜亚洲网站| 久久综合狠狠综合| 综合网在线视频| 日精品一区二区三区| 久久精品国产亚洲高清剧情介绍| 国产麻豆精品视频| av亚洲精华国产精华| 欧美性色欧美a在线播放| 日韩欧美综合在线| 国产亚洲精品中文字幕| 亚洲天堂免费在线观看视频| 亚洲图片欧美综合| 国产综合色视频| av成人免费在线| 欧美日本国产视频| 国产网站一区二区| 亚洲国产一二三| 国产在线一区二区综合免费视频| gogogo免费视频观看亚洲一| 欧美军同video69gay| 亚洲精品在线观看网站| 亚洲欧美另类图片小说| 蜜桃免费网站一区二区三区| 国产成人超碰人人澡人人澡| 在线看不卡av| wwwwxxxxx欧美| 一区二区三区成人| 极品瑜伽女神91| 在线免费亚洲电影| www激情久久| 亚洲一卡二卡三卡四卡无卡久久 | 欧美一区在线视频| 欧美国产国产综合| 日韩成人一级大片| 99久久精品国产观看| 精品免费视频一区二区| 一区二区三区精品视频| 国精品**一区二区三区在线蜜桃| 欧美在线观看一区二区| 国产亚洲综合色| 亚洲高清免费视频| 91免费在线看| 久久精品一区八戒影视| 日本va欧美va精品| 在线观看免费成人| 国产精品福利在线播放| 紧缚捆绑精品一区二区| 欧美精品xxxxbbbb| 亚洲精品欧美综合四区| 国产成人精品一区二| 欧美tickling挠脚心丨vk| 亚洲国产美女搞黄色| 97se亚洲国产综合在线| 久久这里只有精品视频网| 蜜臀精品久久久久久蜜臀| 欧美日韩一卡二卡三卡| 亚洲欧美乱综合| 99久久婷婷国产| 欧美国产一区二区| 国产美女娇喘av呻吟久久| 欧美精品粉嫩高潮一区二区| 一区二区三区在线影院| www.亚洲激情.com| 国产亲近乱来精品视频| 国产美女久久久久| 久久蜜臀中文字幕| 麻豆精品在线看| 日韩一区二区三免费高清| 亚洲成人你懂的| 欧美日韩精品一区二区在线播放| 一区二区三区在线观看动漫| 99re热视频精品| 中文字幕视频一区二区三区久| 久久精品国产网站| 精品捆绑美女sm三区| 久久99精品久久久久久久久久久久| 51精品国自产在线| 日韩av中文在线观看| 日韩午夜三级在线| 免费日本视频一区| 精品国产亚洲在线| 国产毛片精品国产一区二区三区| 日韩视频一区二区在线观看| 美女一区二区在线观看| 2欧美一区二区三区在线观看视频| 日本不卡在线视频| 精品少妇一区二区三区在线播放| 美国欧美日韩国产在线播放| xnxx国产精品| 国产xxx精品视频大全| 中文字幕欧美三区| 91小宝寻花一区二区三区| 亚洲精品久久7777| 欧美精品久久久久久久久老牛影院| 丝袜美腿亚洲色图| 日韩女同互慰一区二区| 国产精品99久久久| 国产精品福利影院| 欧美人体做爰大胆视频| 日韩精品一级中文字幕精品视频免费观看 | 欧美国产日韩a欧美在线观看| 成人免费观看av| 亚洲图片一区二区| 欧美大肚乱孕交hd孕妇| 国产福利视频一区二区三区| 亚洲欧美自拍偷拍色图| 欧美午夜精品一区二区三区| 免费成人av资源网| 国产精品视频线看| 欧美午夜电影在线播放| 蜜臀av亚洲一区中文字幕| 国产香蕉久久精品综合网| 91麻豆国产福利精品| 性欧美大战久久久久久久久| 欧美精品一区二区久久久| 99九九99九九九视频精品| 五月婷婷综合网| 国产亚洲欧美日韩俺去了| 在线观看日韩精品| 美女看a上一区| 亚洲视频免费在线观看| 91麻豆精品国产91久久久更新时间| 国产裸体歌舞团一区二区| 亚洲欧美激情插| 欧美精品一区二区三| 日本高清不卡在线观看| 久久66热re国产| 亚洲精品国产无天堂网2021| 日韩视频一区二区三区| 99久久伊人网影院| 久久99国产精品尤物| 亚洲欧洲综合另类在线| 久久伊人蜜桃av一区二区| 色一情一乱一乱一91av| 久久99九九99精品| 亚洲国产aⅴ天堂久久| 国产日韩三级在线| 欧美年轻男男videosbes| 成人av在线播放网址| 美女网站一区二区| 亚洲一区二区欧美| 日韩美女久久久| 国产午夜精品理论片a级大结局 | 欧美视频一区在线| 成人一级片网址|