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

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

?? fragment.cpp

?? 英文版的 想要的話可以下載了 為大家服務
?? CPP
字號:
/*
 * FRAGMENT.CPP
 * Fragmented File Generator Chapter 7
 *
 * Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved
 *
 * Kraig Brockschmidt, Microsoft
 * Internet  :  kraigb@microsoft.com
 * Compuserve:  >INTERNET:kraigb@microsoft.com
 */


#include "fragment.h"


/*
 * WinMain
 *
 * Purpose:
 *  Main entry point of application.  This application does nothing
 *  more than pump out garbage into storage as a framented file test.
 *  It has no UI so does not process any messages.
 *
 *  The file created is always called FRAGMENT.BIN.
 */

int PASCAL WinMain(HINSTANCE hInst, HINSTANCE hInstPrev
    , LPSTR pszCmdLine, int nCmdShow)
    {
    CFragment  *pFrag;

    pFrag=new CFragment();

    if (NULL==pFrag)
        return -1;

    if (pFrag->Init())
        {
        if (pFrag->AllocCharArrays())
            {
            if (pFrag->CreateFragmentedFile())
                {
                pFrag->FreeSpaceInFile();
                pFrag->DefragmentFile();
                }
            }
        }

    delete pFrag;
    return 0;
    }




/*
 * CFragment::CFragment
 * CFragment::~CFragment
 *
 * Constructor and Destructor for this application.  The
 * constructor does not have any parameters.
 */

CFragment::CFragment(void)
    {
    m_fInitialized=FALSE;
    m_pIMalloc=NULL;
    m_pch=NULL;
    m_pszScratch=NULL;

    m_cch=256;
    m_cStreams=CSTREAMS;

    lstrcpy(m_szFile, TEXT("FRAGMENT.BIN"));
    m_hCur=NULL;

    return;
    }


CFragment::~CFragment(void)
    {
    if (NULL!=m_hCur)
        SetCursor(m_hCur);

    if (NULL!=m_pIMalloc)
        {
        if (NULL!=m_pch)
            m_pIMalloc->Free(m_pch);

        if (NULL!=m_pszScratch)
            m_pIMalloc->Free(m_pszScratch);

        m_pIMalloc->Release();
        }

    if (m_fInitialized)
        CoUninitialize();

    return;
    }




/*
 * CFragment::Init
 *
 * Purpose:
 *  Calls CoInitialize and CoGetMalloc saving the task allocator.
 *
 * Parameters:
 *  None
 *
 * Return Value:
 *  BOOL            TRUE if initialization worked, FALSE otherwise.
 */

BOOL CFragment::Init(void)
    {
    CHECKVER_COM;

    if (FAILED(CoInitialize(NULL)))
        return FALSE;

    m_fInitialized=TRUE;

    if (FAILED(CoGetMalloc(MEMCTX_TASK, &m_pIMalloc)))
        return FALSE;

    m_pszScratch=(TCHAR *)m_pIMalloc->Alloc(1024*sizeof(TCHAR));

    if (NULL==m_pszScratch)
        return FALSE;

    m_hCur=SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_WAIT)));
    return TRUE;
    }



/*
 * CFragmet::AllocCharArrays
 *
 * Purpose:
 *  Allocates CSTREAMS * 256 characters and initializes each 256
 *  charaters with 'A', 'B', etc.  (ANSI characters, not UNICODE).
 *
 * Parameters:
 *  None
 *
 * Return Value:
 *  BOOL            TRUE if the memory was allocated and initialized
 *                  otherwise FALSE.
 */

BOOL CFragment::AllocCharArrays(void)
    {
    char *      pchT;
    UINT        i, j;

    if (NULL==m_pIMalloc)
        return FALSE;

    m_pch=(char *)m_pIMalloc->Alloc(m_cch*m_cStreams);

    if (NULL==m_pch)
        return FALSE;

    pchT=m_pch;

    //Initialize Character Arrays
    for (i=0; i < m_cStreams; i++)
        {
        char    ch=i+'A';

        for (j=0; j < m_cch; j++)
            *pchT++=ch;
        }

    return TRUE;
    }




