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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? ziphandler.cpp

?? 壓縮解壓工具7-zip源代碼
?? CPP
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
{
  NCrypto::NZip::CDecoder *_zipCryptoDecoderSpec;
  NCrypto::NZipStrong::CDecoder *_pkAesDecoderSpec;
  NCrypto::NWzAes::CDecoder *_wzAesDecoderSpec;

  CMyComPtr<ICompressFilter> _zipCryptoDecoder;
  CMyComPtr<ICompressFilter> _pkAesDecoder;
  CMyComPtr<ICompressFilter> _wzAesDecoder;

  CFilterCoder *filterStreamSpec;
  CMyComPtr<ISequentialInStream> filterStream;
  CMyComPtr<ICryptoGetTextPassword> getTextPassword;
  CObjectVector<CMethodItem> methodItems;

public:
  CZipDecoder():
      _zipCryptoDecoderSpec(0),
      _pkAesDecoderSpec(0),
      _wzAesDecoderSpec(0),
      filterStreamSpec(0) {}

  HRESULT Decode(
    DECL_EXTERNAL_CODECS_LOC_VARS
    CInArchive &archive, const CItemEx &item,
    ISequentialOutStream *realOutStream,
    IArchiveExtractCallback *extractCallback,
    ICompressProgressInfo *compressProgress,
    UInt32 numThreads, Int32 &res);
};

