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

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

?? compositefile.c

?? < VC++視頻音頻開發>> 這本書的源碼
?? C
字號:
#include "stdafx.h"
#include "globals.h"
#include "CompositeFile.h"
#include "ZLib/zlib.h"


#define CPC_PKFILE_MAGIC		0x04034B50
#define CPC_PKFILE_DIRMAGIC		0x02014B50
#define CPC_PKFILE_BITS_ENCRYPTED		0x1
#define CPC_PKFILE_BITS_STREAMED		0x8
//
#define CPC_PKFILE_METHOD_STORED		0x0
#define CPC_PKFILE_METHOD_DEFLATED		0x8
//
#pragma pack(push, 1)
typedef struct _CPs_PKFILE_HEADER
{
    DWORD m_dwSig;
    WORD m_wVersion;
    WORD m_wBITs;
    WORD m_wMethod;
    WORD m_wModifyTime;
    WORD m_wModifyDate;
    DWORD m_dwCRC32;
    DWORD m_dwCompressedSize;
    DWORD m_dwDecompressedSize;
    WORD m_wFilenameLen;
    WORD m_wExtraFieldLen;
} CPs_PKFILE_HEADER;
//
typedef struct _CPs_PKFILE_DESCRIPTOR
{
    DWORD m_dwCRC32;
    DWORD m_dwCompressedSize;
    DWORD m_dwDecompressedSize;

} CPs_PKFILE_DESCRIPTOR;
#pragma pack(pop)
//

typedef struct _CPs_SubFile
{
    char* m_pcName;
    DWORD m_dwCRC32;
    unsigned int m_iFileOffset;
    unsigned int m_iCompressedSize;
    unsigned int m_iUncompressedSize;
    WORD m_wMethod;

    void* m_pNext;

} CPs_SubFile;
//
typedef struct _CPs_CompositeContext
{
    HANDLE m_hFileMapping;
    BYTE* m_pFileBase;
    DWORD m_dwFileSize;
    BOOL m_bMemMappedFile;

    CPs_SubFile* m_pFirstSubFile;

} CPs_CompositeContext;

//
#define CPM_GET_BYTE(offset) (*(BYTE*)(pContext->m_pFileBase + (offset++) ))
#define CPM_GET_WORD(offset) (*(WORD*)(pContext->m_pFileBase + (offset+=2) - 2))
#define CPM_GET_DWORD(offset) (*(DWORD*)(pContext->m_pFileBase + (offset+=4) - 4))

BOOL CP_BuildDirectory(CP_COMPOSITEFILE hComposite);
const CPs_SubFile* CP_FindFile(CP_COMPOSITEFILE hComposite, const char* pcFilename);

CP_COMPOSITEFILE CF_Create_FromFile(const char* pcPath)
{
    CPs_CompositeContext* pContext;
    HANDLE hFile;
    DWORD dwFileSize;

    hFile = CreateFile(pcPath,
                       GENERIC_READ,
                       FILE_SHARE_READ,
                       NULL,
                       OPEN_EXISTING,
                       FILE_ATTRIBUTE_NORMAL,
                       NULL);
    if(hFile == INVALID_HANDLE_VALUE)
        return NULL;

    dwFileSize = GetFileSize(hFile, NULL);
    if(dwFileSize > 0x00800000 )
    {
        CloseHandle(hFile);
        return NULL;
    }

    pContext = (CPs_CompositeContext*)malloc(sizeof(CPs_CompositeContext));
    pContext->m_dwFileSize = dwFileSize;
    pContext->m_hFileMapping = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL);
    CloseHandle(hFile);
    if(pContext->m_hFileMapping == INVALID_HANDLE_VALUE)
    {
        free(pContext);
        return NULL;
    }
    pContext->m_pFileBase = (BYTE*)MapViewOfFile(pContext->m_hFileMapping, FILE_MAP_READ, 0, 0, 0);
    if(!pContext->m_pFileBase)
    {
        CloseHandle(pContext->m_hFileMapping);
        free(pContext);
        return NULL;
    }

    if(CP_BuildDirectory(pContext) == FALSE)
    {
        CF_Destroy(pContext);
        return NULL;
    }

    return pContext;
}
//

