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

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

?? vmquery.cpp

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


#include "..\CommonFiles\CmnHdr.h"     /* See Appendix A. */
#include <windowsx.h>
#include "VMQuery.h"


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


// Helper structure
typedef struct {
   SIZE_T RgnSize;
   DWORD  dwRgnStorage;     // MEM_*: Free, Image, Mapped, Private
   DWORD  dwRgnBlocks;
   DWORD  dwRgnGuardBlks;   // If > 0, region contains thread stack
   BOOL   bRgnIsAStack;     // TRUE if region contains thread stack
} VMQUERY_HELP;


// This global, static variable holds the allocation granularity value for 
// this CPU platform. Initialized the first time VMQuery is called.
static DWORD gs_dwAllocGran = 0;


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


// Iterates through a region's blocks and returns findings in VMQUERY_HELP
static BOOL VMQueryHelp(HANDLE hProcess, LPCVOID pvAddress, 
   VMQUERY_HELP *pVMQHelp) {

   ZeroMemory(pVMQHelp, sizeof(*pVMQHelp));

   // Get address of region containing passed memory address.
   MEMORY_BASIC_INFORMATION mbi;
   BOOL bOk = (VirtualQueryEx(hProcess, pvAddress, &mbi, sizeof(mbi)) 
      == sizeof(mbi));

   if (!bOk)
      return(bOk);   // Bad memory address, return failure

   // Walk starting at the region's base address (which never changes)
   PVOID pvRgnBaseAddress = mbi.AllocationBase;

   // Walk starting at the first block in the region (changes in the loop)
   PVOID pvAddressBlk = pvRgnBaseAddress;

   // Save the memory type of the physical storage block.
   pVMQHelp->dwRgnStorage = mbi.Type;

   for (;;) {
      // Get info about the current block.
      bOk = (VirtualQueryEx(hProcess, pvAddressBlk, &mbi, sizeof(mbi)) 
         == sizeof(mbi));
      if (!bOk)
         break;   // Couldn't get the information; end loop.

      // Is this block in the same region?
      if (mbi.AllocationBase != pvRgnBaseAddress)
         break;   // Found a block in the next region; end loop.

      // We have a block contained in the region.

      pVMQHelp->dwRgnBlocks++;             // Add another block to the region
      pVMQHelp->RgnSize += mbi.RegionSize; // Add block's size to region size

      // If block has PAGE_GUARD attribute, add 1 to this counter
      if ((mbi.Protect & PAGE_GUARD) == PAGE_GUARD)
         pVMQHelp->dwRgnGuardBlks++;

      // Take a best guess as to the type of physical storage committed to the
      // block. This is a guess because some blocks can convert from MEM_IMAGE
      // to MEM_PRIVATE or from MEM_MAPPED to MEM_PRIVATE; MEM_PRIVATE can
      // always be overridden by MEM_IMAGE or MEM_MAPPED.
      if (pVMQHelp->dwRgnStorage == MEM_PRIVATE)
         pVMQHelp->dwRgnStorage = mbi.Type;

      // Get the address of the next block.
      pvAddressBlk = (PVOID) ((PBYTE) pvAddressBlk + mbi.RegionSize);
   }

   // After examining the region, check to see whether it is a thread stack
   // Windows Vista: Assume stack if region has at least 1 PAGE_GUARD block
   pVMQHelp->bRgnIsAStack = (pVMQHelp->dwRgnGuardBlks > 0);

   return(TRUE);
}


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