HRESULT CZipDecoder::Decode(
    DECL_EXTERNAL_CODECS_LOC_VARS
    CInArchive &archive, const CItemEx &item,
    ISequentialOutStream *realOutStream,
    IArchiveExtractCallback *extractCallback,
    ICompressProgressInfo *compressProgress,
    UInt32 numThreads, Int32 &res)
{
  res = NArchive::NExtract::NOperationResult::kDataError;
  CInStreamReleaser inStreamReleaser;

  bool needCRC = true;
  bool wzAesMode = false;
  bool pkAesMode = false;
  UInt16 methodId = item.CompressionMethod;
  if (item.IsEncrypted())
  {
    if (item.IsStrongEncrypted())
    {
      CStrongCryptoField f;
      if (item.CentralExtra.GetStrongCryptoField(f))
      {
        pkAesMode = true;
      }
      if (!pkAesMode)
      {
        res = NArchive::NExtract::NOperationResult::kUnSupportedMethod;
        return S_OK;
      }
    }
    if (methodId == NFileHeader::NCompressionMethod::kWzAES)
    {
      CWzAesExtraField aesField;
      if (item.CentralExtra.GetWzAesField(aesField))
      {
        wzAesMode = true;
        needCRC = aesField.NeedCrc();
      }
    }
  }
    
  COutStreamWithCRC *outStreamSpec = new COutStreamWithCRC;
  CMyComPtr<ISequentialOutStream> outStream = outStreamSpec;
  outStreamSpec->SetStream(realOutStream);
  outStreamSpec->Init(needCRC);
  
  UInt64 authenticationPos;
  
  CMyComPtr<ISequentialInStream> inStream;
  {
    UInt64 packSize = item.PackSize;
    if (wzAesMode)
    {
      if (packSize < NCrypto::NWzAes::kMacSize)
        return S_OK;
      packSize -= NCrypto::NWzAes::kMacSize;
    }
    UInt64 dataPos = item.GetDataPosition();
    inStream.Attach(archive.CreateLimitedStream(dataPos, packSize));
    authenticationPos = dataPos + packSize;
  }
  
  CMyComPtr<ICompressFilter> cryptoFilter;
  if (item.IsEncrypted())
  {
    if (wzAesMode)
    {
      CWzAesExtraField aesField;
      if (!item.CentralExtra.GetWzAesField(aesField))
        return S_OK;
      methodId = aesField.Method;
      if (!_wzAesDecoder)
      {
        _wzAesDecoderSpec = new NCrypto::NWzAes::CDecoder;
        _wzAesDecoder = _wzAesDecoderSpec;
      }
      cryptoFilter = _wzAesDecoder;
      Byte properties = aesField.Strength;
      RINOK(_wzAesDecoderSpec->SetDecoderProperties2(&properties, 1));
    }
    else if (pkAesMode)
    {
      if (!_pkAesDecoder)
      {
        _pkAesDecoderSpec = new NCrypto::NZipStrong::CDecoder;
        _pkAesDecoder = _pkAesDecoderSpec;
      }
      cryptoFilter = _pkAesDecoder;
    }
    else
    {
      if (!_zipCryptoDecoder)
      {
        _zipCryptoDecoderSpec = new NCrypto::NZip::CDecoder;
        _zipCryptoDecoder = _zipCryptoDecoderSpec;
      }
      cryptoFilter = _zipCryptoDecoder;
    }
    CMyComPtr<ICryptoSetPassword> cryptoSetPassword;
    RINOK(cryptoFilter.QueryInterface(IID_ICryptoSetPassword, &cryptoSetPassword));
    
    if (!getTextPassword)
      extractCallback->QueryInterface(IID_ICryptoGetTextPassword, (void **)&getTextPassword);
    
    if (getTextPassword)
    {
      CMyComBSTR password;
      RINOK(getTextPassword->CryptoGetTextPassword(&password));
      AString charPassword;
      if (wzAesMode || pkAesMode)
      {
        charPassword = UnicodeStringToMultiByte((const wchar_t *)password, CP_ACP);
        /*
        for (int i = 0;; i++)
        {
          wchar_t c = password[i];
          if (c == 0)
            break;
          if (c >= 0x80)
          {
            res = NArchive::NExtract::NOperationResult::kDataError;
            return S_OK;
          }
          charPassword += (char)c;
        }
        */
      }
      else
      {
        // we use OEM. WinZip/Windows probably use ANSI for some files
        charPassword = UnicodeStringToMultiByte((const wchar_t *)password, CP_OEMCP);
      }
      HRESULT result = cryptoSetPassword->CryptoSetPassword(
        (const Byte *)(const char *)charPassword, charPassword.Length());
      if (result != S_OK)
        return S_OK;
    }
    else
    {
      RINOK(cryptoSetPassword->CryptoSetPassword(0, 0));
    }
  }
  
  int m;
  for (m = 0; m < methodItems.Size(); m++)
    if (methodItems[m].ZipMethod == methodId)
      break;

  if (m == methodItems.Size())
  {
    CMethodItem mi;
    mi.ZipMethod = methodId;
    if (methodId == NFileHeader::NCompressionMethod::kStored)
      mi.Coder = new NCompress::CCopyCoder;
    else if (methodId == NFileHeader::NCompressionMethod::kShrunk)
      mi.Coder = new NCompress::NShrink::CDecoder;
    else if (methodId == NFileHeader::NCompressionMethod::kImploded)
      mi.Coder = new NCompress::NImplode::NDecoder::CCoder;
    else if (methodId == NFileHeader::NCompressionMethod::kLZMA)
      mi.Coder = new CLzmaDecoder;
    else
    {
      CMethodId szMethodID;
      if (methodId == NFileHeader::NCompressionMethod::kBZip2)
        szMethodID = kMethodId_BZip2;
      else
      {
        if (methodId > 0xFF)
        {
          res = NArchive::NExtract::NOperationResult::kUnSupportedMethod;
          return S_OK;
        }
        szMethodID = kMethodId_ZipBase + (Byte)methodId;
      }

      RINOK(CreateCoder(EXTERNAL_CODECS_LOC_VARS szMethodID, mi.Coder, false));

      if (mi.Coder == 0)
      {
        res = NArchive::NExtract::NOperationResult::kUnSupportedMethod;
        return S_OK;
      }
    }
    m = methodItems.Add(mi);
  }
  ICompressCoder *coder = methodItems[m].Coder;
  
  {
    CMyComPtr<ICompressSetDecoderProperties2> setDecoderProperties;
    coder->QueryInterface(IID_ICompressSetDecoderProperties2, (void **)&setDecoderProperties);
    if (setDecoderProperties)
    {
      Byte properties = (Byte)item.Flags;
      RINOK(setDecoderProperties->SetDecoderProperties2(&properties, 1));
    }
  }
  
  #ifdef COMPRESS_MT
  {
    CMyComPtr<ICompressSetCoderMt> setCoderMt;
    coder->QueryInterface(IID_ICompressSetCoderMt, (void **)&setCoderMt);
    if (setCoderMt)
    {
      RINOK(setCoderMt->SetNumberOfThreads(numThreads));
    }
  }
  #endif
  
  {
    HRESULT result = S_OK;
    CMyComPtr<ISequentialInStream> inStreamNew;
    if (item.IsEncrypted())
    {
      if (!filterStream)
      {
        filterStreamSpec = new CFilterCoder;
        filterStream = filterStreamSpec;
      }
      filterStreamSpec->Filter = cryptoFilter;
      if (wzAesMode)
      {
        result = _wzAesDecoderSpec->ReadHeader(inStream);
      }
      else if (pkAesMode)
      {
        result =_pkAesDecoderSpec->ReadHeader(inStream, item.FileCRC, item.UnPackSize);
        if (result == S_OK)
        {
          bool passwOK;
          result = _pkAesDecoderSpec->CheckPassword(passwOK);
          if (result == S_OK && !passwOK)
            result = S_FALSE;
        }
      }
      else
      {
        result = _zipCryptoDecoderSpec->ReadHeader(inStream);
      }

      if (result == S_OK)
      {
        RINOK(filterStreamSpec->SetInStream(inStream));
        inStreamReleaser.FilterCoder = filterStreamSpec;
        inStreamNew = filterStream;
        if (wzAesMode)
        {
          if (!_wzAesDecoderSpec->CheckPasswordVerifyCode())
            result = S_FALSE;
        }
      }
    }
    else
      inStreamNew = inStream;
    if (result == S_OK)
      result = coder->Code(inStreamNew, outStream, NULL, &item.UnPackSize, compressProgress);
    if (result == S_FALSE)
      return S_OK;
    if (result == E_NOTIMPL)
    {
      res = NArchive::NExtract::NOperationResult::kUnSupportedMethod;
      return S_OK;
    }

    RINOK(result);
  }
  bool crcOK = true;
  bool authOk = true;
  if (needCRC)
    crcOK = (outStreamSpec->GetCRC() == item.FileCRC);
  if (wzAesMode)
  {
    inStream.Attach(archive.CreateLimitedStream(authenticationPos, NCrypto::NWzAes::kMacSize));
    if (_wzAesDecoderSpec->CheckMac(inStream, authOk) != S_OK)
      authOk = false;
  }
  
  res = ((crcOK && authOk) ?
    NArchive::NExtract::NOperationResult::kOK :
    NArchive::NExtract::NOperationResult::kCRCError);
  return S_OK;
}


