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

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

?? snapshot.cpp

?? Windows 圖形編程 書籍
?? CPP
字號:
//-----------------------------------------------------------------------------------//
//              Windows Graphics Programming: Win32 GDI and DirectDraw               //
//                             ISBN  0-13-086985-6                                   //
//                                                                                   //
//  Written            by  Yuan, Feng                             www.fengyuan.com   //
//  Copyright (c) 2000 by  Hewlett-Packard Company                www.hp.com         //
//  Published          by  Prentice Hall PTR, Prentice-Hall, Inc. www.phptr.com      //
//                                                                                   //
//  FileName   : snapshot.cpp				                                         //
//  Description: Virtual memory snapshot                                             //
//  Version    : 1.00.000, May 31, 2000                                              //
//-----------------------------------------------------------------------------------//

#define STRICT
#define WIN32_LEAN_AND_MEAN

#include <windows.h>
#include <assert.h>
#include <stdio.h>

#include "listview.h"
#include "dialog.h"
#include "pefile.h"

#include "Snapshot.h"
#include "Resource.h"
#include "MemView.h"

typedef struct
{
    unsigned id;
    const char * key;
} Word;


void AddFlags(char * rslt, unsigned value, const Word * dic, int no);


const Word Protections[] = 
{
    { PAGE_READONLY,          "ro  " },
    { PAGE_READWRITE,         "rw  " }, 
    { PAGE_WRITECOPY,         "wc  " }, 
    { PAGE_EXECUTE,           "e   " }, 
    { PAGE_EXECUTE_READ,      "er  " }, 
    { PAGE_EXECUTE_READWRITE, "erw " },
    { PAGE_EXECUTE_WRITECOPY, "ewc " }, 
    { PAGE_GUARD,             "grd " }, 
    { PAGE_NOACCESS,          "nac " }, 
    { PAGE_NOCACHE,           "ncc " }
};    


void AddFlags(char * rslt, unsigned value, const Word * dic, int no)
{
    for (int i=0; i<no; i++)
        if ( value & dic[i].id )
            strcat(rslt, dic[i].key);
}


KRegion * KSnapShot::FindRegion(unsigned char * regionstart, unsigned regionsize)
{
	// search for a region with same start and size
	for (int r=0; r<m_nRegionNo; r++)
		if ( ( m_Regions[r].start == regionstart ) &&
		     ( m_Regions[r].size  == regionsize ) )
			 return & m_Regions[r];

	// add a new region
	if ( m_nRegionNo < nMaxRegionNo )
	{
		m_Regions[m_nRegionNo].start = regionstart;
		m_Regions[m_nRegionNo].size  = regionsize;
		m_Regions[m_nRegionNo].count = 0;

		return & m_Regions[m_nRegionNo++];
	}
	else
		return NULL;
}


void KSnapShot::Shot(KListView * list)
{
    unsigned char * start = NULL;
    MEMORY_BASIC_INFORMATION info;

	KPEFile  module;
	void   * lastmodule = NULL;
	
	typedef enum { nMaxHeaps = 10 };
	HANDLE   ProcHeaps[nMaxHeaps];

	int heaps = GetProcessHeaps(nMaxHeaps, ProcHeaps);

    while ( VirtualQuery(start, & info, sizeof(info)) )
    {
		KRegion * pRegion = NULL;

		// compute CRC for committed region
	    if (info.State == MEM_COMMIT)
		{
			pRegion = FindRegion(start, info.RegionSize);		
            if (pRegion)
            {
        		pRegion->type    = info.Type;
				pRegion->lastcrc = pRegion->crc;
                pRegion->crc     = m_crc.Update(0, start, info.RegionSize);
				pRegion->count ++;
            }
		}
		
		if (list)
		{
			TCHAR temp[MAX_PATH];
			const TCHAR * p ;

			if ( pRegion && pRegion->count>=2 )
			{
				wsprintf(temp, "%04x", pRegion->lastcrc);
				list->AddItem(0, temp, ( pRegion->lastcrc != pRegion->crc ) + 1);
			}
			else
				list->AddItem(0, "     ", 0);

			if ( pRegion )
			{
				wsprintf(temp, "%04x", pRegion->crc);
				list->AddItem(1, temp);
			}
			
			wsprintf(temp, "%08lx", info.BaseAddress);	list->AddItem(2, temp);
			wsprintf(temp, "%08lx", info.RegionSize);   list->AddItem(3, temp);

			switch (info.State)
			{
				case MEM_FREE:    p = "F "; break;
				case MEM_RESERVE: p = "R "; break;
				case MEM_COMMIT:  p = "C "; break;
				default:          p = "? ";   
			}
			strcpy(temp, p);

			if ( info.State != MEM_FREE)
			{
				switch (info.Type)
				{
					case MEM_IMAGE:   p = "I "; break;
					case MEM_MAPPED:  p = "M "; break;
					case MEM_PRIVATE: p = "P "; break;
					default:          p = "? ";
				}
				strcat(temp, p);

				AddFlags(temp, info.AllocationProtect, Protections, sizeof(Protections)/sizeof(Protections[0]));
			}
			list->AddItem(4, temp);

/*
			char t[MAX_PATH];
			wsprintf(t, "%8lx ", info.AllocationBase);
			strcat(temp, t);

			if (info.State != MEM_RESERVE)
				AddFlags(temp, info.Protect, Protections, sizeof(Protections)/sizeof(Protections[0]));
*/

			if (info.State != MEM_FREE )
				if ( GetModuleFileName((HINSTANCE) info.BaseAddress, temp, sizeof(temp)) )
				{
					if (lastmodule)
					{
						module.Unload();
						lastmodule = NULL;
					}
				
					if ( module.Load(temp) )
						lastmodule = info.BaseAddress;

					// remove the directory path, keep only the filename
					if ( strchr(temp, '\\') )
					{
						for (char *p = strchr(temp, '\\') + 1;
									   strchr(p, '\\');
								   p = strchr(p, '\\') + 1);
						list->AddItem(5, p);
					}
					else 
						list->AddItem(5, temp);
				}
				else
				{
					const char * p = NULL;

					if (lastmodule != NULL)
						p = module.GetSectionName((unsigned) info.BaseAddress - (unsigned) lastmodule);

					if (p == NULL)
						for (int h=0; h<heaps; h++)
							if ( info.BaseAddress == ProcHeaps[h] )
							{
								wsprintf(temp, "Heap %d", h+1);
								p = temp;
								break;
							}

					if (p == NULL)
						if ( ( (unsigned) (& p) >= (unsigned) info.BaseAddress ) &&
						     ( (unsigned) (& p) <  (unsigned) info.BaseAddress + info.RegionSize ) )
							p = "Stack";

					if ( p )
						list->AddItem(5, p);
				}
							
		}

        start += info.RegionSize;

        if (start == 0)
            break;
    }

	if (lastmodule)
		module.Unload();
}


