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

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

?? 7zhandler.cpp

?? 壓縮解壓工具7-zip源代碼
?? CPP
字號:
// 7zHandler.cpp

#include "StdAfx.h"

extern "C"
{
  #include "../../../../C/CpuArch.h"
}

#include "../../../Common/ComTry.h"
#include "../../../Common/IntToString.h"

#ifdef COMPRESS_MT
#include "../../../Windows/System.h"
#endif

#include "../Common/ItemNameUtils.h"

#include "7zHandler.h"
#include "7zProperties.h"

#ifdef __7Z_SET_PROPERTIES
#ifdef EXTRACT_ONLY
#include "../Common/ParseProperties.h"
#endif
#endif

using namespace NWindows;

extern UString ConvertMethodIdToString(UInt64 id);

namespace NArchive {
namespace N7z {

CHandler::CHandler()
{
  _crcSize = 4;

  #ifndef _NO_CRYPTO
  _passwordIsDefined = false;
  #endif

  #ifdef EXTRACT_ONLY
  #ifdef COMPRESS_MT
  _numThreads = NSystem::GetNumberOfProcessors();
  #endif
  #else
  Init();
  #endif
}

STDMETHODIMP CHandler::GetNumberOfItems(UInt32 *numItems)
{
  *numItems = _db.Files.Size();
  return S_OK;
}

#ifdef _SFX

IMP_IInArchive_ArcProps_NO

STDMETHODIMP CHandler::GetNumberOfProperties(UInt32 * /* numProperties */)
{
  return E_NOTIMPL;
}

STDMETHODIMP CHandler::GetPropertyInfo(UInt32 /* index */,
      BSTR * /* name */, PROPID * /* propID */, VARTYPE * /* varType */)
{
  return E_NOTIMPL;
}


#else

STATPROPSTG kArcProps[] =
{
  { NULL, kpidMethod, VT_BSTR},
  { NULL, kpidSolid, VT_BOOL},
  { NULL, kpidNumBlocks, VT_UI4},
  { NULL, kpidPhySize, VT_UI8},
  { NULL, kpidHeadersSize, VT_UI8},
  { NULL, kpidOffset, VT_UI8}
};

STDMETHODIMP CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value)
{
  COM_TRY_BEGIN
  NCOM::CPropVariant prop;
  switch(propID)
  {
    case kpidMethod:
    {
      UString resString;
      CRecordVector<UInt64> ids;
      int i;
      for (i = 0; i < _db.Folders.Size(); i++)
      {
        const CFolder &f = _db.Folders[i];
        for (int j = f.Coders.Size() - 1; j >= 0; j--)
          ids.AddToUniqueSorted(f.Coders[j].MethodID);
      }

      for (i = 0; i < ids.Size(); i++)
      {
        UInt64 id = ids[i];
        UString methodName;
        /* bool methodIsKnown = */ FindMethod(EXTERNAL_CODECS_VARS id, methodName);
        if (methodName.IsEmpty())
          methodName = ConvertMethodIdToString(id);
        if (!resString.IsEmpty())
          resString += L' ';
        resString += methodName;
      }
      prop = resString;
      break;
    }
    case kpidSolid: prop = _db.IsSolid(); break;
    case kpidNumBlocks: prop = (UInt32)_db.Folders.Size(); break;
    case kpidHeadersSize:  prop = _db.HeadersSize; break;
    case kpidPhySize:  prop = _db.PhySize; break;
    case kpidOffset: if (_db.ArchiveInfo.StartPosition != 0) prop = _db.ArchiveInfo.StartPosition; break;
  }
  prop.Detach(value);
  return S_OK;
  COM_TRY_END
}

IMP_IInArchive_ArcProps

#endif

static void SetPropFromUInt64Def(CUInt64DefVector &v, int index, NCOM::CPropVariant &prop)
{
  UInt64 value;
  if (v.GetItem(index, value))
  {
    FILETIME ft;
    ft.dwLowDateTime = (DWORD)value;
    ft.dwHighDateTime = (DWORD)(value >> 32);
    prop = ft;
  }
}

#ifndef _SFX

static UString ConvertUInt32ToString(UInt32 value)
{
  wchar_t buffer[32];
  ConvertUInt64ToString(value, buffer);
  return buffer;
}

static UString GetStringForSizeValue(UInt32 value)
{
  for (int i = 31; i >= 0; i--)
    if ((UInt32(1) << i) == value)
      return ConvertUInt32ToString(i);
  UString result;
  if (value % (1 << 20) == 0)
  {
    result += ConvertUInt32ToString(value >> 20);
    result += L"m";
  }
  else if (value % (1 << 10) == 0)
  {
    result += ConvertUInt32ToString(value >> 10);
    result += L"k";
  }
  else
  {
    result += ConvertUInt32ToString(value);
    result += L"b";
  }
  return result;
}

static const UInt64 k_Copy = 0x0;
static const UInt64 k_LZMA  = 0x030101;
static const UInt64 k_PPMD  = 0x030401;

static wchar_t GetHex(Byte value)
{
  return (wchar_t)((value < 10) ? (L'0' + value) : (L'A' + (value - 10)));
}
static inline UString GetHex2(Byte value)
{
  UString result;
  result += GetHex((Byte)(value >> 4));
  result += GetHex((Byte)(value & 0xF));
  return result;
}

#endif

static const UInt64 k_AES  = 0x06F10701;

bool CHandler::IsEncrypted(UInt32 index2) const
{
  CNum folderIndex = _db.FileIndexToFolderIndexMap[index2];
  if (folderIndex != kNumNoIndex)
  {
    const CFolder &folderInfo = _db.Folders[folderIndex];
    for (int i = folderInfo.Coders.Size() - 1; i >= 0; i--)
      if (folderInfo.Coders[i].MethodID == k_AES)
        return true;
  }
  return false;
}

STDMETHODIMP CHandler::GetProperty(UInt32 index, PROPID propID,  PROPVARIANT *value)
{
  COM_TRY_BEGIN
  NCOM::CPropVariant prop;
  
  /*
  const CRef2 &ref2 = _refs[index];
  if (ref2.Refs.IsEmpty())
    return E_FAIL;
  const CRef &ref = ref2.Refs.Front();
  */
  
  const CFileItem &item = _db.Files[index];
  UInt32 index2 = index;

  switch(propID)
  {
    case kpidPath:
      if (!item.Name.IsEmpty())
        prop = NItemName::GetOSName(item.Name);
      break;
    case kpidIsDir:  prop = item.IsDir; break;
    case kpidSize:
    {
      prop = item.Size;
      // prop = ref2.Size;
      break;
    }
    case kpidPackSize:
    {
      // prop = ref2.PackSize;
      {
        CNum folderIndex = _db.FileIndexToFolderIndexMap[index2];
        if (folderIndex != kNumNoIndex)
        {
          if (_db.FolderStartFileIndex[folderIndex] == (CNum)index2)
            prop = _db.GetFolderFullPackSize(folderIndex);
          /*
          else
            prop = (UInt64)0;
          */
        }
        else
          prop = (UInt64)0;
      }
      break;
    }
    case kpidPosition:  { UInt64 v; if (_db.StartPos.GetItem(index2, v)) prop = v; break; }
    case kpidCTime:  SetPropFromUInt64Def(_db.CTime, index2, prop); break;
    case kpidATime:  SetPropFromUInt64Def(_db.ATime, index2, prop); break;
    case kpidMTime:  SetPropFromUInt64Def(_db.MTime, index2, prop); break;
    case kpidAttrib:  if (item.AttribDefined) prop = item.Attrib; break;
    case kpidCRC:  if (item.CrcDefined) prop = item.Crc; break;
    case kpidEncrypted:  prop = IsEncrypted(index2); break;
    case kpidIsAnti:  prop = _db.IsItemAnti(index2); break;
    #ifndef _SFX
    case kpidMethod:
      {
        CNum folderIndex = _db.FileIndexToFolderIndexMap[index2];
        if (folderIndex != kNumNoIndex)
        {
          const CFolder &folderInfo = _db.Folders[folderIndex];
          UString methodsString;
          for (int i = folderInfo.Coders.Size() - 1; i >= 0; i--)
          {
            const CCoderInfo &coderInfo = folderInfo.Coders[i];
            if (!methodsString.IsEmpty())
              methodsString += L' ';

            {
              UString methodName;
              bool methodIsKnown = FindMethod(
                  EXTERNAL_CODECS_VARS
                  coderInfo.MethodID, methodName);

              if (methodIsKnown)
              {
                methodsString += methodName;
                if (coderInfo.MethodID == k_LZMA)
                {
                  if (coderInfo.Props.GetCapacity() >= 5)
                  {
                    methodsString += L":";
                    UInt32 dicSize = GetUi32((const Byte *)coderInfo.Props + 1);
                    methodsString += GetStringForSizeValue(dicSize);
                  }
                }
                else if (coderInfo.MethodID == k_PPMD)
                {
                  if (coderInfo.Props.GetCapacity() >= 5)
                  {
                    Byte order = *(const Byte *)coderInfo.Props;
                    methodsString += L":o";
                    methodsString += ConvertUInt32ToString(order);
                    methodsString += L":mem";
                    UInt32 dicSize = GetUi32((const Byte *)coderInfo.Props + 1);
                    methodsString += GetStringForSizeValue(dicSize);
                  }
                }
                else if (coderInfo.MethodID == k_AES)
                {
                  if (coderInfo.Props.GetCapacity() >= 1)
                  {
                    methodsString += L":";
                    const Byte *data = (const Byte *)coderInfo.Props;
                    Byte firstByte = *data++;
                    UInt32 numCyclesPower = firstByte & 0x3F;
                    methodsString += ConvertUInt32ToString(numCyclesPower);
                    /*
                    if ((firstByte & 0xC0) != 0)
                    {
                      methodsString += L":";
                      return S_OK;
                      UInt32 saltSize = (firstByte >> 7) & 1;
                      UInt32 ivSize = (firstByte >> 6) & 1;
                      if (coderInfo.Props.GetCapacity() >= 2)
                      {
                        Byte secondByte = *data++;
                        saltSize += (secondByte >> 4);
                        ivSize += (secondByte & 0x0F);
                      }
                    }
                    */
                  }
                }
                else
                {
                  if (coderInfo.Props.GetCapacity() > 0)
                  {
                    methodsString += L":[";
                    for (size_t bi = 0; bi < coderInfo.Props.GetCapacity(); bi++)
                    {
                      if (bi > 5 && bi + 1 < coderInfo.Props.GetCapacity())
                      {
                        methodsString += L"..";
                        break;
                      }
                      else
                        methodsString += GetHex2(coderInfo.Props[bi]);
                    }
                    methodsString += L"]";
                  }
                }
              }
              else
              {
                methodsString += ConvertMethodIdToString(coderInfo.MethodID);
              }
            }
          }
          prop = methodsString;
        }
      }
      break;
    case kpidBlock:
      {
        CNum folderIndex = _db.FileIndexToFolderIndexMap[index2];
        if (folderIndex != kNumNoIndex)
          prop = (UInt32)folderIndex;
      }
      break;
    case kpidPackedSize0:
    case kpidPackedSize1:
    case kpidPackedSize2:
    case kpidPackedSize3:
    case kpidPackedSize4:
      {
        CNum folderIndex = _db.FileIndexToFolderIndexMap[index2];
        if (folderIndex != kNumNoIndex)
        {
          const CFolder &folderInfo = _db.Folders[folderIndex];
          if (_db.FolderStartFileIndex[folderIndex] == (CNum)index2 &&
              folderInfo.PackStreams.Size() > (int)(propID - kpidPackedSize0))
          {
            prop = _db.GetFolderPackStreamSize(folderIndex, propID - kpidPackedSize0);
          }
          else
            prop = (UInt64)0;
        }
        else
          prop = (UInt64)0;
      }
      break;
    #endif
  }
  prop.Detach(value);
  return S_OK;
  COM_TRY_END
}

STDMETHODIMP CHandler::Open(IInStream *stream,
    const UInt64 *maxCheckStartPosition,
    IArchiveOpenCallback *openArchiveCallback)
{
  COM_TRY_BEGIN
  Close();
  #ifndef _SFX
  _fileInfoPopIDs.Clear();
  #endif
  try
  {
    CMyComPtr<IArchiveOpenCallback> openArchiveCallbackTemp = openArchiveCallback;

    #ifndef _NO_CRYPTO
    CMyComPtr<ICryptoGetTextPassword> getTextPassword;
    if (openArchiveCallback)
    {
      openArchiveCallbackTemp.QueryInterface(
          IID_ICryptoGetTextPassword, &getTextPassword);
    }
    #endif
    CInArchive archive;
    RINOK(archive.Open(stream, maxCheckStartPosition));
    #ifndef _NO_CRYPTO
    _passwordIsDefined = false;
    UString password;
    #endif
    HRESULT result = archive.ReadDatabase(
      EXTERNAL_CODECS_VARS
      _db
      #ifndef _NO_CRYPTO
      , getTextPassword, _passwordIsDefined
      #endif
      );
    RINOK(result);
    _db.Fill();
    _inStream = stream;
  }
  catch(...)
  {
    Close();
    return S_FALSE;
  }
  // _inStream = stream;
  #ifndef _SFX
  FillPopIDs();
  #endif
  return S_OK;
  COM_TRY_END
}

STDMETHODIMP CHandler::Close()
{
  COM_TRY_BEGIN
  _inStream.Release();
  _db.Clear();
  return S_OK;
  COM_TRY_END
}

#ifdef __7Z_SET_PROPERTIES
#ifdef EXTRACT_ONLY

STDMETHODIMP CHandler::SetProperties(const wchar_t **names, const PROPVARIANT *values, Int32 numProperties)
{
  COM_TRY_BEGIN
  #ifdef COMPRESS_MT
  const UInt32 numProcessors = NSystem::GetNumberOfProcessors();
  _numThreads = numProcessors;
  #endif

  for (int i = 0; i < numProperties; i++)
  {
    UString name = names[i];
    name.MakeUpper();
    if (name.IsEmpty())
      return E_INVALIDARG;
    const PROPVARIANT &value = values[i];
    UInt32 number;
    int index = ParseStringToUInt32(name, number);
    if (index == 0)
    {
      if(name.Left(2).CompareNoCase(L"MT") == 0)
      {
        #ifdef COMPRESS_MT
        RINOK(ParseMtProp(name.Mid(2), value, numProcessors, _numThreads));
        #endif
        continue;
      }
      else
        return E_INVALIDARG;
    }
  }
  return S_OK;
  COM_TRY_END
}

#endif
#endif

IMPL_ISetCompressCodecsInfo

}}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国精产品一区一区三区mba视频 | 久久久午夜精品| 欧美精品成人一区二区三区四区| 色综合久久久久综合| 成人久久18免费网站麻豆| 国产成人综合自拍| 国产一区在线精品| 成人中文字幕合集| 东方aⅴ免费观看久久av| 粉嫩嫩av羞羞动漫久久久| av高清久久久| 欧美影院一区二区三区| 337p亚洲精品色噜噜| 欧美一区二区在线观看| 欧美精品一区二区久久久| 国产欧美综合在线观看第十页 | www.av亚洲| 欧美专区亚洲专区| 欧美电影免费观看高清完整版 | 中文字幕国产精品一区二区| 日本一区二区成人在线| 亚洲图片一区二区| 久久国产精品99久久人人澡| 国产a视频精品免费观看| 91视频观看免费| 91精品国模一区二区三区| 久久无码av三级| 日韩久久一区二区| 麻豆精品国产传媒mv男同| 99在线热播精品免费| 91精品久久久久久久91蜜桃| 国产精品伦一区| 日韩经典中文字幕一区| 丁香婷婷综合激情五月色| 欧美吻胸吃奶大尺度电影| 久久婷婷国产综合精品青草| 夜夜精品视频一区二区| 精品一区二区在线视频| 欧美中文字幕亚洲一区二区va在线| 日韩欧美高清一区| 亚洲欧美色图小说| 韩国v欧美v亚洲v日本v| 欧美日韩日本视频| 国产精品视频看| 免费黄网站欧美| 日本韩国欧美国产| 中文字幕电影一区| 看片的网站亚洲| 欧美福利视频一区| 一区二区三区91| 91丨porny丨在线| 久久精品人人爽人人爽| 日韩高清在线不卡| 91成人在线精品| 国产精品你懂的在线欣赏| 久久99热99| 欧美精品精品一区| 亚洲伊人色欲综合网| 91色porny蝌蚪| 亚洲欧洲精品天堂一级| 国产成人午夜电影网| 精品久久久久久久一区二区蜜臀| 亚洲成a人v欧美综合天堂下载 | www国产精品av| 免费成人美女在线观看.| 欧美午夜精品一区二区三区| 中文字幕一区二区三区在线播放| 国产精品一区二区三区99| 精品免费视频一区二区| 久久机这里只有精品| 4438x亚洲最大成人网| 日本视频免费一区| 欧美一区二区三区电影| 日韩国产在线一| 欧美一卡二卡在线| 美女一区二区三区在线观看| 91精品国产色综合久久不卡蜜臀 | 精品国产一区二区三区忘忧草| 日韩激情在线观看| 日韩一级大片在线观看| 日本vs亚洲vs韩国一区三区二区 | 91九色最新地址| 一区二区三区在线免费播放| 欧美天天综合网| 视频一区二区中文字幕| 日韩欧美一二三| 国产精品中文字幕日韩精品| 国产欧美一区二区三区沐欲 | 亚洲另类色综合网站| 欧美视频第二页| 日本网站在线观看一区二区三区| 久久免费美女视频| 成人短视频下载| 亚洲激情成人在线| 日韩欧美一级二级三级久久久 | 国产精品灌醉下药二区| 91性感美女视频| 日韩不卡一区二区三区| 久久夜色精品国产欧美乱极品| 成人动漫av在线| 天天亚洲美女在线视频| 久久中文娱乐网| 91国偷自产一区二区使用方法| 亚洲成人在线观看视频| 欧美xxx久久| 91视视频在线观看入口直接观看www | 免费欧美在线视频| 中文字幕亚洲在| 欧美精品第一页| 成人午夜视频网站| 日韩国产成人精品| 国产精品国产三级国产aⅴ中文 | 欧美熟乱第一页| 精品系列免费在线观看| 亚洲欧美偷拍三级| 国产亚洲美州欧州综合国| 欧美午夜电影网| jlzzjlzz欧美大全| 美女视频一区在线观看| 亚洲精品视频在线观看免费| 精品日韩一区二区三区| 一本久道久久综合中文字幕| 久久99精品一区二区三区| 悠悠色在线精品| 国产精品三级久久久久三级| 日韩亚洲欧美一区二区三区| 91尤物视频在线观看| 国产精一品亚洲二区在线视频| 五月激情综合网| 亚洲色图清纯唯美| 国产女同性恋一区二区| 日韩精品一区二区在线观看| 欧美体内she精视频| 91免费在线视频观看| 高清在线成人网| 久草中文综合在线| 日韩国产精品大片| 日韩中文字幕av电影| 亚洲综合色网站| 亚洲激情校园春色| 成人免费在线视频| 国产精品色呦呦| 中文字幕精品—区二区四季| 国产性色一区二区| 久久免费电影网| 欧美国产精品中文字幕| 国产女主播视频一区二区| 中文一区二区在线观看| 国产精品区一区二区三区| 国产偷国产偷精品高清尤物| 久久久91精品国产一区二区三区| 欧美不卡123| 精品国产电影一区二区| 久久亚洲精华国产精华液| 久久精品一二三| 国产精品毛片久久久久久久| 中文字幕一区二区三区在线播放 | 一本一本大道香蕉久在线精品| 成人精品一区二区三区四区 | 亚洲综合激情另类小说区| 亚洲免费av高清| 亚洲一二三四区不卡| 亚洲一区二区三区在线看| 亚洲地区一二三色| 日本成人在线一区| 国产一区二区三区免费看 | 国产精品无人区| 日韩久久一区二区| 午夜精品久久久久久久久 | 欧美国产国产综合| 亚洲视频一区在线| 亚洲成人av一区| 精品一区二区在线视频| 成人一区二区三区在线观看| 91老师片黄在线观看| 欧美精品日韩精品| 国产亚洲制服色| 亚洲免费观看高清| 美女视频一区二区三区| 成人av网站在线| 欧美日韩成人一区| 久久嫩草精品久久久精品| 亚洲欧美日韩久久精品| 天天色 色综合| 国产成人午夜片在线观看高清观看| 色综合久久66| 精品国产免费人成在线观看| 亚洲视频一二区| 久久99国内精品| 91麻豆国产在线观看| 精品裸体舞一区二区三区| 亚洲人精品午夜| 国产在线精品免费| 欧美日韩亚洲综合在线 | 蜜桃视频一区二区三区在线观看| 国产伦理精品不卡| 欧美日韩国产免费| 国产精品国产馆在线真实露脸| 午夜精品久久久久影视| 94-欧美-setu|