STDMETHODIMP CHandler::Extract(const UInt32* indices, UInt32 numItems,
    Int32 _aTestMode, IArchiveExtractCallback *extractCallback)
{
  COM_TRY_BEGIN
  CZipDecoder myDecoder;
  bool testMode = (_aTestMode != 0);
  UInt64 totalUnPacked = 0, totalPacked = 0;
  bool allFilesMode = (numItems == UInt32(-1));
  if (allFilesMode)
    numItems = m_Items.Size();
  if(numItems == 0)
    return S_OK;
  UInt32 i;
  for(i = 0; i < numItems; i++)
  {
    const CItemEx &item = m_Items[allFilesMode ? i : indices[i]];
    totalUnPacked += item.UnPackSize;
    totalPacked += item.PackSize;
  }
  RINOK(extractCallback->SetTotal(totalUnPacked));

  UInt64 currentTotalUnPacked = 0, currentTotalPacked = 0;
  UInt64 currentItemUnPacked, currentItemPacked;
  
  CLocalProgress *lps = new CLocalProgress;
  CMyComPtr<ICompressProgressInfo> progress = lps;
  lps->Init(extractCallback, false);

  for (i = 0; i < numItems; i++, currentTotalUnPacked += currentItemUnPacked,
      currentTotalPacked += currentItemPacked)
  {
    currentItemUnPacked = 0;
    currentItemPacked = 0;

    lps->InSize = currentTotalPacked;
    lps->OutSize = currentTotalUnPacked;
    RINOK(lps->SetCur());

    CMyComPtr<ISequentialOutStream> realOutStream;
    Int32 askMode = testMode ?
        NArchive::NExtract::NAskMode::kTest :
        NArchive::NExtract::NAskMode::kExtract;
    Int32 index = allFilesMode ? i : indices[i];

    RINOK(extractCallback->GetStream(index, &realOutStream, askMode));

    CItemEx item = m_Items[index];
    if (!item.FromLocal)
    {
      HRESULT res = m_Archive.ReadLocalItemAfterCdItem(item);
      if (res == S_FALSE)
      {
        if (item.IsDir() || realOutStream || testMode)
        {
          RINOK(extractCallback->PrepareOperation(askMode));
          realOutStream.Release();
          RINOK(extractCallback->SetOperationResult(NArchive::NExtract::NOperationResult::kUnSupportedMethod));
        }
        continue;
      }
      RINOK(res);
    }

    if (item.IsDir() || item.IgnoreItem())
    {
      // if (!testMode)
      {
        RINOK(extractCallback->PrepareOperation(askMode));
        realOutStream.Release();
        RINOK(extractCallback->SetOperationResult(NArchive::NExtract::NOperationResult::kOK));
      }
      continue;
    }

    currentItemUnPacked = item.UnPackSize;
    currentItemPacked = item.PackSize;

    if (!testMode && (!realOutStream))
      continue;

    RINOK(extractCallback->PrepareOperation(askMode));

    Int32 res;
    RINOK(myDecoder.Decode(
        EXTERNAL_CODECS_VARS
        m_Archive, item, realOutStream, extractCallback,
        progress, _numThreads, res));
    realOutStream.Release();
    
    RINOK(extractCallback->SetOperationResult(res))
  }
  return S_OK;
  COM_TRY_END
}