/*
 * CFragment::CreateFragmentedFile
 *
 * Purpose:
 *  Creates a file with numerous streams that we can fragment.
 *
 * Parameters:
 *  None
 *
 * Return Value:
 *  BOOL            TRUE if the file was created, FALSE otherwise.
 */

BOOL CFragment::CreateFragmentedFile(void)
    {
    HRESULT     hr;
    IStorage   *pIStorage;
    IStream    *rgpIStream[CSTREAMS];
    UINT        i, j;

    //Create the file to build
    hr=StgCreateDocfile(m_szFile, STGM_DIRECT | STGM_READWRITE
        | STGM_SHARE_EXCLUSIVE | STGM_CREATE, 0, &pIStorage);

    if (FAILED(hr))
        return FALSE;

    //Create streams in this file.
    for (i=0; i < m_cStreams; i++)
        StreamCreate(pIStorage, i, &rgpIStream[i]);

    /*
     * Now fill "Stream A" with A's, Stream B with B's, etc.,
     * doing it m_cch characters at a time, a total of 20 times for
     * each stream.  This will allow us to examine the binary
     * format of the file before and after defragmentation.
     *
     * This will create a number of streams that are internally
     * fragmented in the file.
     *
     * Some streams may be invalid, but checks for NULL below
     * avoid problems in such cases.
     */

    for (j=0; j < 20; j++)
        {
        for (i=0; i < m_cStreams; i++)
            {
            if (NULL!=rgpIStream[i])
                rgpIStream[i]->Write((m_pch+(m_cch*i)), m_cch, NULL);
            }
        }

    //Close all the streams
    for (i=0; i < m_cStreams; i++)
        {
        if (NULL!=rgpIStream[i])
            rgpIStream[i]->Release();
        }

    //Close the IStorage to close the file.
    pIStorage->Release();

    Message(TEXT("%s created."));
    return TRUE;
    }







/*
 * CFragment::FreeSpaceInFile
 *
 * Purpose:
 *  Deletes some of the streams in the previously created file.
 *
 * Parameters:
 *  None
 *
 * Return Value:
 *  None
 */

void CFragment::FreeSpaceInFile(void)
    {
    HRESULT     hr;
    IStorage   *pIStorage;

    //Reopen the storage
    hr=StgOpenStorage(m_szFile, NULL, STGM_DIRECT | STGM_READWRITE
        | STGM_SHARE_EXCLUSIVE, NULL, 0, &pIStorage);

    if (SUCCEEDED(hr))
        {
        /*
         * Now create some extra space in the file by destroying
         * streams C E G H J M N T X.
         */
        pIStorage->DestroyElement(OLETEXT("Stream C"));
        pIStorage->DestroyElement(OLETEXT("Stream E"));
        pIStorage->DestroyElement(OLETEXT("Stream G"));
        pIStorage->DestroyElement(OLETEXT("Stream H"));
        pIStorage->DestroyElement(OLETEXT("Stream J"));
        pIStorage->DestroyElement(OLETEXT("Stream M"));
        pIStorage->DestroyElement(OLETEXT("Stream N"));
        pIStorage->DestroyElement(OLETEXT("Stream T"));
        pIStorage->DestroyElement(OLETEXT("Stream X"));

        /*
         * The file size will not have changed here, but there
         * will be unused space.
         */

        pIStorage->Release();
        Message(TEXT("Space has been freed in %s."));
        }
    else
        Message(TEXT("Could not reopen %s."));

    return;
    }





/*
 * CFragment::DefragmentFile
 *
 * Purpose:
 *  Does an IStorage::CopyTo from the existing file to a temp
 *  file then copies that temp file as binary back to the source
 *  file.
 *
 * Parameters:
 *  None
 *
 * Return Value:
 *  None
 */

