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

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

?? cfileio.cpp

?? 研讀AxCrypt對加解密的處理方法
?? CPP
字號:
/*! \file
    \brief Implementation of AxPipe::CSourceFileIO and AxPipe::CSinkFileIO, Win32 File IO

    @(#) $Id$

    AxPipe - Binary Stream Framework

    Copyright (C) 2003 Svante Seleborg/Axon Data, All rights reserved.

    This program is free software; you can redistribute it and/or modify it under the terms
    of the GNU General Public License as published by the Free Software Foundation;
    either version 2 of the License, or (at your option) any later version.

    This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
    without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    See the GNU General Public License for more details.

    You should have received a copy of the GNU General Public License along with this program;
    if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
    Boston, MA 02111-1307 USA

    The author may be reached at mailto:axpipe@axondata.se and http://axpipe.sourceforge.net

    Why is this framework released as GPL and not LGPL? See http://www.gnu.org/philosophy/why-not-lgpl.html

----
\verbatim
    CFileIO.cpp                     Implementation of CSourceFileIO and CSinkFileIO, Win32 files

    E-mail                          YYYY-MM-DD              Reason
    axpipe@axondata.se              2005-05-18              Initial
\endverbatim
*/
#include "stdafx.h"
#include "CFileIO.h"

#include "AxAssert.h"
#define AXLIB_ASSERT_FILE "CFileIO.cpp"

namespace AxPipe {
    /// \brief Just initialize member variables
    CSourceFileIO::CSourceFileIO() {
        m_szFileName = NULL;
        m_hFile = INVALID_HANDLE_VALUE;
    }

    /// \brief Additional destruction necessary...
    CSourceFileIO::~CSourceFileIO() {
        delete[] m_szFileName;
    }

    /// \brief Get the file path used
    /// \return A pointer to the path used. Owned by this class. Deleted here.
    const _TCHAR *
    CSourceFileIO::GetFilePath() {
        return m_szFileName;
    }

    /// \brief Get the handle to the opened file
    /// \return An operating system handle to the open file.
    HANDLE
    CSourceFileIO::GetHandle() {
        return m_hFile;
    }

    /// \brief Set file and chunk size
    /// \param szFileName The name of the file, it is copied and saved here.
    /// \param cbChunk The size of the chunks we send downstream
    /// \return A pointer to 'this' CSourceFileIO
    CSourceFileIO *CSourceFileIO::Init(const _TCHAR *szFileName, size_t cbChunk) {
        m_cbChunk = cbChunk;
        size_t cbLen = lstrlen(szFileName);
        CopyMemory(m_szFileName = new _TCHAR[cbLen+1], szFileName, (cbLen + 1) * sizeof (_TCHAR));
        return this;
    }

    /// \brief Use an open sink as the source instead. Must be used in/before OutClose() of the sink
    /// \param pSink Pointer to a CSinkFileIO, must be open.
    /// \param cbChunk The size of the chunks we send downstream
    /// \return A pointer to 'this' CSourceFileIO
    CSourceFileIO *CSourceFileIO::Init(CSinkFileIO *pSink, size_t cbChunk) {
        // Use a duplicate of the handle, so we can close it normally
        if (DuplicateHandle(GetCurrentProcess(), pSink->m_hFile, GetCurrentProcess(), &m_hFile, 0, FALSE, DUPLICATE_SAME_ACCESS) == 0) {
            SetError(ERROR_CODE_GENERIC, _T("CSourceFileIO::CSourceFileIO DuplicateHandle error [%s]"), my_ptr<_TCHAR>(AxLib::APerror(pSink->m_szFileName)).get());
            return this;
        }
        return Init(pSink->m_szFileName, cbChunk);
    }

    /// \brief Open the file
    ///
    /// The filename is provided in the Init() call.
    /// Check for error with GetErrorCode().
    /// \return true if we are to propagate, which we do if no error occurred. false is not an error indication though.
    bool CSourceFileIO::OutOpen() {
        if (m_hFile == INVALID_HANDLE_VALUE) {
            m_hFile = CreateFile(m_szFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL);
            if (m_hFile == INVALID_HANDLE_VALUE) {
                SetError(ERROR_CODE_GENERIC, _T("CSourceFileIO::CSourceFileIO open error [%s]"), my_ptr<_TCHAR>(AxLib::APerror(m_szFileName)).get());
                return false;                   // No point propagating if we already failed
            }
        }
        // Find out how large the file is
        LARGE_INTEGER li;
        if (GetFileSizeEx(m_hFile, &li) == 0) {
            SetError(ERROR_CODE_GENERIC, _T("CSourceFileIO::CSourceFileIO GetFileSizeEx error [%s]"), my_ptr<_TCHAR>(AxLib::APerror(m_szFileName)).get());
            return false;                   // No point propagating if we already failed
        }
        m_cbFileSize = li.QuadPart;
        // Get the current location in the file - normally zero, but just to be careful since we may be re-using an open handle
        li.QuadPart = 0;
        if (SetFilePointerEx(m_hFile, li, reinterpret_cast<PLARGE_INTEGER>(&m_cbStreamPos), FILE_CURRENT) == 0) {
            SetError(ERROR_CODE_GENERIC, _T("CSourceFileIO::CSourceFileIO SetFilePointerEx error [%s]"), my_ptr<_TCHAR>(AxLib::APerror(m_szFileName)).get());
            return false;                   // No point propagating if we already failed
        }
        return true;
    }

