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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? toolhelp.h

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


#pragma once


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


#include "CmnHdr.h"     /* See Appendix A. */
#include <tlhelp32.h>
#include <tchar.h>


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


class CToolhelp {
private:
   HANDLE m_hSnapshot;

public:
   CToolhelp(DWORD dwFlags = 0, DWORD dwProcessID = 0);
   ~CToolhelp();

   BOOL CreateSnapshot(DWORD dwFlags, DWORD dwProcessID = 0);
   
   BOOL ProcessFirst(PPROCESSENTRY32 ppe) const;
   BOOL ProcessNext(PPROCESSENTRY32 ppe) const;
   BOOL ProcessFind(DWORD dwProcessId, PPROCESSENTRY32 ppe) const;

   BOOL ModuleFirst(PMODULEENTRY32 pme) const;
   BOOL ModuleNext(PMODULEENTRY32 pme) const;
   BOOL ModuleFind(PVOID pvBaseAddr, PMODULEENTRY32 pme) const;
   BOOL ModuleFind(PTSTR pszModName, PMODULEENTRY32 pme) const;
   
   BOOL ThreadFirst(PTHREADENTRY32 pte) const;
   BOOL ThreadNext(PTHREADENTRY32 pte) const;
   
   BOOL HeapListFirst(PHEAPLIST32 phl) const;
   BOOL HeapListNext(PHEAPLIST32 phl) const;
   int  HowManyHeaps() const;

   // Note: The heap block functions do not reference a snapshot and
   // just walk the process's heap from the beginning each time. Infinite 
   // loops can occur if the target process changes its heap while the
   // functions below are enumerating the blocks in the heap.
   BOOL HeapFirst(PHEAPENTRY32 phe, DWORD dwProcessID, 
      UINT_PTR dwHeapID) const;
   BOOL HeapNext(PHEAPENTRY32 phe) const;
   int  HowManyBlocksInHeap(DWORD dwProcessID, DWORD dwHeapId) const;
   BOOL IsAHeap(HANDLE hProcess, PVOID pvBlock, PDWORD pdwFlags) const;

public:
   static BOOL EnablePrivilege(PCTSTR szPrivilege, BOOL fEnable = TRUE);
   static BOOL ReadProcessMemory(DWORD dwProcessID, LPCVOID pvBaseAddress, 
      PVOID pvBuffer, SIZE_T cbRead, SIZE_T* pNumberOfBytesRead = NULL);
};


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


inline CToolhelp::CToolhelp(DWORD dwFlags, DWORD dwProcessID) {

   m_hSnapshot = INVALID_HANDLE_VALUE;
   CreateSnapshot(dwFlags, dwProcessID);
}


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


inline CToolhelp::~CToolhelp() {

   if (m_hSnapshot != INVALID_HANDLE_VALUE)
      CloseHandle(m_hSnapshot);
}


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


inline BOOL CToolhelp::CreateSnapshot(DWORD dwFlags, DWORD dwProcessID) {

   if (m_hSnapshot != INVALID_HANDLE_VALUE)
      CloseHandle(m_hSnapshot);

   if (dwFlags == 0) {
      m_hSnapshot = INVALID_HANDLE_VALUE;
   } else {
      m_hSnapshot = CreateToolhelp32Snapshot(dwFlags, dwProcessID);
   }
   return(m_hSnapshot != INVALID_HANDLE_VALUE);
}


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


inline BOOL CToolhelp::EnablePrivilege(PCTSTR szPrivilege, BOOL fEnable) {

   // Enabling the debug privilege allows the application to see
   // information about service applications
   BOOL fOk = FALSE;    // Assume function fails
   HANDLE hToken;

   // Try to open this process's access token
   if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, 
      &hToken)) {

      // Attempt to modify the given privilege
      TOKEN_PRIVILEGES tp;
      tp.PrivilegeCount = 1;
      LookupPrivilegeValue(NULL, szPrivilege, &tp.Privileges[0].Luid);
      tp.Privileges[0].Attributes = fEnable ? SE_PRIVILEGE_ENABLED : 0;
      AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(tp), NULL, NULL);
      fOk = (GetLastError() == ERROR_SUCCESS);

      // Don't forget to close the token handle
      CloseHandle(hToken);
   }
   return(fOk);
}


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