void CFragment::DefragmentFile(void)
    {
    HRESULT     hr;
    IStorage   *pIStorageOld;
    IStorage   *pIStorageNew;
    STATSTG     st;
   #ifndef WIN32
    OFSTRUCT    of;
   #endif
    TCHAR       szTemp[MAX_PATH];

    /*
     * Create a temporary file.  We don't use DELETEONRELEASE
     * in case we have to save it when copying over the old
     * file fails.
     */
    hr=StgCreateDocfile(NULL, STGM_CREATE | STGM_READWRITE
        | STGM_DIRECT | STGM_SHARE_EXCLUSIVE, 0, &pIStorageNew);

    if (FAILED(hr))
        {
        Message(TEXT("Failed to create temp file to copy %s."));
        return;
        }

    //Open the existing file as read-only
    hr=StgOpenStorage(m_szFile, NULL, STGM_DIRECT | STGM_READ
        | STGM_SHARE_DENY_WRITE, NULL, 0, &pIStorageOld);

    if (FAILED(hr))
        {
        pIStorageNew->Release();
        Message(TEXT("Failed to open %s for CopyTo."));
        return;
        }

    /*
     * Compress with CopyTo.  Since the temp is opened in
     * direct mode, changes are immediate.
     */
    hr=pIStorageOld->CopyTo(NULL, NULL, NULL, pIStorageNew);
    pIStorageOld->Release();

    if (FAILED(hr))
        {
        pIStorageNew->Release();
        Message(TEXT("IStorage::CopyTo from %s failed."));
        return;
        }

    //Get the name of the temp file.
    pIStorageNew->Stat(&st, 0);
    pIStorageNew->Release();

    //Delete the old file before copying back to insure truncation
   #ifdef WIN32
    DeleteFile(m_szFile);

   #ifdef WIN32ANSI
    WideCharToMultiByte(CP_ACP, 0, st.pwcsName, -1, szTemp
        , MAX_PATH, NULL, NULL);
   #else
    lstrcpy(szTemp, st.pwcsName);
   #endif

    MoveFile(szTemp, m_szFile);
   #else
    OpenFile(m_szFile, &of, OF_DELETE);
    MyMoveFile(st.pwcsName, m_szFile);
   #endif

    Message(TEXT("Defragementation complete on %s."));
    return;
    }




/*
 * CFragment::StreamCreate
 *
 * Purpose:
 *  Creates a stream with a given identifier in a given IStorage.
 *
 * Parameters:
 *  pIStorage       IStorage * in which to create the stream
 *  i               UINT ID of the stream
 *  ppIStream       IStream ** in which to return the stream.
 *
 * Return Value:
 *  None
 */

void CFragment::StreamCreate(IStorage *pIStorage, UINT i
    , IStream ** ppIStream)
    {
    OLECHAR  szName[40];

    //Name is "Stream A", "Stream B", etc.
   #ifdef WIN32ANSI
    char        szTemp[40];

    wsprintf(szTemp, "Stream %c", i+'A');
    MultiByteToWideChar(CP_ACP, 0, szTemp, -1, szName, 40);
   #else
    wsprintf(szName, TEXT("Stream %c"), i+'A');
   #endif

    pIStorage->CreateStream(szName, STGM_DIRECT
        | STGM_CREATE | STGM_READWRITE | STGM_SHARE_EXCLUSIVE
        , 0, 0, ppIStream);

    return;
    }



/*
 * CFragment::Message
 *
 * Purpose:
 *  Outputs a message with the filename included.
 *
 * Parameters:
 *  pszFmt          LPTSTR to a wsprintf format string.
 *
 * Return Value:
 *  None
 */

void CFragment::Message(LPTSTR pszFmt)
    {
    wsprintf(m_pszScratch, pszFmt, m_szFile);
    MessageBox(NULL, m_pszScratch, TEXT("Fragmenter"), MB_OK);
    return;
    }





#ifndef WIN32
/*
 * CFragment::MyMoveFile
 *
 * Purpose:
 *  Low-level MoveFile function for 16-bit Windows that lack
 *  the MoveFile[Ex] API.
 *
 * Parameters:
 *  pszSrc          char * of the source filename,
 *  pszDst          char * of the destination filename,
 *
 * Return Value:
 *  None
 */