    /// \brief Close the file
    ///
    /// Check for error with GetErrorCode().
    /// \return true if propagation of the close is recommended, which it is if no error. false is not error indication though.
    bool CSourceFileIO::OutClose(void) {
        if (m_hFile != INVALID_HANDLE_VALUE) {
            if (!CloseHandle(m_hFile)) {
                SetError(ERROR_CODE_GENERIC, _T("CSourceFileIO::Close failed to close file [%s]"), my_ptr<_TCHAR>(AxLib::APerror()).get());
                return true;
            }
            m_hFile = INVALID_HANDLE_VALUE;
        }
        return true;
    }

    /// \brief Get the next chunk from the input file
    ///
    /// Multiple calls on EOF conditions are allowed.
    ///
    /// \return A chunk, or zero-length on End-Of-File, or NULL on error.
    CSeg *CSourceFileIO::In() {
        if (m_cbStreamPos == m_cbFileSize) {
            return new CSeg;    // Return a zero-sized segment.
        }
        size_t cbThisChunk = m_cbChunk;
        if (m_cbStreamPos + cbThisChunk > m_cbFileSize) {
            cbThisChunk = (size_t)(m_cbFileSize - m_cbStreamPos);
        }
		DWORD cbBytesRead = 0;
		CSeg *pSeg = new CSeg(cbThisChunk);
		ASSPTR(pSeg);

		if (!ReadFile(m_hFile, pSeg->PtrWr(), (DWORD)cbThisChunk, &cbBytesRead, FALSE)) {
            SetError(ERROR_CODE_GENERIC, _T("CSourceFileIO::In() failed to read file [%s]"), my_ptr<_TCHAR>(AxLib::APerror()).get());
		}

        m_cbStreamPos += cbBytesRead;
        return pSeg;
    }

    /// \brief Initialize member variables etc.
    CSinkFileIO::CSinkFileIO() {
        m_szFileName = NULL;
        m_hFile = INVALID_HANDLE_VALUE;
        m_cbOutPos = 0;
    }

    /// \brief Additional destruction necessary...
    CSinkFileIO::~CSinkFileIO() {
        delete[] m_szFileName;
    }

    /// \brief Get the file path used
    /// \return A pointer to the path used. Owned by this class. Deleted here.
    const _TCHAR *
    CSinkFileIO::GetFilePath() {
        return m_szFileName;
    }

    /// \brief Get the handle to the opened file
    /// \return An operating system handle to the open file.
    HANDLE
    CSinkFileIO::GetHandle() {
        return m_hFile;
    }

    /// \brief Set the file pointer. Do not truncate.
    void
    CSinkFileIO::SetFilePos(longlong i) {
        LARGE_INTEGER li;
        li.QuadPart = i;
        if (!::SetFilePointerEx(m_hFile, li, NULL, FILE_BEGIN)) {
            SetError(ERROR_CODE_GENERIC, _T("CSinkFileIO::SetFilePointerEx failed [%s]"), my_ptr<_TCHAR>(AxLib::APerror()).get());
        }
        m_cbOutPos = i;
    }

    /// \brief Set the end-of-file pointer at the current position.
    void
    CSinkFileIO::SetFileEnd() {
        if (!::SetEndOfFile(m_hFile)) {
            SetError(ERROR_CODE_GENERIC, _T("CSinkFileIO::Can't set end of file [%s]"), my_ptr<_TCHAR>(AxLib::APerror()).get());
        }
    }

    /// \brief Get the current size of the file.
    longlong
    CSinkFileIO::FileSize() {
        LARGE_INTEGER li;
        if (!::GetFileSizeEx(m_hFile, &li)) {
            SetError(ERROR_CODE_GENERIC, _T("CSinkFileIO::Can't get size of file [%s]"), my_ptr<_TCHAR>(AxLib::APerror()).get());
        }
        return static_cast<longlong>(li.QuadPart);
    }

