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

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

?? walkhp2.c

?? Windows 95 系統程式設計大奧秘書籍源碼
?? C
字號:
//==================================
// WALKHP2 - Matt Pietrek 1995
// FILE: WALKHP2.C
//==================================

#include <windows.h>
#include <stdio.h>
#include "heapw32.h"

// Prototypes
HANDLE WalkHeap( HANDLE hHeap );
void DisplayFreeBlock( PFREE_HEAP_ARENA_RETAIL pFreeArena );
void DisplayInUseBlock( PHEAP_ARENA_RETAIL pArena );
void DisplayHeapFlags( BYTE flags );
void MakeSomeAllocationsAndDeletions( HANDLE hHeap );

int main(int argc, char * argv[])
{
    HANDLE heap, anotherHeap;

    if ( (GetVersion() & 0xC0000000) != 0xC0000000 )
    {
        printf("WALKHEAP will only work with Win95\n");
        return 0;       
    }
    
    if ( GetSystemMetrics(SM_DEBUG) )
    {
        printf("WALKHP2 will only work with the retail version of Win95\n");
        return 0;
    }
    
    if ( argc == 2 )    // If user supplied an hHeap to walk, do it.
    {
        HANDLE hHeap;
        
        if ( 1 == sscanf( argv[1], "%x", &hHeap ) )
        {
            WalkHeap( hHeap );
        }
        else
            printf( "Syntax: \"WALKHEAP <hHeap>\" or just \"WALKHEAP\"\n");

        return 0;
    }

    // No command line was specified.  Do default action.

	heap = GetProcessHeap();

	// First, make the main heap look more interesting
    MakeSomeAllocationsAndDeletions( heap );

	// Create another heap to show heap chaining.
    anotherHeap = HeapCreate( HEAP_GENERATE_EXCEPTIONS | HEAP_NO_SERIALIZE,
                              0x80000, 0x100000 );

	// Walk all the heaps in the process.  New heaps are put at the head
    // of the list.
    heap = anotherHeap;
	while ( heap )
		heap = WalkHeap( heap );

    return 0;
}

#define WIDTH 40

// Returns HANDLE for next heap in process, or 0 on failure
HANDLE WalkHeap( HANDLE hHeap )
{
    PHEAP_HEADER_RETAIL pHeapHeader = (PHEAP_HEADER_RETAIL)hHeap;
    PHEAP_ARENA_RETAIL pArena;
    PFREE_LIST_HEADER_RETAIL pFreeListHdr;
    unsigned i;

    if (   IsBadReadPtr( pHeapHeader, sizeof(HEAP_HEADER_RETAIL))
        || pHeapHeader->signature != 0x4948 )
    {
        printf("%08X is not a valid heap handle\n", hHeap);
        return 0;
    }
    
    printf("Heap at %08X\n", pHeapHeader);
    
    printf("%-*s%08X\n", WIDTH, "size:", pHeapHeader->dwSize);

    printf("%-*s%08X\n", WIDTH, "next block:", pHeapHeader->nextBlock);

    printf("Free lists:\n");
    pFreeListHdr = pHeapHeader->freeListArray;
    
    for ( i=0; i < 4; i++ )
    {
        printf("  Head:%08X  size: %X\n",
                &pFreeListHdr->freeArena,
                pFreeListHdr->dwMaxBlockSize);
        pFreeListHdr++;     // Advance to next free list header
    }

    printf("%-*s%08X\n", WIDTH, "Next heap:", pHeapHeader->nextHeap);

    printf("%-*s%08X\n", WIDTH, "CritSection:", pHeapHeader->pCriticalSection);

    // CRITICAL_SECTION criticalSection;    // 0x7C

    printf("%-*s%02X\n", WIDTH, "Flags:", pHeapHeader->flags);
    DisplayHeapFlags( pHeapHeader->flags );
    printf("%-*s%04X\n", WIDTH, "Signature:", (WORD)pHeapHeader->signature);

    // The first arena starts after the heap header.  (The "+1" is C ptr math)
    pArena = (PHEAP_ARENA_RETAIL)(pHeapHeader+1);

    printf("\nHeap Blocks\n");
    printf("Block     Stat  Size      \n"
           "--------  ----  --------  \n");

    pFreeListHdr = pHeapHeader->freeListArray;
    for ( i=0; i < 4; i++ )
    {
        DisplayFreeBlock( &pFreeListHdr->freeArena );
        pFreeListHdr++;     // Point at next free list head
    }

    printf("\n");
    
    while ( 1 )
    {
        DWORD blockSize = pArena->size & ~0xA0000003;

        if ( blockSize == 0 )
            break;

        if ( pArena->size & 1 )
            DisplayFreeBlock( (PFREE_HEAP_ARENA_RETAIL)pArena );
        else
            DisplayInUseBlock( pArena );

        // Advance to next block
        pArena = (PHEAP_ARENA_RETAIL)((DWORD)pArena + blockSize);
    }

	printf("\n\n");

	return pHeapHeader->nextHeap;
}