CP_COMPOSITEFILE CF_Create_FromResource(HMODULE hModule, UINT uiResourceID, const char* pcResourceType)
{
    CPs_CompositeContext* pContext;
    HRSRC hResource;
    HGLOBAL hResourceData;

    hResource = FindResource(hModule, MAKEINTRESOURCE(uiResourceID), pcResourceType);
    CP_ASSERT(hResource);
    hResourceData = LoadResource(hModule, hResource);
    CP_ASSERT(hResourceData);

    pContext = (CPs_CompositeContext*)malloc(sizeof(CPs_CompositeContext));
    pContext->m_dwFileSize = SizeofResource(hModule, hResource);
    pContext->m_hFileMapping = NULL;
    pContext->m_pFileBase = LockResource(hResourceData);

    if(CP_BuildDirectory(pContext) == FALSE)
    {
        CF_Destroy(pContext);
        return NULL;
    }

    // Success
    return pContext;
}
//

void CF_Destroy(CP_COMPOSITEFILE hComposite)
{
    CPs_CompositeContext* pContext = (CPs_CompositeContext*)hComposite;
    CPs_SubFile* pSubFile_Cursor;
    CPs_SubFile* pSubFile_Next;
    CP_CHECKOBJECT(pContext);

    if(pContext->m_hFileMapping)
    {
        UnmapViewOfFile(pContext->m_pFileBase);
        CloseHandle(pContext->m_hFileMapping);
    }

    for(pSubFile_Cursor = pContext->m_pFirstSubFile; pSubFile_Cursor; pSubFile_Cursor = pSubFile_Next)
    {
        pSubFile_Next = (CPs_SubFile*)pSubFile_Cursor->m_pNext;
        free(pSubFile_Cursor->m_pcName);
        free(pSubFile_Cursor);
    }

    free(pContext);
}
//

BOOL CF_GetSubFile(CP_COMPOSITEFILE hComposite, const char* pcSubfilename, void** ppSubFile_Uncompressed, unsigned int* piSubFile_Length)
{
    CPs_CompositeContext* pContext = (CPs_CompositeContext*)hComposite;
    const CPs_SubFile* pSubFile;
    DWORD dwCRC32;
    CP_CHECKOBJECT(pContext);

    pSubFile = CP_FindFile(hComposite, pcSubfilename);
    if(!pSubFile)
    {
        *ppSubFile_Uncompressed = NULL;
        *piSubFile_Length = 0;
        return FALSE;
    }

    *ppSubFile_Uncompressed = malloc(pSubFile->m_iUncompressedSize);
    *piSubFile_Length = pSubFile->m_iUncompressedSize;

    if(pSubFile->m_wMethod == CPC_PKFILE_METHOD_STORED)
    {
        memcpy(*ppSubFile_Uncompressed, pContext->m_pFileBase + pSubFile->m_iFileOffset, *piSubFile_Length);
    }
    else if(pSubFile->m_wMethod == CPC_PKFILE_METHOD_DEFLATED)
    {
        z_stream zStream;

        zStream.zalloc = Z_NULL;
        zStream.zfree = Z_NULL;
        zStream.opaque = Z_NULL;
        zStream.data_type = Z_BINARY;
        inflateInit2(&zStream, -15);	

        zStream.next_out = (BYTE*)*ppSubFile_Uncompressed;
        zStream.avail_out = *piSubFile_Length;
        zStream.next_in = pContext->m_pFileBase + pSubFile->m_iFileOffset;
        zStream.avail_in = pSubFile->m_iCompressedSize;
        inflate(&zStream, Z_FINISH);

        inflateEnd(&zStream);
    }

    dwCRC32 = crc32(0, *ppSubFile_Uncompressed, *piSubFile_Length);
    if(dwCRC32 != pSubFile->m_dwCRC32)
    {
        free(*ppSubFile_Uncompressed);
        *ppSubFile_Uncompressed = NULL;
        *piSubFile_Length = 0;
        return FALSE;
    }

    return TRUE;
}