    /// \brief Set file and chunk size
    /// \param szFileName The name of the file, it is copied and saved here.
    /// \param cbChunk The size of the chunks we provide upon request via OutGetSeg() upstream.
    /// \return A pointer to 'this' CSinkFileIO
    CSinkFileIO *
    CSinkFileIO::Init(const TCHAR *szFileName, size_t cbChunk) {
        m_cbChunk = cbChunk;
        size_t cbLen = lstrlen(szFileName);
        CopyMemory(m_szFileName = new _TCHAR[cbLen+1], szFileName, (cbLen + 1) * sizeof (_TCHAR));
        return this;
    }

    /// \brief Close the file, as well as all mappings, set end of file etc.
    ///
    /// Check for errors with GetErrorCode()
    /// \return true to propagate the close.
    bool
    CSinkFileIO::OutClose() {
        if (m_hFile != INVALID_HANDLE_VALUE) {
            do { // Once
                //
                //  Set end of file pointer
                //
                if (!::SetEndOfFile(m_hFile)) {
                    DWORD dwErr = GetLastError();
                    SetError(ERROR_CODE_GENERIC, _T("CSinkFileIO::Close can't set end of file [%s]"), my_ptr<_TCHAR>(AxLib::APerror()).get());
                    break;
                }
                if (!::CloseHandle(m_hFile)) {
                    SetError(ERROR_CODE_GENERIC, _T("CSinkFileIO::Close failed to close file [%s]"), my_ptr<_TCHAR>(AxLib::APerror()).get());
                    break;
                }
                m_hFile = INVALID_HANDLE_VALUE;
            } while (false);
        }
        return true;
    }

	/// \brief Write a segment to the file
    /// \param pSeg The segment
    void
    CSinkFileIO::Out(CSeg *pSeg) {
		DWORD cbBytesWritten;
        if (!::WriteFile(m_hFile, pSeg->PtrRd(), (DWORD)pSeg->Len(), &cbBytesWritten, FALSE)) {
            SetError(ERROR_CODE_GENERIC, _T("CSinkFileIO::Out() failed to write file [%s]"), my_ptr<_TCHAR>(AxLib::APerror()).get());
		}
		m_cbOutPos += pSeg->Len();
        pSeg->Release();
    }