void DisplayInUseBlock( PHEAP_ARENA_RETAIL pArena )
{
    printf("%08X  used  %08X\n",
            pArena,
            pArena->size & ~0xA0000003);   
}

void DisplayFreeBlock( PFREE_HEAP_ARENA_RETAIL pFreeArena )
{
    printf("%08X  free  %08X  prev:%08X  next:%08X\n",
            pFreeArena,
            pFreeArena->arena.size & ~0xA0000003,
            pFreeArena->prev,
            pFreeArena->next);  
}

void MakeSomeAllocationsAndDeletions( HANDLE hHeap )
{
    LPVOID ptrArray[20];

    ptrArray[0] = HeapAlloc( hHeap, 0, 0x4 );
    ptrArray[1] = HeapAlloc( hHeap, 0, 0x8 );
    ptrArray[2] = HeapAlloc( hHeap, 0, 0xC );
    ptrArray[3] = HeapAlloc( hHeap, 0, 0x10 );
    ptrArray[4] = HeapAlloc( hHeap, 0, 0x14 );

    ptrArray[5] = HeapAlloc( hHeap, 0, 0x24 );
    ptrArray[6] = HeapAlloc( hHeap, 0, 0x28 );
    ptrArray[7] = HeapAlloc( hHeap, 0, 0x2C );
    ptrArray[8] = HeapAlloc( hHeap, 0, 0x30 );
    ptrArray[9] = HeapAlloc( hHeap, 0, 0x34 );

    ptrArray[10] = HeapAlloc( hHeap, 0, 0xC4 );
    ptrArray[11] = HeapAlloc( hHeap, 0, 0xC8 );
    ptrArray[12] = HeapAlloc( hHeap, 0, 0xCC );
    ptrArray[13] = HeapAlloc( hHeap, 0, 0xD0 );
    ptrArray[14] = HeapAlloc( hHeap, 0, 0xD4 );

    ptrArray[15] = HeapAlloc( hHeap, 0, 0x224 );
    ptrArray[16] = HeapAlloc( hHeap, 0, 0x228 );
    ptrArray[17] = HeapAlloc( hHeap, 0, 0x22C );
    ptrArray[18] = HeapAlloc( hHeap, 0, 0x230 );
    ptrArray[19] = HeapAlloc( hHeap, 0, 0x234 );

    // Put some stuff into the < 0x20 free list
    HeapFree( hHeap, 0, ptrArray[3] );
    HeapFree( hHeap, 0, ptrArray[1] );

    // Put some stuff into the < 0x80 free list
    HeapFree( hHeap, 0, ptrArray[8] );
    HeapFree( hHeap, 0, ptrArray[6] );

    // Put some stuff into the < 0x200 free list
    HeapFree( hHeap, 0, ptrArray[13] );
    HeapFree( hHeap, 0, ptrArray[11] );

    // Put some stuff into the < 0xFFFFFFFF free list
    HeapFree( hHeap, 0, ptrArray[18] );
    HeapFree( hHeap, 0, ptrArray[16] );
	
	// allocate some really big blocks ( > 1MB )
	HeapAlloc( hHeap, 0, 0x200000 );
	HeapAlloc( hHeap, 0, 0x180000 );
}