BOOL VMQuery(HANDLE hProcess, LPCVOID pvAddress, PVMQUERY pVMQ) {

   if (gs_dwAllocGran == 0) {
      // Set allocation granularity if this is the first call
      SYSTEM_INFO sinf;
      GetSystemInfo(&sinf);
      gs_dwAllocGran = sinf.dwAllocationGranularity;
   }

   ZeroMemory(pVMQ, sizeof(*pVMQ));

   // Get the MEMORY_BASIC_INFORMATION for the passed address.
   MEMORY_BASIC_INFORMATION mbi;
   BOOL bOk = (VirtualQueryEx(hProcess, pvAddress, &mbi, sizeof(mbi)) 
      == sizeof(mbi));

   if (!bOk)
      return(bOk);   // Bad memory address; return failure

   // The MEMORY_BASIC_INFORMATION structure contains valid information.
   // Time to start setting the members of our own VMQUERY structure.

   // First, fill in the block members. We'll fill the region members later.
   switch (mbi.State) {
      case MEM_FREE:       // Free block (not reserved)
         pVMQ->pvBlkBaseAddress = NULL;
         pVMQ->BlkSize = 0;
         pVMQ->dwBlkProtection = 0;
         pVMQ->dwBlkStorage = MEM_FREE;
         break;

      case MEM_RESERVE:    // Reserved block without committed storage in it.
         pVMQ->pvBlkBaseAddress = mbi.BaseAddress;
         pVMQ->BlkSize = mbi.RegionSize;

         // For an uncommitted block, mbi.Protect is invalid. So we will 
         // show that the reserved block inherits the protection attribute 
         // of the region in which it is contained.
         pVMQ->dwBlkProtection = mbi.AllocationProtect;  
         pVMQ->dwBlkStorage = MEM_RESERVE;
         break;

      case MEM_COMMIT:     // Reserved block with committed storage in it.
         pVMQ->pvBlkBaseAddress = mbi.BaseAddress;
         pVMQ->BlkSize = mbi.RegionSize;
         pVMQ->dwBlkProtection = mbi.Protect;   
         pVMQ->dwBlkStorage = mbi.Type;
         break;

      default:
          DebugBreak();
          break;
   }

   // Now fill in the region data members.
   VMQUERY_HELP VMQHelp;
   switch (mbi.State) {
      case MEM_FREE:       // Free block (not reserved)
         pVMQ->pvRgnBaseAddress = mbi.BaseAddress;
         pVMQ->dwRgnProtection  = mbi.AllocationProtect;
         pVMQ->RgnSize          = mbi.RegionSize;
         pVMQ->dwRgnStorage     = MEM_FREE;
         pVMQ->dwRgnBlocks      = 0;
         pVMQ->dwRgnGuardBlks   = 0;
         pVMQ->bRgnIsAStack     = FALSE;
         break;

      case MEM_RESERVE:    // Reserved block without committed storage in it.
         pVMQ->pvRgnBaseAddress = mbi.AllocationBase;
         pVMQ->dwRgnProtection  = mbi.AllocationProtect;

         // Iterate through all blocks to get complete region information.         
         VMQueryHelp(hProcess, pvAddress, &VMQHelp);

         pVMQ->RgnSize          = VMQHelp.RgnSize;
         pVMQ->dwRgnStorage     = VMQHelp.dwRgnStorage;
         pVMQ->dwRgnBlocks      = VMQHelp.dwRgnBlocks;
         pVMQ->dwRgnGuardBlks   = VMQHelp.dwRgnGuardBlks;
         pVMQ->bRgnIsAStack     = VMQHelp.bRgnIsAStack;
         break;

      case MEM_COMMIT:     // Reserved block with committed storage in it.
         pVMQ->pvRgnBaseAddress = mbi.AllocationBase;
         pVMQ->dwRgnProtection  = mbi.AllocationProtect;

         // Iterate through all blocks to get complete region information.         
         VMQueryHelp(hProcess, pvAddress, &VMQHelp);

         pVMQ->RgnSize          = VMQHelp.RgnSize;
         pVMQ->dwRgnStorage     = VMQHelp.dwRgnStorage;
         pVMQ->dwRgnBlocks      = VMQHelp.dwRgnBlocks;
         pVMQ->dwRgnGuardBlks   = VMQHelp.dwRgnGuardBlks;
         pVMQ->bRgnIsAStack     = VMQHelp.bRgnIsAStack;
         break;

      default:
          DebugBreak();
          break;
   }

   return(bOk);
}


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

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲影院在线观看| 欧美在线视频不卡| 欧美日韩中文字幕一区二区| 日韩女优毛片在线| 伊人性伊人情综合网| 国产99一区视频免费| 4438x成人网最大色成网站| 国产精品久久久久婷婷二区次| 亚洲国产乱码最新视频| 国产福利91精品| 精品久久久久一区| 亚洲不卡在线观看| 色综合天天综合在线视频| 2023国产精华国产精品| 三级一区在线视频先锋| 一本一本大道香蕉久在线精品| 久久免费精品国产久精品久久久久 | 国产露脸91国语对白| 欧美高清你懂得| 图片区小说区区亚洲影院| 日本精品免费观看高清观看| 中文字幕在线播放不卡一区| 国产成人综合在线播放| 精品区一区二区| 美国毛片一区二区三区| 欧美精品在线观看播放| 亚洲福利电影网| 欧美另类z0zxhd电影| 亚洲韩国精品一区| 欧美日韩国产在线观看| 亚洲大片在线观看| 欧美日韩国产美| 日本欧美大码aⅴ在线播放| 欧美日韩精品系列| 全国精品久久少妇| 日韩一区二区三区观看| 精品一区二区三区在线观看| 欧美大片国产精品| 国产精品中文字幕日韩精品| 久久久久高清精品| 高清国产午夜精品久久久久久| 中文字幕av一区 二区| 成人成人成人在线视频| 亚洲美女免费视频| 色av综合在线| 奇米影视一区二区三区| 欧美mv日韩mv国产网站app| 久久se这里有精品| 国产欧美一区二区精品性| 成人99免费视频| 亚洲一区二区三区四区在线免费观看 | 亚洲一区二区三区四区在线观看| 在线这里只有精品| 免费成人在线影院| 久久久99久久| 99精品国产91久久久久久| 亚洲国产成人av网| 日韩欧美高清一区| 国产乱人伦偷精品视频免下载| 国产精品久久久久久久久果冻传媒| 一本一本久久a久久精品综合麻豆| 亚洲成人免费在线| 久久久www免费人成精品| 99在线视频精品| 天天色综合天天| 国产亚洲1区2区3区| 色天使久久综合网天天| 激情亚洲综合在线| 亚洲综合成人网| wwww国产精品欧美| 91小视频免费看| 麻豆传媒一区二区三区| 国产精品久久久久国产精品日日 | 亚洲大片在线观看| 久久久久成人黄色影片| 欧美性高清videossexo| 国产一区二区三区不卡在线观看| 日韩毛片高清在线播放| 制服.丝袜.亚洲.另类.中文| 97精品久久久久中文字幕| 日本不卡视频在线观看| 亚洲免费色视频| 亚洲精品在线观看网站| 在线观看视频一区二区欧美日韩| 狠狠网亚洲精品| 婷婷国产v国产偷v亚洲高清| 国产精品天天看| 精品理论电影在线观看| 在线观看精品一区| 99久久精品情趣| 精品一区二区三区在线视频| 亚洲va韩国va欧美va| 中文字幕亚洲一区二区va在线| 日韩欧美电影在线| 制服.丝袜.亚洲.另类.中文 | 粉嫩蜜臀av国产精品网站| 奇米综合一区二区三区精品视频 | 久久毛片高清国产| 欧美成人精品二区三区99精品| 欧美三级电影网| 在线观看亚洲专区| 色八戒一区二区三区| 99久久99久久久精品齐齐| 丁香激情综合国产| 国产综合久久久久久鬼色| 免费黄网站欧美| 三级在线观看一区二区| 水蜜桃久久夜色精品一区的特点| 一区二区三区在线视频观看| 国产精品久久久久aaaa| 中文字幕在线观看一区二区| 久久午夜老司机| 久久久午夜电影| 久久久蜜臀国产一区二区| 久久久久国产精品麻豆ai换脸 | 欧美一级理论片| 欧美一区二区三区四区在线观看| 日本道精品一区二区三区 | 精品国产一区a| 精品久久人人做人人爰| 久久久久88色偷偷免费| 精品国产sm最大网站免费看| 精品久久人人做人人爰| 久久亚洲综合色| 欧美激情一区二区三区四区| 日本一区二区三区在线不卡| 中文字幕精品在线不卡| 综合电影一区二区三区| 欧美一区二区三区精品| 99久久久精品| 精品视频色一区| 3atv在线一区二区三区| 91精品国产综合久久香蕉麻豆| 日韩午夜激情av| 精品噜噜噜噜久久久久久久久试看| 日韩午夜激情视频| 精品噜噜噜噜久久久久久久久试看| 欧美日韩在线观看一区二区| 日韩欧美一二三| 久久久久国产成人精品亚洲午夜| 久久精品欧美一区二区三区不卡 | 亚洲一区免费视频| 午夜视频在线观看一区二区三区| 免费在线欧美视频| 国产精品主播直播| 99久久精品国产网站| 99国产精品久| 欧洲在线/亚洲| www.日韩大片| 欧美吞精做爰啪啪高潮| 欧美一级理论片| 欧美成人aa大片| 国产亚洲成aⅴ人片在线观看 | 欧美色国产精品| 欧美一区二区三区日韩视频| 欧美成人女星排名| 久久这里只有精品首页| 亚洲欧美日韩国产手机在线| 亚洲成精国产精品女| 精品一区二区在线视频| 国产馆精品极品| 欧美一区二区三区视频在线| 久久久久久亚洲综合| 亚洲欧美日韩成人高清在线一区| 亚洲动漫第一页| 色综合久久六月婷婷中文字幕| 欧美日本不卡视频| 国产偷国产偷亚洲高清人白洁 | 国产精品资源网站| 91久久一区二区| 日韩欧美色综合| 亚洲国产精品欧美一二99| 国产曰批免费观看久久久| 欧美中文字幕不卡| 精品国产污污免费网站入口 | 波多野结衣中文字幕一区| 日韩一区二区三区高清免费看看| 国产精品视频观看| 日韩av电影免费观看高清完整版在线观看 | 精品国产一区二区三区久久久蜜月| 亚洲理论在线观看| 九一久久久久久| 欧美人与性动xxxx| 亚洲欧美电影一区二区| 国产一区二区美女诱惑| 欧美日韩卡一卡二| 欧美激情一区二区三区全黄| 视频在线观看一区二区三区| 成人免费视频一区| 欧美videos中文字幕| 亚洲一级二级三级| 国产成人精品www牛牛影视| 日韩亚洲欧美在线| 亚洲国产精品久久艾草纯爱| 成人av资源下载| 国产欧美日韩三区| 极品美女销魂一区二区三区免费| 欧美人牲a欧美精品| 一区二区三区四区高清精品免费观看 | 国产在线一区二区|