IMPL_ISetCompressCodecsInfo

}}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
三级一区在线视频先锋| 久久久无码精品亚洲日韩按摩| 日韩一级高清毛片| 久久综合中文字幕| 亚洲欧美精品午睡沙发| 午夜影院在线观看欧美| 国产精品一区二区免费不卡| 91一区二区在线观看| 欧美一区二区在线不卡| 国产清纯白嫩初高生在线观看91 | 麻豆久久一区二区| 风间由美一区二区av101| 91精彩视频在线| 精品国产一区二区亚洲人成毛片| 国产精品欧美综合在线| 日韩成人免费在线| av亚洲精华国产精华| 日韩欧美www| 亚洲精品视频免费看| 国产真实乱对白精彩久久| 91久久精品一区二区二区| 精品乱码亚洲一区二区不卡| 欧美精品乱人伦久久久久久| 91成人免费在线视频| 26uuu国产电影一区二区| 一区二区三区在线看| 国产美女精品人人做人人爽| 欧美男男青年gay1069videost| 国产欧美一区二区三区鸳鸯浴 | 91.xcao| 国产精品国产三级国产aⅴ原创 | 国产亚洲欧美日韩日本| 午夜av区久久| 色视频一区二区| 久久久国际精品| 蜜臀av一区二区在线免费观看| 日本精品一区二区三区四区的功能| 26uuu国产日韩综合| 天天av天天翘天天综合网 | 一区二区三区精密机械公司| 国产中文字幕精品| 日韩美女在线视频| 三级在线观看一区二区| 欧美综合一区二区| 亚洲视频资源在线| 成人av网在线| 久久色成人在线| 久久成人精品无人区| 91精品国产高清一区二区三区| 亚洲综合色区另类av| 99re66热这里只有精品3直播| 国产欧美一区二区精品性色| 亚洲免费在线看| 欧美日韩亚洲综合| 亚洲女同女同女同女同女同69| 国产成人午夜精品影院观看视频 | 日本亚洲三级在线| 欧美视频在线播放| 亚洲专区一二三| 91一区二区在线观看| 国产精品蜜臀在线观看| 粉嫩av亚洲一区二区图片| 久久综合久久久久88| 精品一区二区三区免费视频| 日韩欧美国产小视频| 蜜桃av噜噜一区二区三区小说| 欧美福利一区二区| 日韩成人精品在线观看| 制服丝袜av成人在线看| 亚洲va国产va欧美va观看| 欧美色网一区二区| 亚洲成av人在线观看| 欧美精品免费视频| 美女在线视频一区| 26uuu亚洲婷婷狠狠天堂| 韩日av一区二区| 国产日韩欧美在线一区| 成人三级伦理片| √…a在线天堂一区| 91福利视频久久久久| 亚洲成a人片在线观看中文| 在线播放日韩导航| 精品一区二区三区日韩| 国产亚洲成av人在线观看导航| 国产成人在线色| 亚洲色图欧美偷拍| 欧美视频中文字幕| 热久久久久久久| 久久久久国产免费免费| youjizz国产精品| 亚洲国产一区二区a毛片| 6080国产精品一区二区| 国产中文字幕一区| 亚洲欧洲精品天堂一级| 在线观看精品一区| 日本美女一区二区| 亚洲精品在线一区二区| 成人免费视频网站在线观看| 亚洲综合免费观看高清完整版| 欧美一级二级在线观看| 成人自拍视频在线观看| 一区二区国产视频| 精品久久久久久久久久久院品网 | 亚洲麻豆国产自偷在线| 欧美精品日韩综合在线| 国产精品1区2区| 亚洲另类一区二区| 欧美大胆人体bbbb| bt7086福利一区国产| 天堂成人免费av电影一区| 国产亚洲视频系列| 在线看国产一区二区| 国产自产v一区二区三区c| 中文字幕色av一区二区三区| 欧美精品一二三| 成人综合激情网| 日精品一区二区三区| 91丝袜国产在线播放| 亚洲免费视频成人| 欧美丰满少妇xxxbbb| 国产91精品在线观看| 亚洲成人黄色影院| 国产亚洲人成网站| 欧美日韩大陆一区二区| 国产不卡视频在线播放| 五月综合激情网| 国产欧美一区二区精品婷婷| 欧美日韩视频在线第一区| 国产99久久久国产精品潘金网站| 亚洲国产精品久久久男人的天堂| 久久女同性恋中文字幕| 91黄视频在线观看| 国产凹凸在线观看一区二区| 视频一区二区欧美| 自拍偷拍亚洲欧美日韩| 久久综合五月天婷婷伊人| 欧美色区777第一页| 成人免费视频caoporn| 日本美女一区二区| 一区二区在线免费| 国产视频在线观看一区二区三区 | 免费人成网站在线观看欧美高清| 国产精品国产三级国产a| 精品少妇一区二区三区免费观看 | 蜜桃视频在线观看一区| 一区二区久久久久| 亚洲欧美一区二区在线观看| 欧美tickle裸体挠脚心vk| 欧美日本视频在线| 色欧美片视频在线观看在线视频| 国产高清成人在线| 精品系列免费在线观看| 三级成人在线视频| 亚洲大片精品永久免费| 亚洲精品视频观看| 国产精品乱码人人做人人爱 | 成人美女视频在线观看18| 狠狠色狠狠色综合日日91app| 视频一区二区中文字幕| 亚洲韩国一区二区三区| 亚洲免费视频成人| 中文字幕一区二区三| 亚洲国产精品av| 日本一区二区久久| 久久久99精品久久| 久久影音资源网| 欧美videos大乳护士334| 欧美一区二区三区在| 欧美日韩免费在线视频| 欧美三片在线视频观看| 91国偷自产一区二区三区观看| 91丝袜美女网| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 欧美国产精品一区| 国产欧美久久久精品影院| 久久久久综合网| 久久久电影一区二区三区| 久久久精品国产99久久精品芒果| 337p日本欧洲亚洲大胆色噜噜| 日韩精品一区二区三区三区免费| 欧美一区三区四区| 日韩欧美国产一区二区在线播放| 日韩三级视频中文字幕| 日韩免费性生活视频播放| 日韩精品一区二区三区中文精品| 69堂亚洲精品首页| 欧美videossexotv100| 久久综合色综合88| 欧美激情一区二区三区四区| 国产精品美女久久久久aⅴ国产馆| 亚洲欧美一区二区视频| 一区二区三区中文在线观看| 亚洲国产色一区| 青青草97国产精品免费观看 | 久久精品在这里| 国产精品久久久久久久蜜臀| 亚洲黄网站在线观看| 午夜精品一区二区三区三上悠亚 | 久久久久久夜精品精品免费| 国产蜜臀97一区二区三区|