void KSnapShot::ShowDetail(HINSTANCE hInst, unsigned start, unsigned size)
{
	KMemViewer memory(start, size);

	memory.Dialogbox(hInst, MAKEINTRESOURCE(IDD_MEMORY));
}


/*
void CSnapShot::Compare(CSnapShot & after)
{
	if (m_nRegionNo != after.m_nRegionNo)
		OutputDebugString("Region No different\n");

	for (int i=0; i<min(m_nRegionNo, after.m_nRegionNo); i++)
	{
		CRegion & r1 = m_Regions[i];
		CRegion & r2 = after.m_Regions[i];

		if ( ( r1.start != r2.start ) || ( r1.size  != r2.size  ) ||
		     ( r1.type  != r2.type  ) || ( r1.crc   != r2.crc   ) )
		{
			TCHAR temp[MAX_PATH];

			wsprintf(temp, "%3d { %8x %8x %8x %4x } -> { %8x %8x %8x %4x } \n",
							i, 
							r1.start, r1.size, r1.type, r1.crc,
							r2.start, r2.size, r2.type, r2.crc);
			OutputDebugString(temp);
		}			
	}
}
*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品一二三区| 国产精品伦理在线| 99久久久国产精品免费蜜臀| 久久婷婷国产综合国色天香| 欧美乱妇15p| 91免费版在线| 91麻豆免费看片| 欧美一级片在线观看| 成人网在线播放| 国产毛片精品一区| 国产一区二区视频在线| 精品一区二区免费在线观看| 久久免费视频色| 香蕉成人啪国产精品视频综合网| 久久黄色级2电影| 成人性生交大片免费看中文| 色狠狠色狠狠综合| 日韩一级大片在线观看| 久久综合九色综合欧美就去吻| 国产精品三级电影| 中文字幕欧美日韩一区| 国产精品素人一区二区| 精品一区二区在线视频| 欧美精品黑人性xxxx| 伊人开心综合网| 久久久91精品国产一区二区三区| 久久亚洲私人国产精品va媚药| 久久亚洲二区三区| 国产精品乱码一区二区三区软件| 综合自拍亚洲综合图不卡区| 亚洲一区二区四区蜜桃| 麻豆精品一区二区av白丝在线| 国产一区二区三区综合| 色老汉一区二区三区| 日韩欧美一区二区不卡| 中文文精品字幕一区二区| 夜夜嗨av一区二区三区四季av| 久久精品国产秦先生| a亚洲天堂av| 欧美大胆一级视频| 国产精品欧美一区喷水| 免费高清不卡av| 一本在线高清不卡dvd| 精品少妇一区二区三区日产乱码| 综合av第一页| 国产精一品亚洲二区在线视频| 日本道精品一区二区三区| 久久精品欧美日韩精品 | 激情综合色丁香一区二区| 国产成人精品网址| 日韩女优制服丝袜电影| 国产精品国产自产拍在线| 麻豆中文一区二区| 欧美吞精做爰啪啪高潮| 最新不卡av在线| 成人午夜电影网站| 久久午夜国产精品| 麻豆成人av在线| 欧美男同性恋视频网站| 亚洲女性喷水在线观看一区| 国产成a人亚洲精品| 精品久久国产97色综合| 午夜欧美视频在线观看| 欧亚一区二区三区| 亚洲综合在线电影| 日本高清视频一区二区| 中文字幕在线播放不卡一区| 国产69精品久久99不卡| 麻豆成人在线观看| 国产精品久久久久久久久果冻传媒| 精品久久久久香蕉网| 99久久夜色精品国产网站| 美腿丝袜亚洲三区| 天天av天天翘天天综合网色鬼国产| 日韩三级.com| 91精品国产日韩91久久久久久| 91视频com| 国产sm精品调教视频网站| 国产一区二区成人久久免费影院| 欧美精品 国产精品| 亚洲欧美欧美一区二区三区| 91小视频在线免费看| 自拍偷拍国产亚洲| 欧美视频一区二区在线观看| 亚洲一区在线观看网站| 69堂成人精品免费视频| 黄色小说综合网站| 国产三级久久久| 成人黄色免费短视频| 中文字幕在线观看一区| 色菇凉天天综合网| 亚洲国产精品一区二区久久恐怖片| 欧美区视频在线观看| 蜜臀av亚洲一区中文字幕| 国产色91在线| 色综合咪咪久久| 免费的成人av| 综合婷婷亚洲小说| 日韩欧美在线一区二区三区| 国产一区二区三区四区五区美女| 国产精品福利一区| 3d动漫精品啪啪1区2区免费| 国产一区二区导航在线播放| 亚洲男人的天堂av| 欧美一级片免费看| 91蜜桃免费观看视频| 亚洲18色成人| 亚洲国产精品传媒在线观看| 在线精品视频一区二区| 久久精品国产精品亚洲精品| 国产精品美女久久久久久久久久久| 色激情天天射综合网| 激情综合色综合久久综合| 亚洲男女毛片无遮挡| 欧美一级一区二区| 91国产丝袜在线播放| 国产麻豆精品theporn| 亚洲综合清纯丝袜自拍| 国产三级三级三级精品8ⅰ区| 在线免费观看成人短视频| 国产成a人亚洲| 日韩电影在线看| 亚洲一区二区在线播放相泽| 国产欧美综合在线观看第十页| 欧美性一二三区| 成人av在线播放网站| 另类小说一区二区三区| 亚洲欧美国产三级| 国产欧美日韩卡一| 欧美v日韩v国产v| 欧美日韩一区 二区 三区 久久精品 | 国产亚洲精品bt天堂精选| 欧美三级蜜桃2在线观看| 国产91清纯白嫩初高中在线观看 | 欧美视频自拍偷拍| 成人高清在线视频| 国产精品综合视频| 日本vs亚洲vs韩国一区三区二区| 亚洲黄色录像片| 中文字幕综合网| 18成人在线观看| 久久色成人在线| 精品理论电影在线| 日韩午夜激情电影| 欧美mv日韩mv国产| 久久先锋影音av鲁色资源网| 日韩午夜三级在线| 6080日韩午夜伦伦午夜伦| 欧美三级在线播放| 欧美精品v国产精品v日韩精品 | 国产成+人+日韩+欧美+亚洲| 国产一区二区三区免费观看| 免费一级片91| 美女高潮久久久| 国产一区二区免费看| 国产一区二区免费看| 国产自产高清不卡| 国产精品99久久久久久宅男| 国产一区二区毛片| 99在线精品免费| 91欧美一区二区| 欧美日韩一区国产| 欧美一区二区三区播放老司机| 日韩一区二区精品葵司在线| 日韩欧美精品三级| 久久久国产精华| 亚洲人一二三区| 亚洲综合成人网| 免费欧美日韩国产三级电影| 精品中文字幕一区二区小辣椒| 国产麻豆午夜三级精品| 色综合色综合色综合色综合色综合| 91蜜桃免费观看视频| 欧美群妇大交群的观看方式| 精品女同一区二区| 中文字幕在线不卡一区二区三区| 一区二区三区四区中文字幕| 午夜精品一区二区三区电影天堂| 久久精品国产在热久久| 成人午夜视频网站| 精品视频1区2区3区| 久久久久久久久久电影| 亚洲精品中文在线观看| 麻豆成人91精品二区三区| www.在线成人| 6080yy午夜一二三区久久| 久久久www成人免费毛片麻豆 | 丝袜美腿亚洲色图| 国产乱码字幕精品高清av| 91网站最新网址| 久久综合久久综合久久| 亚洲午夜久久久久久久久电影院| 精品一区二区三区欧美| 91国偷自产一区二区开放时间| 欧美va亚洲va在线观看蝴蝶网| 中文字幕色av一区二区三区| 日本成人超碰在线观看| 91久久精品一区二区三| 亚洲国产精品二十页| 久久精品99国产精品|