inline BOOL CToolhelp::ReadProcessMemory(DWORD dwProcessID, 
   LPCVOID pvBaseAddress, PVOID pvBuffer, SIZE_T cbRead, 
   SIZE_T* pNumberOfBytesRead) {

   return(Toolhelp32ReadProcessMemory(dwProcessID, pvBaseAddress, pvBuffer, 
      cbRead, pNumberOfBytesRead));
}


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


inline BOOL CToolhelp::ProcessFirst(PPROCESSENTRY32 ppe) const {

   BOOL fOk = Process32First(m_hSnapshot, ppe);
   if (fOk && (ppe->th32ProcessID == 0))
      fOk = ProcessNext(ppe); // Remove the "[System Process]" (PID = 0)
   return(fOk);
}


inline BOOL CToolhelp::ProcessNext(PPROCESSENTRY32 ppe) const {

   BOOL fOk = Process32Next(m_hSnapshot, ppe);
   if (fOk && (ppe->th32ProcessID == 0))
      fOk = ProcessNext(ppe); // Remove the "[System Process]" (PID = 0)
   return(fOk);
}


inline BOOL CToolhelp::ProcessFind(DWORD dwProcessId, PPROCESSENTRY32 ppe) 
   const {

   BOOL fFound = FALSE;
   for (BOOL fOk = ProcessFirst(ppe); fOk; fOk = ProcessNext(ppe)) {
      fFound = (ppe->th32ProcessID == dwProcessId);
      if (fFound) break;
   }
   return(fFound);
}


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


inline BOOL CToolhelp::ModuleFirst(PMODULEENTRY32 pme) const {

   return(Module32First(m_hSnapshot, pme));
}


inline BOOL CToolhelp::ModuleNext(PMODULEENTRY32 pme) const {
   return(Module32Next(m_hSnapshot, pme));
}

inline BOOL CToolhelp::ModuleFind(PVOID pvBaseAddr, PMODULEENTRY32 pme) const {

   BOOL fFound = FALSE;
   for (BOOL fOk = ModuleFirst(pme); fOk; fOk = ModuleNext(pme)) {
      fFound = (pme->modBaseAddr == pvBaseAddr);
      if (fFound) break;
   }
   return(fFound);
}

inline BOOL CToolhelp::ModuleFind(PTSTR pszModName, PMODULEENTRY32 pme) const {
   BOOL fFound = FALSE;
   for (BOOL fOk = ModuleFirst(pme); fOk; fOk = ModuleNext(pme)) {
      fFound = (lstrcmpi(pme->szModule,  pszModName) == 0) || 
               (lstrcmpi(pme->szExePath, pszModName) == 0);
      if (fFound) break;
   }
   return(fFound);
}


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


inline BOOL CToolhelp::ThreadFirst(PTHREADENTRY32 pte) const {

   return(Thread32First(m_hSnapshot, pte));
}


inline BOOL CToolhelp::ThreadNext(PTHREADENTRY32 pte) const {

   return(Thread32Next(m_hSnapshot, pte));
}


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


inline int CToolhelp::HowManyHeaps() const {

   int nHowManyHeaps = 0;
   HEAPLIST32 hl = { sizeof(hl) };
   for (BOOL fOk = HeapListFirst(&hl); fOk; fOk = HeapListNext(&hl))
      nHowManyHeaps++;
   return(nHowManyHeaps);
}


inline int CToolhelp::HowManyBlocksInHeap(DWORD dwProcessID, 
   DWORD dwHeapID) const {

   int nHowManyBlocksInHeap = 0;
   HEAPENTRY32 he = { sizeof(he) };
   BOOL fOk = HeapFirst(&he, dwProcessID, dwHeapID);
   for (; fOk; fOk = HeapNext(&he))
      nHowManyBlocksInHeap++;
   return(nHowManyBlocksInHeap);
}


inline BOOL CToolhelp::HeapListFirst(PHEAPLIST32 phl) const {

   return(Heap32ListFirst(m_hSnapshot, phl));
}