typedef struct
{
    BYTE    flag;
    PSTR    name;
} BYTE_FLAG_DESCRIPTIONS;

BYTE_FLAG_DESCRIPTIONS HeapFlags[] = 
{
{ 0x00000001, "HEAP_NO_SERIALIZE" },
{ 0x00000002, "HEAP_GROWABLE" },
{ 0x00000004, "HEAP_GENERATE_EXCEPTIONS" },
{ 0x00000008, "HEAP_ZERO_MEMORY" },
{ 0x00000010, "HEAP_REALLOC_IN_PLACE_ONLY" },
{ 0x00000020, "HEAP_TAIL_CHECKING_ENABLED" },
{ 0x00000040, "HEAP_FREE_CHECKING_ENABLED" },
{ 0x00000080, "HEAP_DISABLE_COALESCE_ON_FREE" }
};
#define HEAP_FLAGS_COUNT ( sizeof(HeapFlags) / sizeof(HeapFlags[0]) )

void DisplayHeapFlags( BYTE flags )
{
    unsigned i;
    
    for ( i=0; i < HEAP_FLAGS_COUNT; i++ )
        if ( HeapFlags[i].flag & flags )
            printf("%-*s%s\n", WIDTH, "", HeapFlags[i].name);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久久久亚洲综合影院红桃| 国产做a爰片久久毛片| 一本一道综合狠狠老| 国产精品女上位| av在线不卡免费看| 亚洲欧美乱综合| 欧美视频在线不卡| 日韩精品视频网| 日韩一级片在线播放| 国产一区福利在线| 日本一区二区三区电影| 91蝌蚪porny九色| 亚洲国产精品麻豆| 欧美不卡一区二区三区| 成人天堂资源www在线| 一区二区免费在线播放| 欧美一区二区三区在线观看| 国产乱码精品一区二区三区五月婷| 欧美精彩视频一区二区三区| 一本一道久久a久久精品| 性做久久久久久免费观看| 精品久久久久一区二区国产| 99精品黄色片免费大全| 亚洲成人高清在线| 国产偷v国产偷v亚洲高清| 色一区在线观看| 六月丁香综合在线视频| 国产精品欧美一区喷水| 欧美男男青年gay1069videost | 国产成人午夜精品影院观看视频 | 亚洲成人精品一区二区| 欧美哺乳videos| av午夜一区麻豆| 日本不卡一区二区| 中文字幕在线观看不卡视频| 欧美一区二区三区在线视频| 成人av在线看| 精品一区二区三区香蕉蜜桃| 亚洲精品高清视频在线观看| 久久中文娱乐网| 欧美三级乱人伦电影| 春色校园综合激情亚洲| 日本在线不卡视频一二三区| 最新日韩在线视频| 精品久久久久久久人人人人传媒| 在线观看亚洲专区| 成熟亚洲日本毛茸茸凸凹| 日产欧产美韩系列久久99| 亚洲情趣在线观看| 欧美国产禁国产网站cc| 日韩欧美高清在线| 欧美日韩一卡二卡三卡| 97成人超碰视| 国产精品一区三区| 美国三级日本三级久久99| 亚洲1区2区3区视频| 亚洲精品视频免费看| 欧美国产成人在线| 欧美精品一区二区久久久| 欧美精品视频www在线观看| 91视频一区二区三区| 国产91精品在线观看| 精品一区二区三区视频 | 天天色综合成人网| 亚洲欧美激情视频在线观看一区二区三区 | 久久国产生活片100| 偷偷要91色婷婷| 亚洲一级二级三级在线免费观看| ㊣最新国产の精品bt伙计久久| 国产欧美日产一区| 国产视频亚洲色图| 久久这里只有精品视频网| 欧美成人a∨高清免费观看| 欧美一区二区视频在线观看2020| 欧美色国产精品| 精品视频色一区| 欧美日韩国产综合久久| 欧美日韩久久一区| 欧美另类videos死尸| 欧美日韩亚洲综合在线| 欧美久久久久久蜜桃| 欧美日韩成人一区| 7777精品伊人久久久大香线蕉超级流畅| 欧美亚洲另类激情小说| 欧美日韩一区三区四区| 欧美日韩国产综合草草| 欧美一区二区在线播放| 欧美大片顶级少妇| 久久久三级国产网站| 欧美国产亚洲另类动漫| 成人免费在线视频| 亚洲综合色视频| 日产国产高清一区二区三区| 久久超碰97中文字幕| 国产传媒欧美日韩成人| 成人午夜碰碰视频| 91丨九色porny丨蝌蚪| 在线观看成人小视频| 7777女厕盗摄久久久| 久久综合国产精品| 亚洲天堂2014| 亚洲bt欧美bt精品777| 精品一区二区久久| 成人av网站免费观看| 欧美日韩亚洲综合在线| 亚洲精品高清在线观看| 夜夜操天天操亚洲| 美腿丝袜在线亚洲一区| 成人国产精品免费观看视频| 色av一区二区| 精品免费日韩av| 亚洲三级在线免费观看| 三级一区在线视频先锋| 国产激情一区二区三区四区| 一本一本大道香蕉久在线精品 | 日韩国产在线一| 国产精品456| 在线中文字幕不卡| 精品99一区二区三区| 综合久久综合久久| 麻豆精品精品国产自在97香蕉| 成人激情午夜影院| 日韩一级片在线播放| 亚洲精品亚洲人成人网| 精品一区二区三区欧美| 91看片淫黄大片一级在线观看| 欧美一二三区在线观看| 最新国产精品久久精品| 麻豆精品视频在线观看视频| 色爱区综合激月婷婷| 久久精品水蜜桃av综合天堂| 一区二区三区 在线观看视频| 国产一区不卡精品| 欧美日韩三级视频| 国产精品成人免费| 久久99日本精品| 欧美日韩专区在线| 中文字幕亚洲一区二区va在线| 男女视频一区二区| 欧美在线观看视频一区二区| 国产日韩欧美麻豆| 蜜桃久久久久久| 欧美亚洲日本国产| 亚洲三级在线观看| 成人理论电影网| 精品91自产拍在线观看一区| 午夜激情久久久| 欧美亚洲免费在线一区| 亚洲桃色在线一区| aaa欧美大片| 国产欧美一区二区三区沐欲| 蜜臀久久99精品久久久久久9| 欧美色图第一页| 亚洲乱码中文字幕| 成人av资源站| 欧美韩国一区二区| 国产精品69毛片高清亚洲| 精品国产伦一区二区三区观看体验 | 91精品1区2区| 亚洲欧美一区二区视频| www.久久精品| 国产精品萝li| www.爱久久.com| 综合自拍亚洲综合图不卡区| 成人av在线电影| 国产精品高潮久久久久无| 国产成人精品1024| 久久久精品欧美丰满| 国产精品综合在线视频| 久久久久99精品一区| 国产精品一二三| 国产精品视频在线看| 成人综合激情网| 中文字幕在线不卡国产视频| 成人av在线观| 亚洲精品精品亚洲| 欧美三电影在线| 天天爽夜夜爽夜夜爽精品视频 | 91精品国产综合久久久久| 日韩 欧美一区二区三区| 91精品国产综合久久久久久久| 美女视频一区二区| 26uuu成人网一区二区三区| 国产精品资源网站| 国产精品免费丝袜| 97久久精品人人澡人人爽| 亚洲最新视频在线观看| 欧美电影在哪看比较好| 精品伊人久久久久7777人| 国产日韩三级在线| 中文字幕第一页久久| 91香蕉视频污在线| 视频一区视频二区在线观看| 精品欧美一区二区久久| 国产精选一区二区三区| 亚洲欧美国产毛片在线| 91精品国产一区二区三区 | 1区2区3区国产精品| 欧美视频一区二区三区在线观看 | 日韩限制级电影在线观看|