BOOL CP_BuildDirectory(CP_COMPOSITEFILE hComposite)
{
    CPs_CompositeContext* pContext = (CPs_CompositeContext*)hComposite;
    unsigned int iOffset;
    CP_CHECKOBJECT(pContext);

    pContext->m_pFirstSubFile = NULL;

    iOffset = 0;
    while( ((iOffset + sizeof(CPs_PKFILE_HEADER)) < pContext->m_dwFileSize)
            && *(DWORD*)(pContext->m_pFileBase + iOffset) != CPC_PKFILE_DIRMAGIC)
    {
        CPs_PKFILE_HEADER* pHeader = (CPs_PKFILE_HEADER*)(pContext->m_pFileBase + iOffset);
        CPs_SubFile* pNewSubFile;

        if(pHeader->m_dwSig != CPC_PKFILE_MAGIC
                || (pHeader->m_wBITs & CPC_PKFILE_BITS_ENCRYPTED)
                || (pHeader->m_wBITs & CPC_PKFILE_BITS_STREAMED)
                || (pHeader->m_wMethod != CPC_PKFILE_METHOD_STORED && pHeader->m_wMethod != CPC_PKFILE_METHOD_DEFLATED) )
        {
            CP_TRACE0("ZIP format not understood");
            return FALSE;
        }

        pNewSubFile = (CPs_SubFile*)malloc(sizeof(*pNewSubFile));
        pNewSubFile->m_pNext = pContext->m_pFirstSubFile;
        pContext->m_pFirstSubFile = pNewSubFile;

        pNewSubFile->m_pcName = (char*)malloc(pHeader->m_wFilenameLen + 1);
        memcpy(pNewSubFile->m_pcName, pContext->m_pFileBase + iOffset + sizeof(*pHeader), pHeader->m_wFilenameLen);
        pNewSubFile->m_pcName[pHeader->m_wFilenameLen] = '\0';
        pNewSubFile->m_wMethod = pHeader->m_wMethod;
        pNewSubFile->m_dwCRC32 = pHeader->m_dwCRC32;
        pNewSubFile->m_iCompressedSize = pHeader->m_dwCompressedSize;
        pNewSubFile->m_iUncompressedSize = pHeader->m_dwDecompressedSize;
        pNewSubFile->m_iFileOffset = iOffset + sizeof(*pHeader) + pHeader->m_wFilenameLen + pHeader->m_wExtraFieldLen;
        CP_TRACE1("SubFile:\"%s\"", pNewSubFile->m_pcName);

        iOffset += sizeof(*pHeader)
                   + pHeader->m_dwCompressedSize
                   + pHeader->m_wFilenameLen
                   + pHeader->m_wExtraFieldLen;
    }


    return TRUE;
}