inline BOOL CToolhelp::HeapListNext(PHEAPLIST32 phl) const {

   return(Heap32ListNext(m_hSnapshot, phl));
}


inline BOOL CToolhelp::HeapFirst(PHEAPENTRY32 phe, DWORD dwProcessID, 
   UINT_PTR dwHeapID) const {

   return(Heap32First(phe, dwProcessID, dwHeapID));
}


inline BOOL CToolhelp::HeapNext(PHEAPENTRY32 phe) const {

   return(Heap32Next(phe));
}


inline BOOL CToolhelp::IsAHeap(HANDLE hProcess, PVOID pvBlock, 
   PDWORD pdwFlags) const {

   HEAPLIST32 hl = { sizeof(hl) };
   for (BOOL fOkHL = HeapListFirst(&hl); fOkHL; fOkHL = HeapListNext(&hl)) {
      HEAPENTRY32 he = { sizeof(he) };
      BOOL fOkHE = HeapFirst(&he, hl.th32ProcessID, hl.th32HeapID);
      for (; fOkHE; fOkHE = HeapNext(&he)) {
         MEMORY_BASIC_INFORMATION mbi;
         VirtualQueryEx(hProcess, (PVOID) he.dwAddress, &mbi, sizeof(mbi));
         if (chINRANGE(mbi.AllocationBase, pvBlock, 
            (PBYTE) mbi.AllocationBase + mbi.RegionSize)) {

            *pdwFlags = hl.dwFlags;
            return(TRUE);
         }
      }
   }
   return(FALSE);
}


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

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品久久99精品久久| 国产伦精品一区二区三区免费| 日韩欧美一区二区三区在线| 91在线视频官网| 久久 天天综合| 亚洲成人tv网| 国产精品久久久久久久久免费丝袜| 欧美一级理论片| 欧美亚男人的天堂| 亚洲精选在线视频| 国产偷国产偷精品高清尤物 | 在线免费视频一区二区| 国产精品自在在线| 久久av中文字幕片| 石原莉奈在线亚洲二区| 亚洲激情男女视频| 亚洲欧美影音先锋| 国产清纯美女被跳蛋高潮一区二区久久w | 日韩午夜在线播放| 欧洲精品一区二区三区在线观看| 国产乱一区二区| 久草精品在线观看| 美女国产一区二区三区| 日本美女一区二区三区| 日韩中文字幕av电影| 香蕉成人伊视频在线观看| 亚洲黄色av一区| 一区二区欧美在线观看| 一区二区三区在线高清| 夜夜揉揉日日人人青青一国产精品| ...av二区三区久久精品| 国产精品不卡在线| 《视频一区视频二区| 亚洲色图丝袜美腿| 中文字幕亚洲成人| 国产精品乱人伦| 成人免费小视频| 亚洲男帅同性gay1069| 亚洲色图一区二区三区| 亚洲摸摸操操av| 亚洲男人的天堂一区二区| 樱桃国产成人精品视频| 亚洲一区中文在线| 婷婷综合久久一区二区三区| 三级欧美韩日大片在线看| 蜜桃一区二区三区四区| 国产乱人伦偷精品视频不卡| 东方欧美亚洲色图在线| 国产亚洲欧美在线| 国产精品美女一区二区在线观看| 亚洲天堂成人在线观看| 亚洲午夜三级在线| 日韩电影在线一区| 国模套图日韩精品一区二区| 岛国一区二区三区| 91久久精品日日躁夜夜躁欧美| 欧美日韩久久一区二区| 日韩色在线观看| 国产午夜精品一区二区| 亚洲摸摸操操av| 日本不卡高清视频| 高清国产午夜精品久久久久久| 91视频你懂的| 91麻豆精品国产91久久久久久久久 | a在线欧美一区| 欧美三级视频在线| 欧美tickling挠脚心丨vk| 国产精品网站在线播放| 亚洲一区二区黄色| 黑人巨大精品欧美一区| 99国产一区二区三精品乱码| 欧美日韩视频第一区| 久久夜色精品国产欧美乱极品| 亚洲视频在线一区| 久久精品72免费观看| 91免费视频大全| 日韩欧美国产综合| 综合婷婷亚洲小说| 美女网站色91| 色域天天综合网| 精品国产伦一区二区三区免费| 日韩一区有码在线| 久久av中文字幕片| 欧美在线不卡视频| 国产丝袜在线精品| 日本不卡123| 91在线小视频| 久久久久九九视频| 日韩和欧美一区二区三区| 成人性生交大片免费看在线播放| 欧美日韩电影一区| 亚洲少妇30p| 国产激情一区二区三区四区| 欧美高清hd18日本| 亚洲激情成人在线| 福利电影一区二区| 日韩欧美高清一区| 五月开心婷婷久久| 色老汉一区二区三区| 中文字幕av一区二区三区免费看| 婷婷亚洲久悠悠色悠在线播放| 91在线国产福利| 国产欧美日韩视频在线观看| 蜜桃在线一区二区三区| 欧美综合亚洲图片综合区| 中文字幕 久热精品 视频在线 | 国产传媒一区在线| 日韩欧美综合一区| 午夜一区二区三区视频| 色悠悠久久综合| 国产精品久久久久久久久晋中| 韩国理伦片一区二区三区在线播放| 欧美日韩激情在线| 亚洲一二三级电影| 色婷婷一区二区| 自拍视频在线观看一区二区| 国产69精品久久久久毛片| 久久色视频免费观看| 久久国产欧美日韩精品| 亚洲资源中文字幕| 在线精品亚洲一区二区不卡| 亚洲天堂成人网| 99精品在线观看视频| 亚洲欧洲另类国产综合| 99久久精品国产一区二区三区| 国产三级欧美三级日产三级99| 久久99国产精品久久| 欧美成人精品二区三区99精品| 日本伊人午夜精品| 欧美一卡2卡三卡4卡5免费| 天堂av在线一区| 欧美一级日韩一级| 美女脱光内衣内裤视频久久影院| 日韩一区二区在线观看| 青青草国产成人av片免费| 欧美一区欧美二区| 玖玖九九国产精品| 久久免费美女视频| 东方aⅴ免费观看久久av| 国产精品视频你懂的| 99久久精品国产毛片| 一区二区三区免费看视频| 91精品福利视频| 亚洲电影第三页| 日韩一区二区免费在线电影| 狠狠色狠狠色综合系列| 欧美极品少妇xxxxⅹ高跟鞋 | 99久久久久久| 亚洲国产三级在线| 91精品福利在线一区二区三区 | 波多野结衣91| 亚洲一区免费视频| 日韩欧美在线123| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 国产精品人成在线观看免费| www.亚洲在线| 亚洲123区在线观看| 精品国产一区二区三区四区四| 国产激情一区二区三区桃花岛亚洲| 亚洲欧美中日韩| 777欧美精品| 高清不卡一区二区| 亚洲午夜电影网| 精品国产欧美一区二区| av亚洲精华国产精华精华| 亚洲一区在线观看视频| 亚洲精品一区二区三区影院 | 成人黄动漫网站免费app| 亚洲国产精品久久人人爱蜜臀| 日韩一级二级三级| a亚洲天堂av| 日韩精品乱码免费| 中文字幕va一区二区三区| 欧美视频一区二区三区四区| 国内精品嫩模私拍在线| 亚洲品质自拍视频网站| 日韩欧美国产不卡| 色婷婷激情一区二区三区| 韩国精品一区二区| 亚洲一二三专区| 久久久美女毛片| 欧美日韩三级一区二区| 国产成人亚洲综合a∨婷婷图片| 亚洲小说春色综合另类电影| 欧美韩国日本不卡| 欧美一区二区三区四区视频| 色综合视频一区二区三区高清| 美女视频黄a大片欧美| 亚洲精品一二三| 久久网这里都是精品| 7777精品伊人久久久大香线蕉最新版 | 日韩三级免费观看| 欧美在线观看一区| 福利视频网站一区二区三区| 日本特黄久久久高潮| 亚洲激情六月丁香| 中文字幕一区免费在线观看| 精品国产精品一区二区夜夜嗨| 欧美在线综合视频| 99热99精品|