    /// \brief Open the file named in Init() for output
    ///
    /// Check for errors with GetErrorCode().
    /// \return true to propagate the open, which we do if no error. false is not an error condition.
    bool
    CSinkFileIO::OutOpen() {
        // If it's there, open for writing, otherwise create it.
        m_hFile = ::CreateFile(m_szFileName, GENERIC_WRITE|GENERIC_READ, 0, NULL, OPEN_ALWAYS, FILE_FLAG_SEQUENTIAL_SCAN, NULL);
        if (m_hFile == INVALID_HANDLE_VALUE) {
            SetError(ERROR_CODE_GENERIC, _T("CSinkFileIO::CSinkFileIO open error [%s]"), my_ptr<_TCHAR>(AxLib::APerror(m_szFileName)).get());
        }
        m_cbOutPos = 0;
        return true;
    }
};

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美日韩国产中文在线| hitomi一区二区三区精品| 成人性生交大片| 日韩av不卡一区二区| 欧美性受极品xxxx喷水| 一区二区免费在线| 欧美剧情电影在线观看完整版免费励志电影| 依依成人精品视频| 欧美老肥妇做.爰bbww视频| 日韩精品国产精品| 欧美精品一区二区三区在线 | 国产欧美日韩卡一| 一本色道亚洲精品aⅴ| 亚洲一区在线电影| 日韩一级高清毛片| 国产精品538一区二区在线| 自拍av一区二区三区| 在线欧美小视频| 久久激情五月激情| 国产精品国产馆在线真实露脸| 色美美综合视频| 免费国产亚洲视频| 国产精品电影一区二区三区| 欧美区视频在线观看| 经典三级一区二区| 一级特黄大欧美久久久| 欧美精品一区二区三区四区| 91亚洲国产成人精品一区二三| 丝袜国产日韩另类美女| 国产日韩高清在线| 欧美精品一二三四| 成人自拍视频在线观看| 午夜精品一区二区三区三上悠亚| 精品动漫一区二区三区在线观看| 91麻豆免费看| 国产一区亚洲一区| 性久久久久久久久| 国产精品毛片无遮挡高清| 在线综合视频播放| www.亚洲色图| 国产在线视频精品一区| 亚洲一区二区在线视频| 国产日韩视频一区二区三区| 7777精品伊人久久久大香线蕉的 | 热久久一区二区| 亚洲欧美国产高清| 久久久久久久综合日本| 9191精品国产综合久久久久久| 国产黄色精品网站| 免费在线观看一区二区三区| 亚洲久草在线视频| 日本一区二区三区国色天香| 日韩一区二区免费高清| 日本福利一区二区| 99re视频这里只有精品| 国产成人av电影| 精品亚洲成a人在线观看 | 日韩美女久久久| 国产喂奶挤奶一区二区三区| 日韩欧美一二三| 欧美肥大bbwbbw高潮| 欧美三级三级三级| 色哟哟日韩精品| 91影视在线播放| 成人高清视频在线观看| 国产成人在线观看| 国产最新精品免费| 国产精一区二区三区| 久久99久久精品| 韩日欧美一区二区三区| 美女诱惑一区二区| 另类小说一区二区三区| 日本vs亚洲vs韩国一区三区| 日本美女一区二区| 免费欧美在线视频| 久久99精品国产| 久久国产精品无码网站| 免费在线一区观看| 久久er精品视频| 韩国v欧美v亚洲v日本v| 国产一区二三区好的| 国产成人aaa| 不卡电影一区二区三区| av在线一区二区| 91网站视频在线观看| 日本精品一区二区三区高清| 欧美最猛黑人xxxxx猛交| 在线观看一区不卡| 欧美日韩国产高清一区二区三区| 欧美日韩一二区| 91.com在线观看| 久久日韩粉嫩一区二区三区| 国产色一区二区| 自拍偷拍国产精品| 婷婷综合五月天| 在线区一区二视频| 欧美一区二区三区白人| 2021国产精品久久精品| 国产欧美日韩一区二区三区在线观看| 国产精品久久久久天堂| 亚洲另类中文字| 日韩福利视频网| 国产成人综合亚洲网站| eeuss影院一区二区三区| 欧美在线视频你懂得| 91麻豆精品国产91久久久 | 国内精品久久久久影院色| 成人一区在线看| 欧美视频中文一区二区三区在线观看| 欧美人伦禁忌dvd放荡欲情| 精品日韩av一区二区| 国产精品久久久久三级| 亚洲午夜影视影院在线观看| 精品一区二区三区久久久| 暴力调教一区二区三区| 欧美一级一区二区| 欧美国产一区二区| 香蕉久久一区二区不卡无毒影院 | 欧美日韩中文一区| 久久综合丝袜日本网| 一区二区三区91| 国产激情一区二区三区桃花岛亚洲| 99久久99久久精品免费看蜜桃| 欧美日韩国产电影| 中文无字幕一区二区三区| 一个色妞综合视频在线观看| 狠狠狠色丁香婷婷综合激情| 91久久人澡人人添人人爽欧美| 精品久久久久久最新网址| 夜夜精品视频一区二区| 国产最新精品精品你懂的| 欧美色电影在线| 国产精品乱码一区二三区小蝌蚪| 天天操天天综合网| 色综合中文字幕| 国产亚洲短视频| 久久99久久99小草精品免视看| 91久久精品一区二区| 国产精品天美传媒| 韩国女主播一区| 欧美一区二区三区爱爱| 亚洲最快最全在线视频| 不卡一区二区在线| 久久久午夜精品理论片中文字幕| 午夜精彩视频在线观看不卡| 91麻豆国产自产在线观看| 欧美国产国产综合| 国产一区二区三区精品欧美日韩一区二区三区 | 久久99精品久久久久久动态图 | 久久久久国产成人精品亚洲午夜| 中文字幕 久热精品 视频在线| 亚洲自拍都市欧美小说| 丁香五精品蜜臀久久久久99网站| 日韩一二三四区| 国产蜜臀97一区二区三区| 国产一区二区在线视频| 欧美日韩一区在线观看| 中文字幕av一区二区三区免费看| 天堂va蜜桃一区二区三区漫画版| 91麻豆高清视频| 国产精品视频一二三| 蜜臀av性久久久久av蜜臀妖精| 91久久精品一区二区二区| 亚洲精品自拍动漫在线| 成人精品在线视频观看| 久久精品水蜜桃av综合天堂| 毛片av中文字幕一区二区| 欧美婷婷六月丁香综合色| 国产欧美综合色| av在线一区二区三区| 国产欧美日韩不卡| 国产福利一区二区| 中文字幕一区免费在线观看| 丁香天五香天堂综合| 国产婷婷色一区二区三区在线| 免费日本视频一区| 久久精品视频一区| 51精品视频一区二区三区| 午夜精品福利在线| 色婷婷精品大在线视频| 亚洲gay无套男同| 欧美唯美清纯偷拍| 亚洲一区二区三区三| 99国产欧美另类久久久精品| 国产精品欧美久久久久无广告 | 免费看欧美女人艹b| 日韩欧美精品在线视频| 免费观看一级欧美片| 91精品国产麻豆国产自产在线 | 国产欧美精品一区二区色综合 | 久久99精品久久久久久国产越南| 久久亚洲欧美国产精品乐播| 国产在线精品一区二区不卡了| 日韩欧美国产一二三区| 国内成+人亚洲+欧美+综合在线| 国产女主播视频一区二区| 成+人+亚洲+综合天堂| 日韩理论片中文av| 欧美色窝79yyyycom| 精品一区二区久久|