void CFragment::MyMoveFile(char *pszSrc, char *pszDst)
    {
    HFILE       hFile1, hFile2;
    ULONG       cbCopy;
    const UINT  cbBlock=4096;
    LPBYTE      pb;
    OFSTRUCT    of;

    //Do a binary copy between files.
    hFile1=_lopen(pszSrc, READ | OF_SHARE_EXCLUSIVE);

    if (HFILE_ERROR==hFile1)
        return;

    //Recreate this file before copying.
    hFile2=_lcreat(m_szFile, 0);

    if (HFILE_ERROR==hFile2)
        {
        _lclose(hFile1);
        return;
        }

    //Seek to end of source file to find length
    cbCopy=_llseek(hFile1, 0, 2);
    _llseek(hFile1, 0, 0);

    pb=(LPBYTE)m_pIMalloc->Alloc(cbBlock);

    if (NULL!=pb)
        {
        //Copy in 4K increments
        while (cbCopy >= (ULONG)cbBlock)
            {
            _lread(hFile1,  pb, cbBlock);
            _lwrite(hFile2, pb, cbBlock);
            cbCopy-=4096;
            }

        _lread(hFile1,  pb, (UINT)cbCopy);
        _lwrite(hFile2, pb, (UINT)cbCopy);
        m_pIMalloc->Free(pb);
        }

    _lclose(hFile2);
    _lclose(hFile1);

    //Delete the temp file
    OpenFile(pszSrc, &of, OF_DELETE);
    return;
    }