const CPs_SubFile* CP_FindFile(CP_COMPOSITEFILE hComposite, const char* pcFilename)
{
    CPs_CompositeContext* pContext = (CPs_CompositeContext*)hComposite;
    const CPs_SubFile* pSubFile_Cursor;
    CP_CHECKOBJECT(pContext);

    for(pSubFile_Cursor = pContext->m_pFirstSubFile; pSubFile_Cursor; pSubFile_Cursor = (const CPs_SubFile*)pSubFile_Cursor->m_pNext)
    {
        if(stricmp(pSubFile_Cursor->m_pcName, pcFilename) == 0)
            return pSubFile_Cursor;
    }

    return NULL;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品人伦一区二区色婷婷| aaa亚洲精品一二三区| 日韩亚洲欧美在线观看| 麻豆精品在线观看| 久久久www成人免费无遮挡大片| 国产麻豆精品视频| 国产精品你懂的| 色婷婷久久久亚洲一区二区三区 | 国产剧情av麻豆香蕉精品| 久久这里只有精品首页| 国产91精品一区二区麻豆亚洲| 中文字幕 久热精品 视频在线| 99久久99久久综合| 午夜日韩在线观看| 久久久久久9999| 色综合色综合色综合| 日韩国产欧美三级| 精品女同一区二区| 波多野结衣在线aⅴ中文字幕不卡| 亚洲人成精品久久久久| 3751色影院一区二区三区| 国产精品一级在线| 亚洲一区二区欧美激情| 精品国产三级a在线观看| 成人18视频在线播放| 日本视频中文字幕一区二区三区| 久久婷婷成人综合色| 91亚洲男人天堂| 精品一区二区影视| 亚洲女与黑人做爰| 久久久www成人免费毛片麻豆| 色先锋aa成人| 国产盗摄精品一区二区三区在线 | 精品国产一区二区三区av性色| 丁香亚洲综合激情啪啪综合| 午夜久久久影院| 中国色在线观看另类| 欧美一区二区三区四区视频| 91色九色蝌蚪| 国产一区二区福利视频| 一区二区三区毛片| 国产精品久久国产精麻豆99网站| 欧美日韩国产精品成人| 99久久99久久综合| 国产一区二区在线视频| 日韩成人一区二区| 亚洲精品视频在线看| 日本一区二区电影| 欧美精品一区男女天堂| 欧美军同video69gay| 91蜜桃在线观看| 国产成人av电影在线| 蜜桃视频一区二区三区在线观看 | 亚洲国产毛片aaaaa无费看| 国产亚洲婷婷免费| 91麻豆精品久久久久蜜臀| 99精品久久99久久久久| 国产乱淫av一区二区三区| 蜜臀国产一区二区三区在线播放| 一区二区三区在线高清| 亚洲日本中文字幕区| 欧美国产日韩a欧美在线观看 | 99国产欧美久久久精品| 国产精品一区二区在线播放| 蜜桃一区二区三区在线观看| 五月激情六月综合| 性感美女久久精品| 亚洲一区免费观看| 一区二区久久久久| 亚洲黄色性网站| 亚洲欧洲综合另类在线| 136国产福利精品导航| 中文字幕在线播放不卡一区| 中文字幕欧美区| 国产精品久久久久久久久免费丝袜| 久久免费电影网| 久久精品视频一区二区三区| 久久久久久久av麻豆果冻| 国产欧美日韩在线| 国产精品美女久久久久久久久久久 | 久久久影视传媒| 久久久久久久久久久久久久久99 | 久久99久久99| 极品销魂美女一区二区三区| 黑人精品欧美一区二区蜜桃| 韩国三级在线一区| 国产精品一品视频| 99v久久综合狠狠综合久久| 99精品视频一区二区| 91国模大尺度私拍在线视频| 欧美无乱码久久久免费午夜一区| 欧美在线你懂得| 日韩一区二区三区三四区视频在线观看 | 亚洲午夜久久久久| 日韩高清一级片| 韩国v欧美v亚洲v日本v| 成人午夜在线免费| 91麻豆成人久久精品二区三区| 欧美在线观看视频一区二区| 欧美精品xxxxbbbb| 久久在线免费观看| 亚洲欧美日韩综合aⅴ视频| 天堂蜜桃一区二区三区| 国产真实精品久久二三区| 成人免费视频免费观看| 色噜噜狠狠一区二区三区果冻| 欧美精品久久天天躁| 国产亚洲精久久久久久| 亚洲一区自拍偷拍| 极品少妇一区二区三区精品视频| 9色porny自拍视频一区二区| 欧美精品九九99久久| 国产日韩高清在线| 日精品一区二区三区| 国产高清精品网站| 欧美性大战久久久| 国产性色一区二区| 性欧美大战久久久久久久久| 国产精品1区2区3区| 欧美日韩一区二区三区在线看| 欧美成人福利视频| 亚洲乱码国产乱码精品精小说| 蜜桃传媒麻豆第一区在线观看| 国产91精品精华液一区二区三区 | 欧美片在线播放| 久久久蜜桃精品| 亚洲成人7777| 97久久超碰国产精品电影| 日韩一二三区不卡| 一区二区三区免费网站| 成人精品免费看| 91精品国产入口在线| 国产精品国产成人国产三级| 久久精品久久99精品久久| 日本道色综合久久| 国产精品丝袜在线| 激情五月婷婷综合网| 欧美三级日韩三级| 亚洲天堂av老司机| 成人小视频在线| 久久综合五月天婷婷伊人| 日本三级韩国三级欧美三级| 色丁香久综合在线久综合在线观看| 国产午夜精品理论片a级大结局| 日韩精品电影在线观看| 欧美亚洲国产一区二区三区| 国产精品女人毛片| 成人一区二区三区中文字幕| 亚洲精品在线网站| 欧美影视一区二区三区| 国产精品毛片久久久久久| 国产资源在线一区| 欧美电影免费观看高清完整版在线观看| 亚洲激情男女视频| 色综合中文字幕国产| 国产亚洲视频系列| 国产乱理伦片在线观看夜一区| 日韩午夜精品视频| 日韩电影在线观看网站| 欧美久久久久久蜜桃| 日韩影院精彩在线| 制服丝袜亚洲色图| 美女一区二区视频| 日韩免费在线观看| 精品一区二区日韩| 久久一夜天堂av一区二区三区| 极品少妇一区二区三区精品视频 | 色哟哟欧美精品| 亚洲欧美一区二区三区国产精品| 成人av电影观看| 亚洲精品一二三| 欧美私人免费视频| 亚洲国产一区二区三区青草影视| 欧美视频日韩视频| 亚洲一区免费在线观看| 7777精品久久久大香线蕉| 蜜臀精品久久久久久蜜臀| 2019国产精品| av综合在线播放| 亚洲午夜av在线| 欧美一区二区网站| 国内精品免费**视频| 国产欧美日韩在线观看| 99精品视频在线观看| 五月婷婷久久综合| 26uuu久久综合| 91影院在线免费观看| 亚洲成人动漫在线免费观看| 欧美一级一区二区| 国产成人三级在线观看| 亚洲美女屁股眼交3| 91啪九色porn原创视频在线观看| 亚洲激情第一区| 日韩精品中午字幕| 成人黄色av电影| 日韩激情一区二区| 日本一区二区三区四区在线视频| 91蝌蚪国产九色| 日韩高清不卡一区| 亚洲欧洲精品成人久久奇米网|