#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产免费观看久久| 亚洲国产精品久久人人爱| 91精品国产综合久久福利| 欧美日韩精品欧美日韩精品| 日韩国产一二三区| 日韩精品专区在线| 日韩美女一区二区三区四区| 欧美一区二区在线观看| 日韩欧美一区二区不卡| jiyouzz国产精品久久| 欧美精品高清视频| 亚洲一区二区三区不卡国产欧美| 丁香天五香天堂综合| 国产麻豆一精品一av一免费 | 国产自产2019最新不卡| 色噜噜狠狠色综合欧洲selulu| 91精品国产综合久久香蕉的特点| 日本在线不卡视频| 久久国产精品无码网站| 国产成人综合亚洲91猫咪| 欧美午夜精品久久久久久超碰 | 日本在线不卡视频| 久久综合九色综合欧美亚洲| 国产精品美女一区二区三区| 欧美国产乱子伦| 午夜久久久影院| 国产一区二区福利| 欧美亚洲一区三区| 国产欧美精品国产国产专区 | 成人一级视频在线观看| 欧美xxx久久| 久久99精品视频| 欧美日本精品一区二区三区| 18成人在线视频| 国产成人av一区二区三区在线 | 国产精品一级在线| 久久久久国色av免费看影院| 午夜私人影院久久久久| 777色狠狠一区二区三区| 国内精品第一页| 一区二区免费看| 在线观看日韩高清av| 色狠狠一区二区三区香蕉| 亚洲成年人影院| 欧美精品丝袜久久久中文字幕| 污片在线观看一区二区| 欧美一卡二卡在线观看| 国产伦精一区二区三区| 亚洲国产精品成人综合色在线婷婷 | 亚洲午夜在线电影| 精品污污网站免费看| 免费看欧美女人艹b| 紧缚捆绑精品一区二区| 亚洲午夜三级在线| 亚洲人成电影网站色mp4| 国产欧美一区二区在线观看| 精品嫩草影院久久| 日韩欧美激情在线| 日韩一二三四区| 欧美一区二区三区在线观看| 欧美日本一道本在线视频| av欧美精品.com| 91免费视频网| 波波电影院一区二区三区| 喷白浆一区二区| 久久99热狠狠色一区二区| 一级精品视频在线观看宜春院| 日韩免费视频一区二区| 欧美揉bbbbb揉bbbbb| 91丨九色丨蝌蚪富婆spa| 国产高清亚洲一区| 老司机精品视频在线| 午夜欧美视频在线观看 | 午夜激情一区二区三区| 一区二区三区中文字幕| 亚洲美女精品一区| 亚洲午夜久久久久久久久电影网| 国产欧美精品日韩区二区麻豆天美| 2019国产精品| 亚洲区小说区图片区qvod| 亚洲伊人色欲综合网| 麻豆91免费看| 亚洲电影一级片| 中文欧美字幕免费| 国产亚洲精久久久久久| 欧美成人bangbros| 精品国产不卡一区二区三区| 欧美一级理论性理论a| 欧美另类一区二区三区| 91视频观看视频| 91福利视频久久久久| 欧美午夜在线观看| 欧美不卡视频一区| 日本一区二区综合亚洲| 一区二区三区视频在线观看| 一区二区在线观看视频在线观看| 午夜av一区二区三区| 蜜臀国产一区二区三区在线播放| 美腿丝袜亚洲一区| 成人a区在线观看| 欧美亚洲动漫精品| 欧美一级欧美一级在线播放| 欧美mv和日韩mv的网站| 国产精品国产三级国产普通话蜜臀| 国产清纯白嫩初高生在线观看91| 国产精品美女久久久久高潮| 亚洲一区二区三区激情| 国产.精品.日韩.另类.中文.在线.播放| 成人午夜精品一区二区三区| 欧美色手机在线观看| 国产视频亚洲色图| 丝袜诱惑亚洲看片| 91一区二区在线观看| 欧美精品一区二区高清在线观看| 日韩毛片在线免费观看| 国产一本一道久久香蕉| 欧美一区二区三区日韩| 一区二区三区四区乱视频| 精品无人码麻豆乱码1区2区| 欧美午夜电影一区| 亚洲人精品午夜| 99久久久国产精品免费蜜臀| 久久这里只有精品首页| 久久99国产乱子伦精品免费| 欧美色精品天天在线观看视频| 国产精品视频免费看| 美女视频黄频大全不卡视频在线播放| 97久久人人超碰| 亚洲日本护士毛茸茸| 91网站视频在线观看| 中文在线资源观看网站视频免费不卡 | 亚洲天堂久久久久久久| 成人在线视频首页| 国产精品每日更新| 成人免费视频视频在线观看免费 | 91片在线免费观看| 亚洲另类在线视频| 91.成人天堂一区| 久久99最新地址| 国产欧美视频一区二区三区| 99国产精品久久久久| 亚洲欧美成人一区二区三区| 欧美三级日韩三级| 亚洲一区二三区| jizz一区二区| 奇米色777欧美一区二区| 国产欧美一区视频| 欧美麻豆精品久久久久久| 久久国产尿小便嘘嘘尿| 中文字幕亚洲欧美在线不卡| 欧美久久一区二区| 国产91在线看| 美国欧美日韩国产在线播放| 国产精品欧美极品| 精品日韩欧美在线| 色综合天天在线| 视频在线观看一区| 人人精品人人爱| 欧美xfplay| 国产精品一区二区在线看| 久久久另类综合| 91成人看片片| 免费不卡在线观看| 日韩欧美精品在线| 成人精品一区二区三区中文字幕| 亚洲成人精品一区二区| 色婷婷综合在线| 91视频一区二区| 国产精品视频观看| 韩国精品在线观看| xnxx国产精品| 精品一区二区三区蜜桃| 日韩精品一区二区三区四区视频| 亚洲成人激情自拍| 色就色 综合激情| 97精品久久久午夜一区二区三区| 免费在线观看精品| 国产欧美精品一区| 久久久影视传媒| 91精品国产综合久久久蜜臀粉嫩 | 国产亚洲精品久| 26uuu欧美日本| 宅男噜噜噜66一区二区66| 91麻豆免费视频| 97精品国产97久久久久久久久久久久| 久久久久国产成人精品亚洲午夜| 欧美吻胸吃奶大尺度电影| 91日韩在线专区| 国产一区999| 成人免费视频播放| 丝袜美腿成人在线| 精品一区二区三区视频在线观看 | 亚洲欧洲日韩一区二区三区| 884aa四虎影成人精品一区| 北条麻妃一区二区三区| av在线综合网| 丁香激情综合国产| av激情亚洲男人天堂| 精品国产乱码久久久久久1区2区| 久久人人97超碰com|