mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-03-03 09:11:45 +08:00
Compare commits
9 Commits
core-win-6
...
core-win-6
| Author | SHA1 | Date | |
|---|---|---|---|
| 1a377d8738 | |||
| ed3e107db5 | |||
| 64d8c659bc | |||
| 3debba45b8 | |||
| b8ad1797f0 | |||
| 48587f55b3 | |||
| a505ae391d | |||
| c389801937 | |||
| 24214cb561 |
@ -133,11 +133,21 @@ namespace DocFileFormat
|
||||
pos = tStream.GetPosition();
|
||||
|
||||
//------------------------------------------------------------------------------------------
|
||||
crypt_data_aes.hashAlgorithm = CRYPT_METHOD::SHA1; //by AlgIDHash -> 0x0000 || 0x8004
|
||||
crypt_data_aes.spinCount = 50000;
|
||||
switch(AlgIDHash)
|
||||
{
|
||||
case 0x8003: crypt_data_aes.hashAlgorithm = CRYPT_METHOD::MD5; break;
|
||||
case 0x0000:
|
||||
case 0x8004: crypt_data_aes.hashAlgorithm = CRYPT_METHOD::SHA1; break;
|
||||
}
|
||||
crypt_data_aes.spinCount = 0;
|
||||
|
||||
switch(AlgID)
|
||||
{
|
||||
case 0x0000:
|
||||
if (fAES) crypt_data_aes.cipherAlgorithm = CRYPT_METHOD::AES_ECB;
|
||||
if (fCryptoAPI) crypt_data_aes.cipherAlgorithm = CRYPT_METHOD::RC4;
|
||||
crypt_data_aes.keySize = KeySize / 8;
|
||||
break;
|
||||
case 0x6801:
|
||||
crypt_data_aes.cipherAlgorithm = CRYPT_METHOD::RC4;
|
||||
crypt_data_aes.keySize = KeySize / 8;
|
||||
@ -156,16 +166,11 @@ namespace DocFileFormat
|
||||
break;
|
||||
}
|
||||
|
||||
switch(ProviderType)
|
||||
{
|
||||
case 0x0001: crypt_data_aes.cipherAlgorithm = CRYPT_METHOD::RC4; break;
|
||||
case 0x0018: crypt_data_aes.cipherAlgorithm = CRYPT_METHOD::AES_ECB; break;
|
||||
}
|
||||
|
||||
|
||||
//switch(ProviderType)
|
||||
//{
|
||||
// case 0x0001: crypt_data_aes.cipherAlgorithm = CRYPT_METHOD::RC4; break;
|
||||
// case 0x0018: crypt_data_aes.cipherAlgorithm = CRYPT_METHOD::AES_ECB; break;
|
||||
//}
|
||||
}
|
||||
|
||||
//RELEASEARRAYOBJECTS( bytes );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -470,6 +470,12 @@ namespace DocFileFormat
|
||||
delete storageOut;
|
||||
return false;
|
||||
}
|
||||
//DecryptStream(Decryptor, "WordDocument", storageIn, storageOut);
|
||||
//if (FIB->m_FibBase.fWhichTblStm)
|
||||
// DecryptStream(Decryptor, "1Table", storageIn, storageOut);
|
||||
//else
|
||||
// DecryptStream(Decryptor, "0Table", storageIn, storageOut);
|
||||
|
||||
std::list<std::string> listStream = storageIn->entries();
|
||||
|
||||
for (std::list<std::string>::iterator it = listStream.begin(); it != listStream.end(); it++)
|
||||
@ -480,13 +486,20 @@ namespace DocFileFormat
|
||||
|
||||
for (std::list<std::string>::iterator it2 = list_entry.begin(); it2 != list_entry.end(); it2++)
|
||||
{
|
||||
//if (*it2 != "WordDocument" && std::wstring::npos == it2->find("Table"))
|
||||
// CopyStream( *it2, storageIn, storageOut);
|
||||
DecryptStream(Decryptor, *it2, storageIn, storageOut);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//if (*it != "WordDocument" && std::wstring::npos == it->find("Table"))
|
||||
// CopyStream( *it, storageIn, storageOut);
|
||||
DecryptStream(Decryptor, *it, storageIn, storageOut);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
storageOut->close();
|
||||
delete storageOut;
|
||||
|
||||
@ -508,6 +521,31 @@ namespace DocFileFormat
|
||||
}
|
||||
return true;
|
||||
}
|
||||
bool WordDocument::CopyStream (std::string streamName, POLE::Storage * storageIn, POLE::Storage * storageOut)
|
||||
{
|
||||
POLE::Stream *stream = new POLE::Stream(storageIn, streamName);
|
||||
if (!stream) return false;
|
||||
|
||||
stream->seek(0);
|
||||
int sz_stream = stream->size();
|
||||
|
||||
POLE::Stream *streamNew = new POLE::Stream(storageOut, streamName, true, sz_stream);
|
||||
if (!streamNew) return false;
|
||||
|
||||
unsigned char* data_stream = new unsigned char[sz_stream];
|
||||
stream->read(data_stream, sz_stream);
|
||||
|
||||
streamNew->write(data_stream, sz_stream);
|
||||
|
||||
RELEASEARRAYOBJECTS(data_stream);
|
||||
|
||||
streamNew->flush();
|
||||
|
||||
delete streamNew;
|
||||
delete stream;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool WordDocument::DecryptStream(CRYPT::Decryptor* Decryptor, std::string streamName, POLE::Storage * storageIn, POLE::Storage * storageOut)
|
||||
|
||||
@ -103,6 +103,7 @@ namespace DocFileFormat
|
||||
private:
|
||||
bool DecryptOfficeFile (CRYPT::Decryptor* Decryptor);
|
||||
bool DecryptStream (CRYPT::Decryptor* Decryptor, std::string streamName, POLE::Storage * storageIn, POLE::Storage * storageOut);
|
||||
bool CopyStream (std::string streamName, POLE::Storage * storageIn, POLE::Storage * storageOut);
|
||||
|
||||
inline StructuredStorageReader* GetStorage() const
|
||||
{
|
||||
|
||||
@ -548,7 +548,7 @@ void PptxConverter::convert( PPTX::Logic::Transition *oox_transition )
|
||||
|
||||
if (oox_transition->advTm.is_init())
|
||||
{
|
||||
odp_context->current_slide().set_page_duration(*oox_transition->dur);
|
||||
odp_context->current_slide().set_page_duration(*oox_transition->advTm);
|
||||
}
|
||||
|
||||
if (oox_transition->base.is_init() == false) return;
|
||||
|
||||
@ -36,6 +36,7 @@
|
||||
#include "./Reader/PPTFileReader.h"
|
||||
#include "./PPTXWriter/Converter.h"
|
||||
|
||||
#include "../../../Common/OfficeFileErrorDescription.h"
|
||||
#include "../../../OfficeUtils/src/OfficeUtils.h"
|
||||
|
||||
#ifndef READMODE
|
||||
@ -51,31 +52,70 @@ COfficePPTFile::~COfficePPTFile()
|
||||
CloseFile();
|
||||
}
|
||||
|
||||
bool COfficePPTFile::OpenFile(std::wstring sFileName)
|
||||
long COfficePPTFile::OpenFile(const std::wstring & sFileName, const std::wstring & password)
|
||||
{
|
||||
CloseFile();
|
||||
|
||||
POLE::Storage *pStgFrom = new POLE::Storage(sFileName.c_str());
|
||||
if (pStgFrom == NULL) return FALSE;
|
||||
if (pStgFrom == NULL) return AVS_ERROR_FILEFORMAT;
|
||||
|
||||
pStgFrom->open(false,false);
|
||||
pStgFrom->open(false, false);
|
||||
|
||||
m_pReader = new CPPTFileReader(pStgFrom, m_strTempDirectory);
|
||||
((CPPTFileReader*)m_pReader)->m_oDocumentInfo.m_strFileDirectory = GetDirectory(sFileName.c_str());
|
||||
|
||||
if (!((CPPTFileReader*)m_pReader)->IsPowerPoint())
|
||||
CPPTFileReader* pptReader = (CPPTFileReader*)m_pReader;
|
||||
|
||||
pptReader->m_oDocumentInfo.m_strFileDirectory= GetDirectory(sFileName.c_str());
|
||||
|
||||
if (pptReader->IsPowerPoint() == false)
|
||||
{
|
||||
CPPTFileReader* r = (CPPTFileReader*)m_pReader; RELEASEOBJECT(r);
|
||||
RELEASEOBJECT(pptReader);
|
||||
m_pReader = NULL;
|
||||
return FALSE;
|
||||
return AVS_ERROR_FILEFORMAT;
|
||||
}
|
||||
|
||||
((CPPTFileReader*)m_pReader)->ReadPersistDirectory();
|
||||
((CPPTFileReader*)m_pReader)->ReadSlideList();
|
||||
if (pptReader->ReadPersistDirectory() == false)
|
||||
return AVS_ERROR_FILEFORMAT;
|
||||
|
||||
m_Status = READMODE;
|
||||
|
||||
return TRUE;
|
||||
if (pptReader->IsEncrypted())
|
||||
{
|
||||
CEncryptionHeader *pEncryptionHeader = pptReader->GetEncryptionHeader();
|
||||
if (password.empty()) return AVS_ERROR_DRM;
|
||||
|
||||
if (pEncryptionHeader->bStandard)
|
||||
{
|
||||
CRYPT::RC4Decryptor Decryptor(pEncryptionHeader->crypt_data_rc4, password, 1);
|
||||
|
||||
if (Decryptor.IsVerify() == false)
|
||||
{
|
||||
return AVS_ERROR_PASSWORD;
|
||||
}
|
||||
if (DecryptOfficeFile(&Decryptor) == false) return AVS_ERROR_DRM;
|
||||
|
||||
return OpenFile(m_sTempDecryptFileName, L"");
|
||||
}
|
||||
else
|
||||
{
|
||||
CRYPT::ECMADecryptor Decryptor;
|
||||
|
||||
Decryptor.SetCryptData(pEncryptionHeader->crypt_data_aes);
|
||||
|
||||
if (Decryptor.SetPassword(password) == false)
|
||||
{
|
||||
return AVS_ERROR_PASSWORD;
|
||||
}
|
||||
if (DecryptOfficeFile(&Decryptor) == false) return AVS_ERROR_DRM;
|
||||
|
||||
return OpenFile(m_sTempDecryptFileName, L"");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
pptReader->ReadSlideList();
|
||||
m_Status = READMODE;
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
bool COfficePPTFile::CloseFile()
|
||||
{
|
||||
@ -86,29 +126,28 @@ bool COfficePPTFile::CloseFile()
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT COfficePPTFile::LoadFromFile(std::wstring sSrcFileName, std::wstring sDstPath)
|
||||
HRESULT COfficePPTFile::LoadFromFile(std::wstring sSrcFileName, std::wstring sDstPath, std::wstring password)
|
||||
{
|
||||
if (m_strTempDirectory.length() < 1)
|
||||
if (m_strTempDirectory.empty())
|
||||
{
|
||||
m_strTempDirectory = NSDirectory::GetTempPath();
|
||||
}
|
||||
|
||||
bool bRes = OpenFile(sSrcFileName);
|
||||
if (!bRes)
|
||||
long nResult = OpenFile(sSrcFileName, password);
|
||||
if (nResult != S_OK)
|
||||
{
|
||||
CloseFile();
|
||||
m_Status = NULLMODE;
|
||||
return S_FALSE;
|
||||
return nResult;
|
||||
}
|
||||
if (!((CPPTFileReader*)m_pReader)->m_oDocumentInfo.m_arUsers.empty())
|
||||
{
|
||||
NSPresentationEditor::CPPTXWriter oPPTXWriter;
|
||||
NSPresentationEditor::CPPTXWriter oPPTXWriter;
|
||||
oPPTXWriter.m_strTempDirectory = sDstPath;
|
||||
|
||||
|
||||
oPPTXWriter.CreateFile(((CPPTFileReader*)m_pReader)->m_oDocumentInfo.m_arUsers[0]);
|
||||
oPPTXWriter.CloseFile();
|
||||
|
||||
}
|
||||
return S_OK;
|
||||
}
|
||||
@ -122,3 +161,94 @@ std::wstring COfficePPTFile::GetDirectory(std::wstring strFileName)
|
||||
}
|
||||
return strFileName;
|
||||
}
|
||||
|
||||
bool COfficePPTFile::DecryptOfficeFile(CRYPT::Decryptor* Decryptor)
|
||||
{
|
||||
if (!m_pReader) return false;
|
||||
CPPTFileReader* pptReader = (CPPTFileReader*)(m_pReader);
|
||||
|
||||
if (m_strTempDirectory.empty())
|
||||
{
|
||||
m_strTempDirectory = NSFile::CFileBinary::GetTempPath();
|
||||
}
|
||||
m_sTempDecryptFileName = m_strTempDirectory + FILE_SEPARATOR_STR + L"~tempFile.ppt";
|
||||
|
||||
POLE::Storage *storageIn = pptReader->m_pPowerPointStg;
|
||||
POLE::Storage *storageOut = new POLE::Storage(m_sTempDecryptFileName.c_str());
|
||||
|
||||
if (!storageOut || !storageIn) return false;
|
||||
|
||||
if (!storageOut->open(true, true))
|
||||
{
|
||||
delete storageOut;
|
||||
return false;
|
||||
}
|
||||
std::list<std::string> listStream = storageIn->entries();
|
||||
|
||||
for (std::list<std::string>::iterator it = listStream.begin(); it != listStream.end(); it++)
|
||||
{
|
||||
if (storageIn->isDirectory(*it))
|
||||
{
|
||||
std::list<std::string> list_entry = storageIn->GetAllStreams(*it);
|
||||
|
||||
for (std::list<std::string>::iterator it2 = list_entry.begin(); it2 != list_entry.end(); it2++)
|
||||
{
|
||||
DecryptStream(Decryptor, *it2, storageIn, storageOut);
|
||||
}
|
||||
}
|
||||
else
|
||||
DecryptStream(Decryptor, *it, storageIn, storageOut);
|
||||
|
||||
}
|
||||
storageOut->close();
|
||||
delete storageOut;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool COfficePPTFile::DecryptStream(CRYPT::Decryptor* Decryptor, std::string streamName, POLE::Storage * storageIn, POLE::Storage * storageOut)
|
||||
{
|
||||
POLE::Stream *stream = new POLE::Stream(storageIn, streamName);
|
||||
if (!stream) return false;
|
||||
|
||||
stream->seek(0);
|
||||
int sz_stream = stream->size();
|
||||
|
||||
POLE::Stream *streamNew = new POLE::Stream(storageOut, streamName, true, sz_stream);
|
||||
if (!streamNew) return false;
|
||||
|
||||
unsigned char* data_stream = new unsigned char[sz_stream];
|
||||
stream->read(data_stream, sz_stream);
|
||||
|
||||
unsigned char* data_store = NULL;
|
||||
int sz_data_store = 0;
|
||||
|
||||
//if ("WordDocument" == streamName)
|
||||
//{
|
||||
// sz_data_store = 68;
|
||||
// data_store = new unsigned char[sz_data_store];
|
||||
//}
|
||||
|
||||
if (data_store)
|
||||
memcpy(data_store, data_stream, sz_data_store);
|
||||
|
||||
Decryptor->Decrypt((char*)data_stream, sz_stream, 0);
|
||||
|
||||
if (data_store)
|
||||
memcpy(data_stream, data_store, sz_data_store);
|
||||
|
||||
streamNew->write(data_stream, sz_stream);
|
||||
|
||||
RELEASEARRAYOBJECTS(data_store);
|
||||
RELEASEARRAYOBJECTS(data_stream);
|
||||
|
||||
streamNew->flush();
|
||||
|
||||
delete streamNew;
|
||||
delete stream;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -35,31 +35,26 @@
|
||||
|
||||
#include <vector>
|
||||
|
||||
namespace CRYPT
|
||||
{
|
||||
class Decryptor;
|
||||
}
|
||||
|
||||
namespace POLE
|
||||
{
|
||||
class Storage;
|
||||
}
|
||||
|
||||
class COfficePPTFile
|
||||
{
|
||||
public:
|
||||
COfficePPTFile()
|
||||
{
|
||||
m_strTempDirectory = L"";
|
||||
m_pReader = NULL;
|
||||
m_Status = 0;
|
||||
|
||||
}
|
||||
|
||||
~COfficePPTFile();
|
||||
|
||||
private:
|
||||
|
||||
int m_Status;
|
||||
|
||||
void* m_pReader;
|
||||
|
||||
std::vector<std::wstring> m_arUserSources;
|
||||
|
||||
std::wstring m_strTempDirectory;
|
||||
|
||||
public:
|
||||
|
||||
HRESULT put_TempDirectory(std::wstring sDir)
|
||||
{
|
||||
m_strTempDirectory = sDir;
|
||||
@ -71,13 +66,22 @@ public:
|
||||
return m_strTempDirectory;
|
||||
}
|
||||
|
||||
HRESULT LoadFromFile(std::wstring sSrcFileName, std::wstring sDstPath);
|
||||
HRESULT LoadFromFile(std::wstring sSrcFileName, std::wstring sDstPath, std::wstring password);
|
||||
|
||||
private:
|
||||
bool OpenFile(std::wstring sFileName);
|
||||
|
||||
int m_Status;
|
||||
void* m_pReader;
|
||||
std::vector<std::wstring> m_arUserSources;
|
||||
std::wstring m_strTempDirectory;
|
||||
std::wstring m_sTempDecryptFileName;
|
||||
|
||||
long OpenFile(const std::wstring & fileName, const std::wstring & password);
|
||||
bool CloseFile();
|
||||
|
||||
std::wstring GetDirectory(std::wstring strFileName);
|
||||
bool DecryptOfficeFile (CRYPT::Decryptor* Decryptor);
|
||||
bool DecryptStream (CRYPT::Decryptor* Decryptor, std::string streamName, POLE::Storage* storageIn, POLE::Storage* storageOut);
|
||||
|
||||
std::wstring GetDirectory(std::wstring strFileName);
|
||||
};
|
||||
|
||||
|
||||
@ -42,15 +42,16 @@ public:
|
||||
DWORD m_nOffsetPersistDirectory;
|
||||
|
||||
DWORD m_nDocumentRef;
|
||||
DWORD m_nEncryptRef;
|
||||
DWORD m_nMaxPersistWritten;
|
||||
|
||||
public:
|
||||
CUserEdit()
|
||||
{
|
||||
m_nOffsetLastEdit = 0;
|
||||
m_nOffsetPersistDirectory = 0;
|
||||
m_nDocumentRef = 0;
|
||||
m_nMaxPersistWritten = 0;
|
||||
m_nOffsetLastEdit = 0;
|
||||
m_nOffsetPersistDirectory = 0;
|
||||
m_nDocumentRef = 0;
|
||||
m_nMaxPersistWritten = 0;
|
||||
m_nEncryptRef = 0;
|
||||
}
|
||||
~CUserEdit()
|
||||
{
|
||||
@ -62,15 +63,17 @@ public:
|
||||
m_nOffsetPersistDirectory = oSrc.m_nOffsetPersistDirectory;
|
||||
m_nDocumentRef = oSrc.m_nDocumentRef;
|
||||
m_nMaxPersistWritten = oSrc.m_nMaxPersistWritten;
|
||||
m_nEncryptRef = oSrc.m_nEncryptRef;
|
||||
return (*this);
|
||||
}
|
||||
|
||||
void FromAtom(CRecordUserEditAtom* pAtom)
|
||||
{
|
||||
m_nOffsetLastEdit = pAtom->m_nOffsetLastEdit;
|
||||
m_nOffsetPersistDirectory = pAtom->m_nOffsetPersistDirectory;
|
||||
m_nDocumentRef = pAtom->m_nOffsetDocPersistIdRef;
|
||||
m_nMaxPersistWritten = pAtom->m_nPersistIdSeed;
|
||||
m_nOffsetLastEdit = pAtom->m_nOffsetLastEdit;
|
||||
m_nOffsetPersistDirectory = pAtom->m_nOffsetPersistDirectory;
|
||||
m_nDocumentRef = pAtom->m_nOffsetDocPersistIdRef;
|
||||
m_nMaxPersistWritten = pAtom->m_nPersistIdSeed;
|
||||
m_nEncryptRef = pAtom->m_nEncryptSessionPersistIdRef;
|
||||
}
|
||||
};
|
||||
|
||||
@ -79,10 +82,8 @@ class CCurrentUser
|
||||
public:
|
||||
bool m_bIsEncrypt;
|
||||
DWORD m_nOffsetToCurrentEdit;
|
||||
std::wstring m_sName;
|
||||
|
||||
std::wstring m_strName;
|
||||
|
||||
public:
|
||||
CCurrentUser()
|
||||
{
|
||||
m_bIsEncrypt = false;
|
||||
@ -96,20 +97,16 @@ public:
|
||||
{
|
||||
m_bIsEncrypt = oSrc.m_bIsEncrypt;
|
||||
m_nOffsetToCurrentEdit = oSrc.m_nOffsetToCurrentEdit;
|
||||
m_strName = oSrc.m_strName;
|
||||
m_sName = oSrc.m_sName;
|
||||
return (*this);
|
||||
}
|
||||
|
||||
void FromAtom(CRecordCurrentUserAtom* pAtom)
|
||||
{
|
||||
m_bIsEncrypt = (NO_ENCRYPT == pAtom->m_nToken);
|
||||
m_bIsEncrypt = (ENCRYPT == pAtom->m_nToken);
|
||||
|
||||
m_nOffsetToCurrentEdit = pAtom->m_nOffsetToCurEdit;
|
||||
m_strName = pAtom->m_strUNICODEUserName;
|
||||
}
|
||||
|
||||
std::wstring ToString()
|
||||
{
|
||||
return L"";
|
||||
m_sName = pAtom->m_strUNICODEUserName;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@ -41,11 +41,8 @@ public:
|
||||
std::wstring m_strFileDirectory;
|
||||
std::map<int, std::wstring> m_mapStoreImageFile;
|
||||
|
||||
public:
|
||||
|
||||
CPPTDocumentInfo() : m_oCurrentUser(), m_arUsers()
|
||||
{
|
||||
m_strFileDirectory = _T("");
|
||||
}
|
||||
|
||||
~CPPTDocumentInfo()
|
||||
@ -66,7 +63,7 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
void ReadFromStream(CRecordCurrentUserAtom* pCurrentUser, POLE::Stream* pStream, std::wstring strFolderMem)
|
||||
bool ReadFromStream(CRecordCurrentUserAtom* pCurrentUser, POLE::Stream* pStream, std::wstring strFolderMem)
|
||||
{
|
||||
m_oCurrentUser.FromAtom(pCurrentUser);
|
||||
|
||||
@ -86,13 +83,15 @@ public:
|
||||
oUserAtom.ReadFromStream(oHeader, pStream);
|
||||
|
||||
CPPTUserInfo* pInfo = new CPPTUserInfo();
|
||||
|
||||
pInfo->m_strFileDirectory = m_strFileDirectory;
|
||||
pInfo->m_bEncrypt = m_oCurrentUser.m_bIsEncrypt;
|
||||
|
||||
bool bRes = pInfo->ReadFromStream(&oUserAtom, pStream, strFolderMem);
|
||||
bool bResult = pInfo->ReadFromStream(&oUserAtom, pStream, strFolderMem);
|
||||
|
||||
offsetToEdit = pInfo->m_oUser.m_nOffsetLastEdit;
|
||||
|
||||
if (!bRes)
|
||||
if (bResult == false)
|
||||
{
|
||||
delete pInfo;
|
||||
continue;
|
||||
@ -105,11 +104,13 @@ public:
|
||||
|
||||
pInfo = NULL;
|
||||
}
|
||||
// теперь нужно у всех сделать FromDocument...или только для ПОСЛЕДНЕГО пользователя ??? (остальные то не нужны)
|
||||
//for (int i = 0; i < m_arUsers.size(); ++i)
|
||||
if (m_arUsers.size() > 0)
|
||||
if (m_arUsers.empty() == false)
|
||||
{
|
||||
m_arUsers[0]->FromDocument();
|
||||
if (m_arUsers[0]->m_bEncrypt == false)
|
||||
{
|
||||
m_arUsers[0]->FromDocument();
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
@ -132,6 +132,7 @@ bool CPPTUserInfo::ReadFromStream(CRecordUserEditAtom* pUser, POLE::Stream* pStr
|
||||
{
|
||||
m_oUser.FromAtom(pUser);
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
SRecordHeader oHeader;
|
||||
CRecordUserEditAtom oUserAtom;
|
||||
|
||||
@ -147,8 +148,24 @@ bool CPPTUserInfo::ReadFromStream(CRecordUserEditAtom* pUser, POLE::Stream* pStr
|
||||
CRecordPersistDirectoryAtom oPersist;
|
||||
oPersist.ReadFromStream(oHeader, pStream);
|
||||
oPersist.ToMap(&m_mapOffsetInPIDs);
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
std::map<DWORD, DWORD>::iterator pPair = m_mapOffsetInPIDs.find(m_oUser.m_nEncryptRef);
|
||||
|
||||
std::map<DWORD, DWORD>::iterator pPair = m_mapOffsetInPIDs.find(m_oUser.m_nDocumentRef);
|
||||
if (pPair != m_mapOffsetInPIDs.end())
|
||||
{
|
||||
StreamUtils::StreamSeek(pPair->second, pStream);
|
||||
oHeader.ReadFromStream(pStream);
|
||||
|
||||
if (RECORD_TYPE_DOCUMENT_ENCRYPTION_ATOM == oHeader.RecType)
|
||||
{
|
||||
m_bEncrypt = true;
|
||||
m_oEncryptionHeader.ReadFromStream(oHeader, pStream);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
pPair = m_mapOffsetInPIDs.find(m_oUser.m_nDocumentRef);
|
||||
|
||||
if (pPair == m_mapOffsetInPIDs.end())
|
||||
return false;
|
||||
@ -158,7 +175,7 @@ bool CPPTUserInfo::ReadFromStream(CRecordUserEditAtom* pUser, POLE::Stream* pStr
|
||||
|
||||
if (RECORD_TYPE_DOCUMENT != oHeader.RecType)
|
||||
{
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
m_oDocument.ReadFromStream(oHeader, pStream);
|
||||
|
||||
@ -34,6 +34,7 @@
|
||||
|
||||
#include "../Records/Animations/AnimationTypes.h"
|
||||
#include "../Records/ExObjListContainer.h"
|
||||
#include "../Records/CryptSession10Container.h"
|
||||
|
||||
#include "SlideInfo.h"
|
||||
|
||||
@ -46,6 +47,9 @@ public:
|
||||
CUserEdit m_oUser;
|
||||
std::map<DWORD, DWORD> m_mapOffsetInPIDs;
|
||||
CRecordDocument m_oDocument;
|
||||
|
||||
CEncryptionHeader m_oEncryptionHeader;
|
||||
bool m_bEncrypt;
|
||||
|
||||
std::map<DWORD, CRecordSlide*> m_mapSlides;
|
||||
std::map<DWORD, CRecordSlide*> m_mapMasters;
|
||||
|
||||
@ -196,7 +196,8 @@ typedef BYTE BOOL1;
|
||||
#define RECORD_TYPE_COMMENT2000SUMMARYATOM 12005
|
||||
|
||||
// Records ~12050 seem to be related to Document Encryption
|
||||
#define RECORD_TYPE_DOCUMENT_ENCRYPTION_ATOM 12052
|
||||
#define RECORD_TYPE_DOCUMENT_ENCRYPTION_ATOM 0x2F14
|
||||
|
||||
|
||||
//records greater then 0xF000 belong to with Microsoft Office Drawing format also known as Escher
|
||||
#define RECORD_TYPE_ESCHER_DGG_CONTAINER 0xF000
|
||||
@ -251,6 +252,7 @@ typedef BYTE BOOL1;
|
||||
#define RECORD_PROG_BINARY_TAG 0x138A // RT_ProgBinaryTag SlideProgTagsContainer-DocProgTagsContainer-ShapeProgTagsContainer
|
||||
#define RECORD_TEXT_MASTER_STYLE10_ATOM 0x0FB2 // RT_TextMasterStyle10Atom TextMasterStyle10Atom
|
||||
|
||||
|
||||
static std::string GetRecordName(DWORD dwType)
|
||||
{
|
||||
std::string strName = ("Unknown");
|
||||
|
||||
@ -31,6 +31,7 @@
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include "../../../ASCOfficeXlsFile2/source/XlsFormat/Crypt/Decryptor.h"
|
||||
#include "../../../DesktopEditor/common/Directory.h"
|
||||
#include "../Records/Drawing/ArtBlip.h"
|
||||
|
||||
@ -45,6 +46,8 @@
|
||||
|
||||
#define PP97_DUALSTORAGE "PP97_DUALSTORAGE"
|
||||
|
||||
#define ENCRYPTION_STREAM "EncryptedSummary"
|
||||
|
||||
class CPPTFileReader
|
||||
{
|
||||
public:
|
||||
@ -63,12 +66,12 @@ public:
|
||||
|
||||
if ( ReadCurrentUser(pStm) )
|
||||
{
|
||||
m_bIsPPTFile = TRUE;
|
||||
m_bIsPPTFile = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
RELEASEOBJECT(pStm);
|
||||
|
||||
|
||||
std::string stream_name = std::string(PP97_DUALSTORAGE) + std::string("/") + std::string(CURRENT_USER_STREAM);
|
||||
pStm = new POLE::Stream( m_pPowerPointStg, stream_name);
|
||||
|
||||
@ -78,7 +81,7 @@ public:
|
||||
m_bDualStorage = true;
|
||||
if ( ReadCurrentUser(pStm))
|
||||
{
|
||||
m_bIsPPTFile = TRUE;
|
||||
m_bIsPPTFile = true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -106,19 +109,31 @@ public:
|
||||
{
|
||||
return m_bIsPPTFile;
|
||||
}
|
||||
|
||||
void ReadPersistDirectory()
|
||||
bool IsEncrypted()
|
||||
{
|
||||
bool bRes = SavePictures();
|
||||
// нужно вызывать РОВНО один раз...
|
||||
m_oDocumentInfo.ReadFromStream(&m_oCurrentUser, GetDocStream(), m_strMemoryForder);
|
||||
if (m_oDocumentInfo.m_arUsers.empty())
|
||||
return m_oDocumentInfo.m_oCurrentUser.m_bIsEncrypt; //wps не выставляет флаг!
|
||||
|
||||
return &m_oDocumentInfo.m_arUsers[0]->m_bEncrypt;
|
||||
}
|
||||
CEncryptionHeader* GetEncryptionHeader()
|
||||
{
|
||||
if (m_oDocumentInfo.m_arUsers.empty()) return NULL;
|
||||
|
||||
return &m_oDocumentInfo.m_arUsers[0]->m_oEncryptionHeader;
|
||||
}
|
||||
bool ReadPersistDirectory()
|
||||
{
|
||||
// нужно вызывать РОВНО один раз...
|
||||
bool bRes = SavePictures();
|
||||
|
||||
return m_oDocumentInfo.ReadFromStream(&m_oCurrentUser, GetDocStream(), m_strMemoryForder);
|
||||
}
|
||||
|
||||
void ReadSlideList()
|
||||
{
|
||||
if (m_oDocumentInfo.m_arUsers.size() > 0)
|
||||
{
|
||||
|
||||
DWORD nPID = m_oDocumentInfo.m_arUsers[0]->m_oUser.m_nDocumentRef;
|
||||
std::map<DWORD, DWORD>::iterator pPair = m_oDocumentInfo.m_arUsers[0]->m_mapOffsetInPIDs.find(nPID);
|
||||
|
||||
@ -142,8 +157,7 @@ protected:
|
||||
{
|
||||
m_oCurrentUser.ReadFromStream(oHeader, pStm);
|
||||
|
||||
isPP = (m_oCurrentUser.m_nSize == 0x00000014 && (m_oCurrentUser.m_nToken == NO_ENCRYPT) &&
|
||||
(m_oCurrentUser.m_nLenUserName <= 255));
|
||||
isPP = (m_oCurrentUser.m_nSize == 0x00000014 && (m_oCurrentUser.m_nLenUserName <= 255));
|
||||
}
|
||||
|
||||
return isPP;
|
||||
@ -195,7 +209,7 @@ protected:
|
||||
|
||||
// удаление картинок при завершении программы
|
||||
|
||||
while (TRUE)
|
||||
while (true)
|
||||
{
|
||||
if (oHeader.ReadFromStream(pStream) == false )
|
||||
{
|
||||
@ -209,7 +223,7 @@ protected:
|
||||
art_blip.ReadFromStream(oHeader, pStream);
|
||||
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
private:
|
||||
@ -217,11 +231,11 @@ private:
|
||||
CRecordCurrentUserAtom m_oCurrentUser;
|
||||
POLE::Stream * m_pDocStream;
|
||||
POLE::Stream * m_pPictureStream;
|
||||
POLE::Storage* m_pPowerPointStg;
|
||||
bool m_bIsPPTFile;
|
||||
|
||||
bool m_bIsPPTFile;
|
||||
|
||||
public:
|
||||
// для картинок
|
||||
POLE::Storage* m_pPowerPointStg;
|
||||
std::wstring m_strMemoryForder;
|
||||
|
||||
std::vector<bool> m_arLoadImageFlags;
|
||||
|
||||
169
ASCOfficePPTFile/PPTFormatLib/Records/CryptSession10Container.h
Normal file
169
ASCOfficePPTFile/PPTFormatLib/Records/CryptSession10Container.h
Normal file
@ -0,0 +1,169 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2017
|
||||
*
|
||||
* This program is a free software product. You can redistribute it and/or
|
||||
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
||||
* version 3 as published by the Free Software Foundation. In accordance with
|
||||
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
||||
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
||||
* of any third-party rights.
|
||||
*
|
||||
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
||||
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||||
*
|
||||
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
||||
* EU, LV-1021.
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions
|
||||
* of the Program must display Appropriate Legal Notices, as required under
|
||||
* Section 5 of the GNU AGPL version 3.
|
||||
*
|
||||
* Pursuant to Section 7(b) of the License you must retain the original Product
|
||||
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
||||
* grant you any rights under trademark law for use of our trademarks.
|
||||
*
|
||||
* All the Product's GUI elements, including illustrations and icon sets, as
|
||||
* well as technical writing content are licensed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
||||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
*
|
||||
*/
|
||||
#pragma once
|
||||
#include "../../../ASCOfficeXlsFile2/source/XlsFormat/Crypt/Decryptor.h"
|
||||
|
||||
class CEncryptionHeader : public CUnknownRecord
|
||||
{
|
||||
public:
|
||||
|
||||
CRYPT::_rc4CryptData crypt_data_rc4;
|
||||
CRYPT::_ecmaCryptData crypt_data_aes;
|
||||
bool bStandard;
|
||||
|
||||
CEncryptionHeader()
|
||||
{
|
||||
}
|
||||
|
||||
~CEncryptionHeader()
|
||||
{
|
||||
}
|
||||
|
||||
virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream)
|
||||
{
|
||||
m_oHeader = oHeader;
|
||||
|
||||
int pos_start_record = pStream->tell();
|
||||
|
||||
unsigned short vMajor = StreamUtils::ReadWORD(pStream);
|
||||
unsigned short vMinor = StreamUtils::ReadWORD(pStream);
|
||||
|
||||
if(0x0001 == vMajor) // RC4 encryption header structure
|
||||
{
|
||||
bStandard = true;
|
||||
|
||||
crypt_data_rc4.Salt.b1 = StreamUtils::ReadDWORD(pStream);
|
||||
crypt_data_rc4.Salt.b2 = StreamUtils::ReadDWORD(pStream);
|
||||
crypt_data_rc4.Salt.b3 = StreamUtils::ReadDWORD(pStream);
|
||||
crypt_data_rc4.Salt.b4 = StreamUtils::ReadDWORD(pStream);
|
||||
|
||||
crypt_data_rc4.EncryptedVerifier.b1 = StreamUtils::ReadDWORD(pStream);
|
||||
crypt_data_rc4.EncryptedVerifier.b2 = StreamUtils::ReadDWORD(pStream);
|
||||
crypt_data_rc4.EncryptedVerifier.b3 = StreamUtils::ReadDWORD(pStream);
|
||||
crypt_data_rc4.EncryptedVerifier.b4 = StreamUtils::ReadDWORD(pStream);
|
||||
|
||||
crypt_data_rc4.EncryptedVerifierHash.b1 = StreamUtils::ReadDWORD(pStream);
|
||||
crypt_data_rc4.EncryptedVerifierHash.b2 = StreamUtils::ReadDWORD(pStream);
|
||||
crypt_data_rc4.EncryptedVerifierHash.b3 = StreamUtils::ReadDWORD(pStream);
|
||||
crypt_data_rc4.EncryptedVerifierHash.b4 = StreamUtils::ReadDWORD(pStream);
|
||||
}
|
||||
else
|
||||
{
|
||||
bStandard = false;
|
||||
crypt_data_aes.bAgile = false;
|
||||
|
||||
unsigned short flags = StreamUtils::ReadDWORD(pStream);
|
||||
unsigned char *pDataRead = NULL;
|
||||
|
||||
bool fCryptoAPI = GETBIT(flags, 1);
|
||||
bool fDocProps = GETBIT(flags, 2);
|
||||
bool fExternal = GETBIT(flags, 3);
|
||||
bool fAES = GETBIT(flags, 4);
|
||||
|
||||
//EncryptionHeader
|
||||
int HeaderSize = StreamUtils::ReadDWORD(pStream);
|
||||
int Flags = StreamUtils::ReadDWORD(pStream);
|
||||
int SizeExtra = StreamUtils::ReadDWORD(pStream);
|
||||
int AlgID = StreamUtils::ReadDWORD(pStream);
|
||||
int AlgIDHash = StreamUtils::ReadDWORD(pStream);
|
||||
int KeySize = StreamUtils::ReadDWORD(pStream);
|
||||
int ProviderType= StreamUtils::ReadDWORD(pStream);
|
||||
int Reserved1 = StreamUtils::ReadDWORD(pStream);
|
||||
int Reserved2 = StreamUtils::ReadDWORD(pStream);
|
||||
|
||||
int pos = pStream->tell();
|
||||
int size = pStream->size();
|
||||
|
||||
std::vector<char> dataCSPName;
|
||||
while(pos < size - 1)
|
||||
{
|
||||
dataCSPName.push_back(StreamUtils::ReadBYTE(pStream));
|
||||
dataCSPName.push_back(StreamUtils::ReadBYTE(pStream));
|
||||
if (dataCSPName[dataCSPName.size() - 1] == 0 && dataCSPName[dataCSPName.size() - 2] == 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
pos+=2;//unicode null-terminate string
|
||||
}
|
||||
//EncryptionVerifier
|
||||
crypt_data_aes.saltSize = StreamUtils::ReadDWORD(pStream);
|
||||
crypt_data_aes.saltValue = StreamUtils::ReadStringA(pStream, crypt_data_aes.saltSize);
|
||||
|
||||
crypt_data_aes.encryptedVerifierInput = StreamUtils::ReadStringA(pStream, 0x10);
|
||||
|
||||
crypt_data_aes.hashSize = StreamUtils::ReadDWORD(pStream);
|
||||
|
||||
int szEncryptedVerifierHash = (ProviderType == 0x0001) ? 0x14 : 0x20;
|
||||
crypt_data_aes.encryptedVerifierValue = StreamUtils::ReadStringA(pStream, szEncryptedVerifierHash);
|
||||
|
||||
pos = pStream->tell();
|
||||
|
||||
//------------------------------------------------------------------------------------------
|
||||
switch(AlgIDHash)
|
||||
{
|
||||
case 0x8003: crypt_data_aes.hashAlgorithm = CRYPT_METHOD::MD5; break;
|
||||
case 0x0000:
|
||||
case 0x8004: crypt_data_aes.hashAlgorithm = CRYPT_METHOD::SHA1; break;
|
||||
}
|
||||
crypt_data_aes.spinCount = 0;
|
||||
|
||||
switch(AlgID)
|
||||
{
|
||||
case 0x6801:
|
||||
crypt_data_aes.cipherAlgorithm = CRYPT_METHOD::RC4;
|
||||
crypt_data_aes.keySize = KeySize / 8;
|
||||
break;
|
||||
case 0x660E:
|
||||
crypt_data_aes.cipherAlgorithm = CRYPT_METHOD::AES_ECB;
|
||||
crypt_data_aes.keySize = 128 /8;
|
||||
break;
|
||||
case 0x660F:
|
||||
crypt_data_aes.cipherAlgorithm = CRYPT_METHOD::AES_ECB;
|
||||
crypt_data_aes.keySize = 192 /8;
|
||||
break;
|
||||
case 0x6610:
|
||||
crypt_data_aes.cipherAlgorithm = CRYPT_METHOD::AES_ECB;
|
||||
crypt_data_aes.keySize = 256 /8;
|
||||
break;
|
||||
}
|
||||
|
||||
//switch(ProviderType)
|
||||
//{
|
||||
// case 0x0001: crypt_data_aes.cipherAlgorithm = CRYPT_METHOD::RC4; break;
|
||||
// case 0x0018: crypt_data_aes.cipherAlgorithm = CRYPT_METHOD::AES_ECB; break;
|
||||
//}
|
||||
}
|
||||
int pos_end_record = pStream->tell();
|
||||
|
||||
int sz_header = pos_end_record - pos_start_record;
|
||||
}
|
||||
};
|
||||
@ -54,8 +54,7 @@ public:
|
||||
|
||||
DWORD m_nRelVersion; // 0x00000008 or 0x00000009
|
||||
|
||||
public:
|
||||
|
||||
|
||||
CRecordCurrentUserAtom() : m_nToken(0)
|
||||
{
|
||||
m_nRelVersion = m_nDocFileVersion = m_nMinorVersion = m_nMajorVersion = m_nLenUserName = m_nOffsetToCurEdit = 0;
|
||||
|
||||
@ -40,8 +40,6 @@ public:
|
||||
double m_dStartTime;
|
||||
double m_dEndTime;
|
||||
|
||||
public:
|
||||
|
||||
CRecordExCDAudioContainer()
|
||||
{
|
||||
m_dStartTime = 0;
|
||||
|
||||
@ -49,12 +49,15 @@ public:
|
||||
|
||||
DWORD m_nPersistIdSeed; // for next
|
||||
|
||||
DWORD m_nEncryptSessionPersistIdRef;
|
||||
|
||||
USHORT m_nLastView;
|
||||
|
||||
public:
|
||||
|
||||
CRecordUserEditAtom()
|
||||
{
|
||||
m_nEncryptSessionPersistIdRef = 0;
|
||||
}
|
||||
|
||||
~CRecordUserEditAtom()
|
||||
@ -67,36 +70,39 @@ public:
|
||||
|
||||
m_nLastSlideIdRef = StreamUtils::ReadDWORD(pStream);
|
||||
|
||||
m_nVersion = StreamUtils::ReadWORD(pStream);
|
||||
m_nVersion = StreamUtils::ReadWORD(pStream);
|
||||
m_nMinorVersion = StreamUtils::ReadBYTE(pStream);
|
||||
m_nMajorVersion = StreamUtils::ReadBYTE(pStream);
|
||||
|
||||
m_nOffsetLastEdit = StreamUtils::ReadDWORD(pStream);
|
||||
m_nOffsetPersistDirectory = StreamUtils::ReadDWORD(pStream);
|
||||
m_nOffsetDocPersistIdRef = StreamUtils::ReadDWORD(pStream);
|
||||
m_nOffsetLastEdit = StreamUtils::ReadDWORD(pStream);
|
||||
m_nOffsetPersistDirectory = StreamUtils::ReadDWORD(pStream);
|
||||
m_nOffsetDocPersistIdRef = StreamUtils::ReadDWORD(pStream);
|
||||
|
||||
m_nPersistIdSeed = StreamUtils::ReadDWORD(pStream);
|
||||
m_nLastView = StreamUtils::ReadWORD(pStream);
|
||||
m_nPersistIdSeed = StreamUtils::ReadDWORD(pStream);
|
||||
m_nLastView = StreamUtils::ReadWORD(pStream);
|
||||
|
||||
StreamUtils::StreamSkip(m_oHeader.RecLen - 22, pStream);
|
||||
StreamUtils::StreamSkip(2, pStream);
|
||||
|
||||
if (m_oHeader.RecLen > 28)
|
||||
{
|
||||
m_nEncryptSessionPersistIdRef = StreamUtils::ReadDWORD(pStream);
|
||||
}
|
||||
}
|
||||
|
||||
CRecordUserEditAtom& operator =(const CRecordUserEditAtom& oSrc)
|
||||
{
|
||||
m_nLastSlideIdRef = oSrc.m_nLastSlideIdRef;
|
||||
m_nLastSlideIdRef = oSrc.m_nLastSlideIdRef;
|
||||
|
||||
m_nVersion = oSrc.m_nVersion;
|
||||
m_nMinorVersion = oSrc.m_nMinorVersion;
|
||||
m_nMajorVersion = oSrc.m_nMajorVersion;
|
||||
m_nVersion = oSrc.m_nVersion;
|
||||
m_nMinorVersion = oSrc.m_nMinorVersion;
|
||||
m_nMajorVersion = oSrc.m_nMajorVersion;
|
||||
|
||||
m_nOffsetLastEdit = oSrc.m_nOffsetLastEdit;
|
||||
|
||||
m_nOffsetPersistDirectory = oSrc.m_nOffsetPersistDirectory;
|
||||
|
||||
m_nOffsetDocPersistIdRef = oSrc.m_nOffsetDocPersistIdRef;
|
||||
m_nPersistIdSeed = oSrc.m_nPersistIdSeed;
|
||||
|
||||
m_nLastView = oSrc.m_nLastView;
|
||||
m_nOffsetLastEdit = oSrc.m_nOffsetLastEdit;
|
||||
m_nOffsetPersistDirectory = oSrc.m_nOffsetPersistDirectory;
|
||||
m_nOffsetDocPersistIdRef = oSrc.m_nOffsetDocPersistIdRef;
|
||||
m_nPersistIdSeed = oSrc.m_nPersistIdSeed;
|
||||
m_nLastView = oSrc.m_nLastView;
|
||||
m_nEncryptSessionPersistIdRef = oSrc.m_nEncryptSessionPersistIdRef;
|
||||
return (*this);
|
||||
}
|
||||
};
|
||||
@ -542,6 +542,10 @@
|
||||
RelativePath="..\Records\ColorSchemeAtom.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\Records\CryptSession10Container.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\Records\CString.h"
|
||||
>
|
||||
|
||||
@ -60,7 +60,7 @@ int _tmain(int argc, _TCHAR* argv[])
|
||||
|
||||
pptFile.put_TempDirectory(tempPath);
|
||||
|
||||
HRESULT hRes = pptFile.LoadFromFile(sSrcPpt, dstTempPath);
|
||||
HRESULT hRes = pptFile.LoadFromFile(sSrcPpt, dstTempPath, L"password");
|
||||
|
||||
if (hRes == S_OK)
|
||||
{
|
||||
|
||||
@ -2,44 +2,44 @@ Microsoft Visual Studio Solution File, Format Version 9.00
|
||||
# Visual Studio 2005
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PPTXFormat", "..\..\ASCOfficePPTXFile\PPTXLib\PPTXFormat.vcproj", "{36636678-AE25-4BE6-9A34-2561D1BCF302}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{C739151F-5384-41DF-A1A6-F089E2C1AD56} = {C739151F-5384-41DF-A1A6-F089E2C1AD56}
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0} = {21663823-DE45-479B-91D0-B4FEF4916EF0}
|
||||
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2} = {37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}
|
||||
{A100103A-353E-45E8-A9B8-90B87CC5C0B0} = {A100103A-353E-45E8-A9B8-90B87CC5C0B0}
|
||||
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B} = {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}
|
||||
{A100103A-353E-45E8-A9B8-90B87CC5C0B0} = {A100103A-353E-45E8-A9B8-90B87CC5C0B0}
|
||||
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2} = {37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0} = {21663823-DE45-479B-91D0-B4FEF4916EF0}
|
||||
{C739151F-5384-41DF-A1A6-F089E2C1AD56} = {C739151F-5384-41DF-A1A6-F089E2C1AD56}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "graphics", "..\..\DesktopEditor\graphics\graphics_vs2005.vcproj", "{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7} = {43A0E60E-5C4A-4C09-A29B-7683F503BBD7}
|
||||
{C739151F-5384-41DF-A1A6-F089E2C1AD56} = {C739151F-5384-41DF-A1A6-F089E2C1AD56}
|
||||
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239} = {764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}
|
||||
{DF861D33-9BC1-418C-82B1-581F590FE169} = {DF861D33-9BC1-418C-82B1-581F590FE169}
|
||||
{0588563C-F05C-428C-B21A-DD74756628B3} = {0588563C-F05C-428C-B21A-DD74756628B3}
|
||||
{40A69F40-063E-43FD-8543-455495D8733E} = {40A69F40-063E-43FD-8543-455495D8733E}
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540} = {9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}
|
||||
{9A037A69-D1DF-4505-AB2A-6CB3641C476E} = {9A037A69-D1DF-4505-AB2A-6CB3641C476E}
|
||||
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD} = {617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}
|
||||
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1} = {EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}
|
||||
{BC52A07C-A797-423D-8C4F-8678805BBB36} = {BC52A07C-A797-423D-8C4F-8678805BBB36}
|
||||
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B} = {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}
|
||||
{818753F2-DBB9-4D3B-898A-A604309BE470} = {818753F2-DBB9-4D3B-898A-A604309BE470}
|
||||
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B} = {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}
|
||||
{BC52A07C-A797-423D-8C4F-8678805BBB36} = {BC52A07C-A797-423D-8C4F-8678805BBB36}
|
||||
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1} = {EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}
|
||||
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD} = {617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}
|
||||
{9A037A69-D1DF-4505-AB2A-6CB3641C476E} = {9A037A69-D1DF-4505-AB2A-6CB3641C476E}
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540} = {9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}
|
||||
{40A69F40-063E-43FD-8543-455495D8733E} = {40A69F40-063E-43FD-8543-455495D8733E}
|
||||
{0588563C-F05C-428C-B21A-DD74756628B3} = {0588563C-F05C-428C-B21A-DD74756628B3}
|
||||
{DF861D33-9BC1-418C-82B1-581F590FE169} = {DF861D33-9BC1-418C-82B1-581F590FE169}
|
||||
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239} = {764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}
|
||||
{C739151F-5384-41DF-A1A6-F089E2C1AD56} = {C739151F-5384-41DF-A1A6-F089E2C1AD56}
|
||||
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7} = {43A0E60E-5C4A-4C09-A29B-7683F503BBD7}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "agg2d", "..\..\DesktopEditor\agg-2.4\agg_vs2005.vcproj", "{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cximage", "..\..\DesktopEditor\cximage\CxImage\cximage_vs2005.vcproj", "{BC52A07C-A797-423D-8C4F-8678805BBB36}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{818753F2-DBB9-4D3B-898A-A604309BE470} = {818753F2-DBB9-4D3B-898A-A604309BE470}
|
||||
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D} = {FFDA5DA1-BB65-4695-B678-BE59B4A1355D}
|
||||
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1} = {EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}
|
||||
{9A037A69-D1DF-4505-AB2A-6CB3641C476E} = {9A037A69-D1DF-4505-AB2A-6CB3641C476E}
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540} = {9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}
|
||||
{40A69F40-063E-43FD-8543-455495D8733E} = {40A69F40-063E-43FD-8543-455495D8733E}
|
||||
{0588563C-F05C-428C-B21A-DD74756628B3} = {0588563C-F05C-428C-B21A-DD74756628B3}
|
||||
{DF861D33-9BC1-418C-82B1-581F590FE169} = {DF861D33-9BC1-418C-82B1-581F590FE169}
|
||||
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239} = {764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}
|
||||
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7} = {43A0E60E-5C4A-4C09-A29B-7683F503BBD7}
|
||||
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239} = {764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}
|
||||
{DF861D33-9BC1-418C-82B1-581F590FE169} = {DF861D33-9BC1-418C-82B1-581F590FE169}
|
||||
{0588563C-F05C-428C-B21A-DD74756628B3} = {0588563C-F05C-428C-B21A-DD74756628B3}
|
||||
{40A69F40-063E-43FD-8543-455495D8733E} = {40A69F40-063E-43FD-8543-455495D8733E}
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540} = {9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}
|
||||
{9A037A69-D1DF-4505-AB2A-6CB3641C476E} = {9A037A69-D1DF-4505-AB2A-6CB3641C476E}
|
||||
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1} = {EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}
|
||||
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D} = {FFDA5DA1-BB65-4695-B678-BE59B4A1355D}
|
||||
{818753F2-DBB9-4D3B-898A-A604309BE470} = {818753F2-DBB9-4D3B-898A-A604309BE470}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jpeg", "..\..\DesktopEditor\cximage\jpeg\Jpeg_vs2005.vcproj", "{818753F2-DBB9-4D3B-898A-A604309BE470}"
|
||||
@ -69,12 +69,12 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libpsd", "..\..\DesktopEdit
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PPTFormatLib", "..\PPTFormatLib\Win32\PPTFormatLib.vcproj", "{7B27E40E-F70A-4A74-A77C-0944D7931D15}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{36636678-AE25-4BE6-9A34-2561D1BCF302} = {36636678-AE25-4BE6-9A34-2561D1BCF302}
|
||||
{A100103A-353E-45E8-A9B8-90B87CC5C0B0} = {A100103A-353E-45E8-A9B8-90B87CC5C0B0}
|
||||
{C739151F-5384-41DF-A1A6-F089E2C1AD56} = {C739151F-5384-41DF-A1A6-F089E2C1AD56}
|
||||
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2} = {37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540} = {9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0} = {21663823-DE45-479B-91D0-B4FEF4916EF0}
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540} = {9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}
|
||||
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2} = {37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}
|
||||
{C739151F-5384-41DF-A1A6-F089E2C1AD56} = {C739151F-5384-41DF-A1A6-F089E2C1AD56}
|
||||
{A100103A-353E-45E8-A9B8-90B87CC5C0B0} = {A100103A-353E-45E8-A9B8-90B87CC5C0B0}
|
||||
{36636678-AE25-4BE6-9A34-2561D1BCF302} = {36636678-AE25-4BE6-9A34-2561D1BCF302}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jbig", "..\..\DesktopEditor\cximage\jbig\jbig_vs2005.vcproj", "{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}"
|
||||
@ -86,19 +86,32 @@ EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PptFormatTest", "PptFormatTest.vcproj", "{0F49D5D1-A8D3-4F97-8BC1-E2F65BB00C10}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{7B27E40E-F70A-4A74-A77C-0944D7931D15} = {7B27E40E-F70A-4A74-A77C-0944D7931D15}
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0} = {21663823-DE45-479B-91D0-B4FEF4916EF0}
|
||||
{F8274B05-168E-4D6E-B843-AA7510725363} = {F8274B05-168E-4D6E-B843-AA7510725363}
|
||||
{36636678-AE25-4BE6-9A34-2561D1BCF302} = {36636678-AE25-4BE6-9A34-2561D1BCF302}
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540} = {9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF} = {3423EC9A-52E4-4A4D-9753-EDEBC38785EF}
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C} = {C27E9A9F-3A17-4482-9C5F-BF15C01E747C}
|
||||
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2} = {37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540} = {9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}
|
||||
{36636678-AE25-4BE6-9A34-2561D1BCF302} = {36636678-AE25-4BE6-9A34-2561D1BCF302}
|
||||
{F8274B05-168E-4D6E-B843-AA7510725363} = {F8274B05-168E-4D6E-B843-AA7510725363}
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0} = {21663823-DE45-479B-91D0-B4FEF4916EF0}
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D} = {77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libxml2", "..\..\DesktopEditor\xml\build\vs2005\libxml2.vcproj", "{21663823-DE45-479B-91D0-B4FEF4916EF0}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OfficeFileCrypt", "..\..\OfficeCryptReader\win32\ECMACryptReader.vcproj", "{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "XlsFormat", "..\..\ASCOfficeXlsFile2\source\win32\XlsFormat.vcproj", "{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cryptlib", "..\..\Common\3dParty\cryptopp\cryptlib.vcproj", "{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Win32 = Debug|Win32
|
||||
Debug|x64 = Debug|x64
|
||||
DLL-Import Debug|Win32 = DLL-Import Debug|Win32
|
||||
DLL-Import Debug|x64 = DLL-Import Debug|x64
|
||||
DLL-Import Release|Win32 = DLL-Import Release|Win32
|
||||
DLL-Import Release|x64 = DLL-Import Release|x64
|
||||
Release|Win32 = Release|Win32
|
||||
Release|x64 = Release|x64
|
||||
ReleaseASC|Win32 = ReleaseASC|Win32
|
||||
@ -115,6 +128,14 @@ Global
|
||||
{36636678-AE25-4BE6-9A34-2561D1BCF302}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{36636678-AE25-4BE6-9A34-2561D1BCF302}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{36636678-AE25-4BE6-9A34-2561D1BCF302}.Debug|x64.Build.0 = Debug|x64
|
||||
{36636678-AE25-4BE6-9A34-2561D1BCF302}.DLL-Import Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{36636678-AE25-4BE6-9A34-2561D1BCF302}.DLL-Import Debug|Win32.Build.0 = Debug|Win32
|
||||
{36636678-AE25-4BE6-9A34-2561D1BCF302}.DLL-Import Debug|x64.ActiveCfg = Debug|x64
|
||||
{36636678-AE25-4BE6-9A34-2561D1BCF302}.DLL-Import Debug|x64.Build.0 = Debug|x64
|
||||
{36636678-AE25-4BE6-9A34-2561D1BCF302}.DLL-Import Release|Win32.ActiveCfg = Release|Win32
|
||||
{36636678-AE25-4BE6-9A34-2561D1BCF302}.DLL-Import Release|Win32.Build.0 = Release|Win32
|
||||
{36636678-AE25-4BE6-9A34-2561D1BCF302}.DLL-Import Release|x64.ActiveCfg = Release|x64
|
||||
{36636678-AE25-4BE6-9A34-2561D1BCF302}.DLL-Import Release|x64.Build.0 = Release|x64
|
||||
{36636678-AE25-4BE6-9A34-2561D1BCF302}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{36636678-AE25-4BE6-9A34-2561D1BCF302}.Release|Win32.Build.0 = Release|Win32
|
||||
{36636678-AE25-4BE6-9A34-2561D1BCF302}.Release|x64.ActiveCfg = Release|x64
|
||||
@ -137,6 +158,14 @@ Global
|
||||
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.Debug|x64.Build.0 = Debug|x64
|
||||
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.DLL-Import Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.DLL-Import Debug|Win32.Build.0 = Debug|Win32
|
||||
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.DLL-Import Debug|x64.ActiveCfg = Debug|x64
|
||||
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.DLL-Import Debug|x64.Build.0 = Debug|x64
|
||||
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.DLL-Import Release|Win32.ActiveCfg = Release|Win32
|
||||
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.DLL-Import Release|Win32.Build.0 = Release|Win32
|
||||
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.DLL-Import Release|x64.ActiveCfg = Release|x64
|
||||
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.DLL-Import Release|x64.Build.0 = Release|x64
|
||||
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.Release|Win32.Build.0 = Release|Win32
|
||||
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.Release|x64.ActiveCfg = Release|x64
|
||||
@ -159,6 +188,14 @@ Global
|
||||
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.Debug|x64.Build.0 = Debug|x64
|
||||
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.DLL-Import Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.DLL-Import Debug|Win32.Build.0 = Debug|Win32
|
||||
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.DLL-Import Debug|x64.ActiveCfg = Debug|x64
|
||||
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.DLL-Import Debug|x64.Build.0 = Debug|x64
|
||||
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.DLL-Import Release|Win32.ActiveCfg = Release|Win32
|
||||
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.DLL-Import Release|Win32.Build.0 = Release|Win32
|
||||
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.DLL-Import Release|x64.ActiveCfg = Release|x64
|
||||
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.DLL-Import Release|x64.Build.0 = Release|x64
|
||||
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.Release|Win32.Build.0 = Release|Win32
|
||||
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.Release|x64.ActiveCfg = Release|x64
|
||||
@ -181,6 +218,14 @@ Global
|
||||
{BC52A07C-A797-423D-8C4F-8678805BBB36}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{BC52A07C-A797-423D-8C4F-8678805BBB36}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{BC52A07C-A797-423D-8C4F-8678805BBB36}.Debug|x64.Build.0 = Debug|x64
|
||||
{BC52A07C-A797-423D-8C4F-8678805BBB36}.DLL-Import Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{BC52A07C-A797-423D-8C4F-8678805BBB36}.DLL-Import Debug|Win32.Build.0 = Debug|Win32
|
||||
{BC52A07C-A797-423D-8C4F-8678805BBB36}.DLL-Import Debug|x64.ActiveCfg = Debug|x64
|
||||
{BC52A07C-A797-423D-8C4F-8678805BBB36}.DLL-Import Debug|x64.Build.0 = Debug|x64
|
||||
{BC52A07C-A797-423D-8C4F-8678805BBB36}.DLL-Import Release|Win32.ActiveCfg = Release|Win32
|
||||
{BC52A07C-A797-423D-8C4F-8678805BBB36}.DLL-Import Release|Win32.Build.0 = Release|Win32
|
||||
{BC52A07C-A797-423D-8C4F-8678805BBB36}.DLL-Import Release|x64.ActiveCfg = Release|x64
|
||||
{BC52A07C-A797-423D-8C4F-8678805BBB36}.DLL-Import Release|x64.Build.0 = Release|x64
|
||||
{BC52A07C-A797-423D-8C4F-8678805BBB36}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{BC52A07C-A797-423D-8C4F-8678805BBB36}.Release|Win32.Build.0 = Release|Win32
|
||||
{BC52A07C-A797-423D-8C4F-8678805BBB36}.Release|x64.ActiveCfg = Release|x64
|
||||
@ -203,6 +248,14 @@ Global
|
||||
{818753F2-DBB9-4D3B-898A-A604309BE470}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{818753F2-DBB9-4D3B-898A-A604309BE470}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{818753F2-DBB9-4D3B-898A-A604309BE470}.Debug|x64.Build.0 = Debug|x64
|
||||
{818753F2-DBB9-4D3B-898A-A604309BE470}.DLL-Import Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{818753F2-DBB9-4D3B-898A-A604309BE470}.DLL-Import Debug|Win32.Build.0 = Debug|Win32
|
||||
{818753F2-DBB9-4D3B-898A-A604309BE470}.DLL-Import Debug|x64.ActiveCfg = Debug|x64
|
||||
{818753F2-DBB9-4D3B-898A-A604309BE470}.DLL-Import Debug|x64.Build.0 = Debug|x64
|
||||
{818753F2-DBB9-4D3B-898A-A604309BE470}.DLL-Import Release|Win32.ActiveCfg = Release|Win32
|
||||
{818753F2-DBB9-4D3B-898A-A604309BE470}.DLL-Import Release|Win32.Build.0 = Release|Win32
|
||||
{818753F2-DBB9-4D3B-898A-A604309BE470}.DLL-Import Release|x64.ActiveCfg = Release|x64
|
||||
{818753F2-DBB9-4D3B-898A-A604309BE470}.DLL-Import Release|x64.Build.0 = Release|x64
|
||||
{818753F2-DBB9-4D3B-898A-A604309BE470}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{818753F2-DBB9-4D3B-898A-A604309BE470}.Release|Win32.Build.0 = Release|Win32
|
||||
{818753F2-DBB9-4D3B-898A-A604309BE470}.Release|x64.ActiveCfg = Release|x64
|
||||
@ -225,6 +278,14 @@ Global
|
||||
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.Debug|x64.Build.0 = Debug|x64
|
||||
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.DLL-Import Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.DLL-Import Debug|Win32.Build.0 = Debug|Win32
|
||||
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.DLL-Import Debug|x64.ActiveCfg = Debug|x64
|
||||
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.DLL-Import Debug|x64.Build.0 = Debug|x64
|
||||
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.DLL-Import Release|Win32.ActiveCfg = Release|Win32
|
||||
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.DLL-Import Release|Win32.Build.0 = Release|Win32
|
||||
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.DLL-Import Release|x64.ActiveCfg = Release|x64
|
||||
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.DLL-Import Release|x64.Build.0 = Release|x64
|
||||
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.Release|Win32.Build.0 = Release|Win32
|
||||
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.Release|x64.ActiveCfg = Release|x64
|
||||
@ -248,6 +309,14 @@ Global
|
||||
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.Debug|x64.Build.0 = Debug|x64
|
||||
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.DLL-Import Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.DLL-Import Debug|Win32.Build.0 = Debug|Win32
|
||||
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.DLL-Import Debug|x64.ActiveCfg = Debug|x64
|
||||
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.DLL-Import Debug|x64.Build.0 = Debug|x64
|
||||
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.DLL-Import Release|Win32.ActiveCfg = Release|Win32
|
||||
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.DLL-Import Release|Win32.Build.0 = Release|Win32
|
||||
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.DLL-Import Release|x64.ActiveCfg = Release|x64
|
||||
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.DLL-Import Release|x64.Build.0 = Release|x64
|
||||
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.Release|Win32.Build.0 = Release|Win32
|
||||
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.Release|x64.ActiveCfg = Release|x64
|
||||
@ -270,6 +339,14 @@ Global
|
||||
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug|x64.Build.0 = Debug|x64
|
||||
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.DLL-Import Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.DLL-Import Debug|Win32.Build.0 = Debug|Win32
|
||||
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.DLL-Import Debug|x64.ActiveCfg = Debug|x64
|
||||
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.DLL-Import Debug|x64.Build.0 = Debug|x64
|
||||
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.DLL-Import Release|Win32.ActiveCfg = Release|Win32
|
||||
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.DLL-Import Release|Win32.Build.0 = Release|Win32
|
||||
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.DLL-Import Release|x64.ActiveCfg = Release|x64
|
||||
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.DLL-Import Release|x64.Build.0 = Release|x64
|
||||
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release|Win32.Build.0 = Release|Win32
|
||||
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release|x64.ActiveCfg = Release|x64
|
||||
@ -292,6 +369,14 @@ Global
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.Debug|x64.Build.0 = Debug|x64
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.DLL-Import Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.DLL-Import Debug|Win32.Build.0 = Debug|Win32
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.DLL-Import Debug|x64.ActiveCfg = Debug|x64
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.DLL-Import Debug|x64.Build.0 = Debug|x64
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.DLL-Import Release|Win32.ActiveCfg = Release|Win32
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.DLL-Import Release|Win32.Build.0 = Release|Win32
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.DLL-Import Release|x64.ActiveCfg = Release|x64
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.DLL-Import Release|x64.Build.0 = Release|x64
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.Release|Win32.Build.0 = Release|Win32
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.Release|x64.ActiveCfg = Release|x64
|
||||
@ -314,6 +399,14 @@ Global
|
||||
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.Debug|x64.Build.0 = Debug|x64
|
||||
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.DLL-Import Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.DLL-Import Debug|Win32.Build.0 = Debug|Win32
|
||||
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.DLL-Import Debug|x64.ActiveCfg = Debug|x64
|
||||
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.DLL-Import Debug|x64.Build.0 = Debug|x64
|
||||
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.DLL-Import Release|Win32.ActiveCfg = Release|Win32
|
||||
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.DLL-Import Release|Win32.Build.0 = Release|Win32
|
||||
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.DLL-Import Release|x64.ActiveCfg = Release|x64
|
||||
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.DLL-Import Release|x64.Build.0 = Release|x64
|
||||
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.Release|Win32.Build.0 = Release|Win32
|
||||
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.Release|x64.ActiveCfg = Release|x64
|
||||
@ -336,6 +429,14 @@ Global
|
||||
{DF861D33-9BC1-418C-82B1-581F590FE169}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{DF861D33-9BC1-418C-82B1-581F590FE169}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{DF861D33-9BC1-418C-82B1-581F590FE169}.Debug|x64.Build.0 = Debug|x64
|
||||
{DF861D33-9BC1-418C-82B1-581F590FE169}.DLL-Import Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{DF861D33-9BC1-418C-82B1-581F590FE169}.DLL-Import Debug|Win32.Build.0 = Debug|Win32
|
||||
{DF861D33-9BC1-418C-82B1-581F590FE169}.DLL-Import Debug|x64.ActiveCfg = Debug|x64
|
||||
{DF861D33-9BC1-418C-82B1-581F590FE169}.DLL-Import Debug|x64.Build.0 = Debug|x64
|
||||
{DF861D33-9BC1-418C-82B1-581F590FE169}.DLL-Import Release|Win32.ActiveCfg = Release|Win32
|
||||
{DF861D33-9BC1-418C-82B1-581F590FE169}.DLL-Import Release|Win32.Build.0 = Release|Win32
|
||||
{DF861D33-9BC1-418C-82B1-581F590FE169}.DLL-Import Release|x64.ActiveCfg = Release|x64
|
||||
{DF861D33-9BC1-418C-82B1-581F590FE169}.DLL-Import Release|x64.Build.0 = Release|x64
|
||||
{DF861D33-9BC1-418C-82B1-581F590FE169}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{DF861D33-9BC1-418C-82B1-581F590FE169}.Release|Win32.Build.0 = Release|Win32
|
||||
{DF861D33-9BC1-418C-82B1-581F590FE169}.Release|x64.ActiveCfg = Release|x64
|
||||
@ -358,6 +459,14 @@ Global
|
||||
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.Debug|x64.Build.0 = Debug|x64
|
||||
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.DLL-Import Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.DLL-Import Debug|Win32.Build.0 = Debug|Win32
|
||||
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.DLL-Import Debug|x64.ActiveCfg = Debug|x64
|
||||
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.DLL-Import Debug|x64.Build.0 = Debug|x64
|
||||
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.DLL-Import Release|Win32.ActiveCfg = Release|Win32
|
||||
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.DLL-Import Release|Win32.Build.0 = Release|Win32
|
||||
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.DLL-Import Release|x64.ActiveCfg = Release|x64
|
||||
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.DLL-Import Release|x64.Build.0 = Release|x64
|
||||
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.Release|Win32.Build.0 = Release|Win32
|
||||
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.Release|x64.ActiveCfg = Release|x64
|
||||
@ -380,6 +489,14 @@ Global
|
||||
{40A69F40-063E-43FD-8543-455495D8733E}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{40A69F40-063E-43FD-8543-455495D8733E}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{40A69F40-063E-43FD-8543-455495D8733E}.Debug|x64.Build.0 = Debug|x64
|
||||
{40A69F40-063E-43FD-8543-455495D8733E}.DLL-Import Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{40A69F40-063E-43FD-8543-455495D8733E}.DLL-Import Debug|Win32.Build.0 = Debug|Win32
|
||||
{40A69F40-063E-43FD-8543-455495D8733E}.DLL-Import Debug|x64.ActiveCfg = Debug|x64
|
||||
{40A69F40-063E-43FD-8543-455495D8733E}.DLL-Import Debug|x64.Build.0 = Debug|x64
|
||||
{40A69F40-063E-43FD-8543-455495D8733E}.DLL-Import Release|Win32.ActiveCfg = Release|Win32
|
||||
{40A69F40-063E-43FD-8543-455495D8733E}.DLL-Import Release|Win32.Build.0 = Release|Win32
|
||||
{40A69F40-063E-43FD-8543-455495D8733E}.DLL-Import Release|x64.ActiveCfg = Release|x64
|
||||
{40A69F40-063E-43FD-8543-455495D8733E}.DLL-Import Release|x64.Build.0 = Release|x64
|
||||
{40A69F40-063E-43FD-8543-455495D8733E}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{40A69F40-063E-43FD-8543-455495D8733E}.Release|Win32.Build.0 = Release|Win32
|
||||
{40A69F40-063E-43FD-8543-455495D8733E}.Release|x64.ActiveCfg = Release|x64
|
||||
@ -402,6 +519,14 @@ Global
|
||||
{0588563C-F05C-428C-B21A-DD74756628B3}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{0588563C-F05C-428C-B21A-DD74756628B3}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{0588563C-F05C-428C-B21A-DD74756628B3}.Debug|x64.Build.0 = Debug|x64
|
||||
{0588563C-F05C-428C-B21A-DD74756628B3}.DLL-Import Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{0588563C-F05C-428C-B21A-DD74756628B3}.DLL-Import Debug|Win32.Build.0 = Debug|Win32
|
||||
{0588563C-F05C-428C-B21A-DD74756628B3}.DLL-Import Debug|x64.ActiveCfg = Debug|x64
|
||||
{0588563C-F05C-428C-B21A-DD74756628B3}.DLL-Import Debug|x64.Build.0 = Debug|x64
|
||||
{0588563C-F05C-428C-B21A-DD74756628B3}.DLL-Import Release|Win32.ActiveCfg = Release|Win32
|
||||
{0588563C-F05C-428C-B21A-DD74756628B3}.DLL-Import Release|Win32.Build.0 = Release|Win32
|
||||
{0588563C-F05C-428C-B21A-DD74756628B3}.DLL-Import Release|x64.ActiveCfg = Release|x64
|
||||
{0588563C-F05C-428C-B21A-DD74756628B3}.DLL-Import Release|x64.Build.0 = Release|x64
|
||||
{0588563C-F05C-428C-B21A-DD74756628B3}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{0588563C-F05C-428C-B21A-DD74756628B3}.Release|Win32.Build.0 = Release|Win32
|
||||
{0588563C-F05C-428C-B21A-DD74756628B3}.Release|x64.ActiveCfg = Release|x64
|
||||
@ -424,6 +549,14 @@ Global
|
||||
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.Debug|x64.Build.0 = Debug|x64
|
||||
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.DLL-Import Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.DLL-Import Debug|Win32.Build.0 = Debug|Win32
|
||||
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.DLL-Import Debug|x64.ActiveCfg = Debug|x64
|
||||
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.DLL-Import Debug|x64.Build.0 = Debug|x64
|
||||
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.DLL-Import Release|Win32.ActiveCfg = Release|Win32
|
||||
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.DLL-Import Release|Win32.Build.0 = Release|Win32
|
||||
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.DLL-Import Release|x64.ActiveCfg = Release|x64
|
||||
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.DLL-Import Release|x64.Build.0 = Release|x64
|
||||
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.Release|Win32.Build.0 = Release|Win32
|
||||
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.Release|x64.ActiveCfg = Release|x64
|
||||
@ -446,6 +579,14 @@ Global
|
||||
{7B27E40E-F70A-4A74-A77C-0944D7931D15}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{7B27E40E-F70A-4A74-A77C-0944D7931D15}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{7B27E40E-F70A-4A74-A77C-0944D7931D15}.Debug|x64.Build.0 = Debug|x64
|
||||
{7B27E40E-F70A-4A74-A77C-0944D7931D15}.DLL-Import Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{7B27E40E-F70A-4A74-A77C-0944D7931D15}.DLL-Import Debug|Win32.Build.0 = Debug|Win32
|
||||
{7B27E40E-F70A-4A74-A77C-0944D7931D15}.DLL-Import Debug|x64.ActiveCfg = Debug|x64
|
||||
{7B27E40E-F70A-4A74-A77C-0944D7931D15}.DLL-Import Debug|x64.Build.0 = Debug|x64
|
||||
{7B27E40E-F70A-4A74-A77C-0944D7931D15}.DLL-Import Release|Win32.ActiveCfg = Release|Win32
|
||||
{7B27E40E-F70A-4A74-A77C-0944D7931D15}.DLL-Import Release|Win32.Build.0 = Release|Win32
|
||||
{7B27E40E-F70A-4A74-A77C-0944D7931D15}.DLL-Import Release|x64.ActiveCfg = Release|x64
|
||||
{7B27E40E-F70A-4A74-A77C-0944D7931D15}.DLL-Import Release|x64.Build.0 = Release|x64
|
||||
{7B27E40E-F70A-4A74-A77C-0944D7931D15}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{7B27E40E-F70A-4A74-A77C-0944D7931D15}.Release|Win32.Build.0 = Release|Win32
|
||||
{7B27E40E-F70A-4A74-A77C-0944D7931D15}.Release|x64.ActiveCfg = Release|x64
|
||||
@ -468,6 +609,14 @@ Global
|
||||
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.Debug|x64.Build.0 = Debug|x64
|
||||
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.DLL-Import Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.DLL-Import Debug|Win32.Build.0 = Debug|Win32
|
||||
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.DLL-Import Debug|x64.ActiveCfg = Debug|x64
|
||||
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.DLL-Import Debug|x64.Build.0 = Debug|x64
|
||||
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.DLL-Import Release|Win32.ActiveCfg = Release|Win32
|
||||
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.DLL-Import Release|Win32.Build.0 = Release|Win32
|
||||
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.DLL-Import Release|x64.ActiveCfg = Release|x64
|
||||
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.DLL-Import Release|x64.Build.0 = Release|x64
|
||||
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.Release|Win32.Build.0 = Release|Win32
|
||||
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.Release|x64.ActiveCfg = Release|x64
|
||||
@ -490,6 +639,14 @@ Global
|
||||
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.Debug|x64.Build.0 = Debug|x64
|
||||
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.DLL-Import Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.DLL-Import Debug|Win32.Build.0 = Debug|Win32
|
||||
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.DLL-Import Debug|x64.ActiveCfg = Debug|x64
|
||||
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.DLL-Import Debug|x64.Build.0 = Debug|x64
|
||||
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.DLL-Import Release|Win32.ActiveCfg = Release|Win32
|
||||
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.DLL-Import Release|Win32.Build.0 = Release|Win32
|
||||
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.DLL-Import Release|x64.ActiveCfg = Release|x64
|
||||
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.DLL-Import Release|x64.Build.0 = Release|x64
|
||||
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.Release|Win32.Build.0 = Release|Win32
|
||||
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.Release|x64.ActiveCfg = Release|x64
|
||||
@ -512,6 +669,14 @@ Global
|
||||
{F8274B05-168E-4D6E-B843-AA7510725363}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{F8274B05-168E-4D6E-B843-AA7510725363}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{F8274B05-168E-4D6E-B843-AA7510725363}.Debug|x64.Build.0 = Debug|x64
|
||||
{F8274B05-168E-4D6E-B843-AA7510725363}.DLL-Import Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{F8274B05-168E-4D6E-B843-AA7510725363}.DLL-Import Debug|Win32.Build.0 = Debug|Win32
|
||||
{F8274B05-168E-4D6E-B843-AA7510725363}.DLL-Import Debug|x64.ActiveCfg = Debug|x64
|
||||
{F8274B05-168E-4D6E-B843-AA7510725363}.DLL-Import Debug|x64.Build.0 = Debug|x64
|
||||
{F8274B05-168E-4D6E-B843-AA7510725363}.DLL-Import Release|Win32.ActiveCfg = Release|Win32
|
||||
{F8274B05-168E-4D6E-B843-AA7510725363}.DLL-Import Release|Win32.Build.0 = Release|Win32
|
||||
{F8274B05-168E-4D6E-B843-AA7510725363}.DLL-Import Release|x64.ActiveCfg = Release|x64
|
||||
{F8274B05-168E-4D6E-B843-AA7510725363}.DLL-Import Release|x64.Build.0 = Release|x64
|
||||
{F8274B05-168E-4D6E-B843-AA7510725363}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{F8274B05-168E-4D6E-B843-AA7510725363}.Release|Win32.Build.0 = Release|Win32
|
||||
{F8274B05-168E-4D6E-B843-AA7510725363}.Release|x64.ActiveCfg = Release|x64
|
||||
@ -534,6 +699,14 @@ Global
|
||||
{0F49D5D1-A8D3-4F97-8BC1-E2F65BB00C10}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{0F49D5D1-A8D3-4F97-8BC1-E2F65BB00C10}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{0F49D5D1-A8D3-4F97-8BC1-E2F65BB00C10}.Debug|x64.Build.0 = Debug|x64
|
||||
{0F49D5D1-A8D3-4F97-8BC1-E2F65BB00C10}.DLL-Import Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{0F49D5D1-A8D3-4F97-8BC1-E2F65BB00C10}.DLL-Import Debug|Win32.Build.0 = Debug|Win32
|
||||
{0F49D5D1-A8D3-4F97-8BC1-E2F65BB00C10}.DLL-Import Debug|x64.ActiveCfg = Debug|x64
|
||||
{0F49D5D1-A8D3-4F97-8BC1-E2F65BB00C10}.DLL-Import Debug|x64.Build.0 = Debug|x64
|
||||
{0F49D5D1-A8D3-4F97-8BC1-E2F65BB00C10}.DLL-Import Release|Win32.ActiveCfg = Release|Win32
|
||||
{0F49D5D1-A8D3-4F97-8BC1-E2F65BB00C10}.DLL-Import Release|Win32.Build.0 = Release|Win32
|
||||
{0F49D5D1-A8D3-4F97-8BC1-E2F65BB00C10}.DLL-Import Release|x64.ActiveCfg = Release|x64
|
||||
{0F49D5D1-A8D3-4F97-8BC1-E2F65BB00C10}.DLL-Import Release|x64.Build.0 = Release|x64
|
||||
{0F49D5D1-A8D3-4F97-8BC1-E2F65BB00C10}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{0F49D5D1-A8D3-4F97-8BC1-E2F65BB00C10}.Release|Win32.Build.0 = Release|Win32
|
||||
{0F49D5D1-A8D3-4F97-8BC1-E2F65BB00C10}.Release|x64.ActiveCfg = Release|x64
|
||||
@ -556,6 +729,14 @@ Global
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0}.Debug|x64.Build.0 = Debug|x64
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0}.DLL-Import Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0}.DLL-Import Debug|Win32.Build.0 = Debug|Win32
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0}.DLL-Import Debug|x64.ActiveCfg = Debug|x64
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0}.DLL-Import Debug|x64.Build.0 = Debug|x64
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0}.DLL-Import Release|Win32.ActiveCfg = Release|Win32
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0}.DLL-Import Release|Win32.Build.0 = Release|Win32
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0}.DLL-Import Release|x64.ActiveCfg = Release|x64
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0}.DLL-Import Release|x64.Build.0 = Release|x64
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0}.Release|Win32.Build.0 = Release|Win32
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0}.Release|x64.ActiveCfg = Release|x64
|
||||
@ -574,6 +755,96 @@ Global
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0}.Unicode Release|Win32.Build.0 = Release|Win32
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0}.Unicode Release|x64.ActiveCfg = Release|x64
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0}.Unicode Release|x64.Build.0 = Release|x64
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.Debug|x64.Build.0 = Debug|x64
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.DLL-Import Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.DLL-Import Debug|Win32.Build.0 = Debug|Win32
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.DLL-Import Debug|x64.ActiveCfg = Debug|x64
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.DLL-Import Debug|x64.Build.0 = Debug|x64
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.DLL-Import Release|Win32.ActiveCfg = Release|Win32
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.DLL-Import Release|Win32.Build.0 = Release|Win32
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.DLL-Import Release|x64.ActiveCfg = Release|x64
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.DLL-Import Release|x64.Build.0 = Release|x64
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.Release|Win32.Build.0 = Release|Win32
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.Release|x64.ActiveCfg = Release|x64
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.Release|x64.Build.0 = Release|x64
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.ReleaseASC|Win32.ActiveCfg = Release|x64
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.ReleaseASC|x64.ActiveCfg = Release|x64
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.ReleaseASC|x64.Build.0 = Release|x64
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.ReleaseOpenSource|Win32.ActiveCfg = Release|x64
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.ReleaseOpenSource|x64.ActiveCfg = Release|x64
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.ReleaseOpenSource|x64.Build.0 = Release|x64
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.Unicode Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.Unicode Debug|Win32.Build.0 = Debug|Win32
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.Unicode Debug|x64.ActiveCfg = Debug|x64
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.Unicode Debug|x64.Build.0 = Debug|x64
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.Unicode Release|Win32.ActiveCfg = Release|Win32
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.Unicode Release|Win32.Build.0 = Release|Win32
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.Unicode Release|x64.ActiveCfg = Release|x64
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.Unicode Release|x64.Build.0 = Release|x64
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.Debug|x64.Build.0 = Debug|x64
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.DLL-Import Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.DLL-Import Debug|Win32.Build.0 = Debug|Win32
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.DLL-Import Debug|x64.ActiveCfg = Debug|x64
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.DLL-Import Debug|x64.Build.0 = Debug|x64
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.DLL-Import Release|Win32.ActiveCfg = Release|Win32
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.DLL-Import Release|Win32.Build.0 = Release|Win32
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.DLL-Import Release|x64.ActiveCfg = Release|x64
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.DLL-Import Release|x64.Build.0 = Release|x64
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.Release|Win32.Build.0 = Release|Win32
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.Release|x64.ActiveCfg = Release|x64
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.Release|x64.Build.0 = Release|x64
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.ReleaseASC|Win32.ActiveCfg = Release|x64
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.ReleaseASC|x64.ActiveCfg = Release|x64
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.ReleaseASC|x64.Build.0 = Release|x64
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.ReleaseOpenSource|Win32.ActiveCfg = Release|x64
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.ReleaseOpenSource|x64.ActiveCfg = Release|x64
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.ReleaseOpenSource|x64.Build.0 = Release|x64
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.Unicode Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.Unicode Debug|Win32.Build.0 = Debug|Win32
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.Unicode Debug|x64.ActiveCfg = Debug|x64
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.Unicode Debug|x64.Build.0 = Debug|x64
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.Unicode Release|Win32.ActiveCfg = Release|Win32
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.Unicode Release|Win32.Build.0 = Release|Win32
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.Unicode Release|x64.ActiveCfg = Release|x64
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.Unicode Release|x64.Build.0 = Release|x64
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Debug|x64.Build.0 = Debug|x64
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.DLL-Import Debug|Win32.ActiveCfg = DLL-Import Debug|Win32
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.DLL-Import Debug|Win32.Build.0 = DLL-Import Debug|Win32
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.DLL-Import Debug|x64.ActiveCfg = DLL-Import Debug|x64
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.DLL-Import Debug|x64.Build.0 = DLL-Import Debug|x64
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.DLL-Import Release|Win32.ActiveCfg = DLL-Import Release|Win32
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.DLL-Import Release|Win32.Build.0 = DLL-Import Release|Win32
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.DLL-Import Release|x64.ActiveCfg = DLL-Import Release|x64
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.DLL-Import Release|x64.Build.0 = DLL-Import Release|x64
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Release|Win32.Build.0 = Release|Win32
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Release|x64.ActiveCfg = Release|x64
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Release|x64.Build.0 = Release|x64
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.ReleaseASC|Win32.ActiveCfg = Release|x64
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.ReleaseASC|x64.ActiveCfg = Release|x64
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.ReleaseASC|x64.Build.0 = Release|x64
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.ReleaseOpenSource|Win32.ActiveCfg = Release|x64
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.ReleaseOpenSource|x64.ActiveCfg = Release|x64
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.ReleaseOpenSource|x64.Build.0 = Release|x64
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Unicode Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Unicode Debug|Win32.Build.0 = Debug|Win32
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Unicode Debug|x64.ActiveCfg = Debug|x64
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Unicode Debug|x64.Build.0 = Debug|x64
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Unicode Release|Win32.ActiveCfg = Release|Win32
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Unicode Release|Win32.Build.0 = Release|Win32
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Unicode Release|x64.ActiveCfg = Release|x64
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Unicode Release|x64.Build.0 = Release|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
||||
@ -35,7 +35,6 @@
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
// Logical representation of IMDATA record in BIFF5
|
||||
class IMDATA: public BiffRecordContinued
|
||||
{
|
||||
BIFF_RECORD_DEFINE_TYPE_INFO(IMDATA)
|
||||
@ -45,11 +44,10 @@ public:
|
||||
~IMDATA();
|
||||
|
||||
BaseObjectPtr clone();
|
||||
|
||||
|
||||
void readFields(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeIMDATA;
|
||||
static const ElementType type = typeIMDATA;
|
||||
|
||||
_UINT16 cf;
|
||||
_UINT16 env;
|
||||
|
||||
@ -36,8 +36,6 @@
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
// Logical representation of RealTimeData record in BIFF8
|
||||
class RealTimeData: public BiffRecordContinued
|
||||
{
|
||||
BIFF_RECORD_DEFINE_TYPE_INFO(RealTimeData)
|
||||
@ -47,12 +45,10 @@ public:
|
||||
~RealTimeData();
|
||||
|
||||
BaseObjectPtr clone();
|
||||
|
||||
|
||||
void readFields(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeRealTimeData;
|
||||
|
||||
static const ElementType type = typeRealTimeData;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -35,6 +35,19 @@
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
BiffStructurePtr XLUnicodeStringSegmentedSXADDL::clone()
|
||||
{
|
||||
return BiffStructurePtr(new XLUnicodeStringSegmentedSXADDL(*this));
|
||||
}
|
||||
void XLUnicodeStringSegmentedSXADDL::load(CFRecord& record)
|
||||
{
|
||||
unsigned short reserved;
|
||||
record >> cchTotal >> reserved;
|
||||
|
||||
record >> string;
|
||||
}
|
||||
//-----------------------------------------
|
||||
|
||||
SXAddl::SXAddl()
|
||||
{
|
||||
}
|
||||
@ -58,6 +71,10 @@ void SXAddl::readFields(CFRecord& record)
|
||||
record.skipNunBytes(record.getDataSize() - record.getRdPtr());
|
||||
}
|
||||
//-------------------------------------------------------------------------------------------------------
|
||||
BaseObjectPtr SXAddl_SXCCache_SXDId::clone()
|
||||
{
|
||||
return BaseObjectPtr(new SXAddl_SXCCache_SXDId(*this));
|
||||
}
|
||||
void SXAddl_SXCCache_SXDId::readFields(CFRecord& record)
|
||||
{
|
||||
m_SXAddlHdr.load(record);
|
||||
@ -65,7 +82,11 @@ void SXAddl_SXCCache_SXDId::readFields(CFRecord& record)
|
||||
short reserved;
|
||||
record >> idCache >> reserved;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
BaseObjectPtr SXAddl_SXCCache_SXDEnd::clone()
|
||||
{
|
||||
return BaseObjectPtr(new SXAddl_SXCCache_SXDEnd(*this));
|
||||
}
|
||||
void SXAddl_SXCCache_SXDEnd::readFields(CFRecord& record)
|
||||
{
|
||||
m_SXAddlHdr.load(record);
|
||||
@ -74,7 +95,26 @@ void SXAddl_SXCCache_SXDEnd::readFields(CFRecord& record)
|
||||
short reserved2;
|
||||
record >> reserved1 >> reserved2;
|
||||
}
|
||||
//----------------------------------------------------------------------------
|
||||
BaseObjectPtr Continue_SxaddlSxString::clone()
|
||||
{
|
||||
return BaseObjectPtr(new Continue_SxaddlSxString(*this));
|
||||
}
|
||||
|
||||
void Continue_SxaddlSxString::readFields(CFRecord& record)
|
||||
{
|
||||
m_SXAddlHdr.load(record);
|
||||
|
||||
int sz = record.getDataSize() - record.getRdPtr();
|
||||
|
||||
if (sz > 0)
|
||||
record >> stContinue;
|
||||
}
|
||||
//----------------------------------------------------------------------------
|
||||
BaseObjectPtr SXAddl_SXCCache_SXDVer10Info::clone()
|
||||
{
|
||||
return BaseObjectPtr(new SXAddl_SXCCache_SXDVer10Info(*this));
|
||||
}
|
||||
void SXAddl_SXCCache_SXDVer10Info::readFields(CFRecord& record)
|
||||
{
|
||||
m_SXAddlHdr.load(record);
|
||||
@ -90,6 +130,11 @@ void SXAddl_SXCCache_SXDVer10Info::readFields(CFRecord& record)
|
||||
|
||||
record >> reserved2;
|
||||
}
|
||||
//----------------------------------------------------------------------------
|
||||
BaseObjectPtr SXAddl_SXCCache_SXDInfo12::clone()
|
||||
{
|
||||
return BaseObjectPtr(new SXAddl_SXCCache_SXDInfo12(*this));
|
||||
}
|
||||
void SXAddl_SXCCache_SXDInfo12::readFields(CFRecord& record)
|
||||
{
|
||||
m_SXAddlHdr.load(record);
|
||||
@ -103,6 +148,11 @@ void SXAddl_SXCCache_SXDInfo12::readFields(CFRecord& record)
|
||||
fSrvSupportAttribDrill = GETBIT(flags, 1);
|
||||
fSrvSupportSubQuery = GETBIT(flags, 2);
|
||||
}
|
||||
//----------------------------------------------------------------------------
|
||||
BaseObjectPtr SXAddl_SXCCache_SXDVerSXMacro::clone()
|
||||
{
|
||||
return BaseObjectPtr(new SXAddl_SXCCache_SXDVerSXMacro(*this));
|
||||
}
|
||||
void SXAddl_SXCCache_SXDVerSXMacro::readFields(CFRecord& record)
|
||||
{
|
||||
m_SXAddlHdr.load(record);
|
||||
@ -112,6 +162,17 @@ void SXAddl_SXCCache_SXDVerSXMacro::readFields(CFRecord& record)
|
||||
|
||||
record >> dwVer >> reserved1 >> reserved2 >> reserved3;
|
||||
}
|
||||
//----------------------------------------------------------------------------
|
||||
BaseObjectPtr SXAddl_SXCView_SXDId::clone()
|
||||
{
|
||||
return BaseObjectPtr(new SXAddl_SXCView_SXDId(*this));
|
||||
}
|
||||
void SXAddl_SXCView_SXDId::readFields(CFRecord& record)
|
||||
{
|
||||
m_SXAddlHdr.load(record);
|
||||
|
||||
record >> stName;
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
|
||||
@ -32,12 +32,29 @@
|
||||
#pragma once
|
||||
|
||||
#include "BiffRecord.h"
|
||||
#include "../Biff_structures/BiffString.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
class XLUnicodeStringSegmentedSXADDL : public BiffStructure
|
||||
{
|
||||
BASE_STRUCTURE_DEFINE_CLASS_NAME(XLUnicodeStringSegmentedSXADDL)
|
||||
public:
|
||||
|
||||
XLUnicodeStringSegmentedSXADDL(){}
|
||||
~XLUnicodeStringSegmentedSXADDL(){}
|
||||
|
||||
BiffStructurePtr clone();
|
||||
|
||||
virtual void load(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeStringSegmentedSXADDL;
|
||||
|
||||
_UINT32 cchTotal;
|
||||
XLUnicodeString string;
|
||||
};
|
||||
|
||||
// Logical representation of SXAddl record in BIFF8
|
||||
class SXAddl: public BiffRecord
|
||||
{
|
||||
BIFF_RECORD_DEFINE_TYPE_INFO(SXAddl)
|
||||
@ -57,9 +74,8 @@ public:
|
||||
|
||||
SXAddl();
|
||||
~SXAddl();
|
||||
|
||||
BaseObjectPtr clone();
|
||||
|
||||
virtual BaseObjectPtr clone();
|
||||
virtual void readFields(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSXAddl;
|
||||
@ -68,8 +84,10 @@ public:
|
||||
class Continue_SxaddlSxString : public SXAddl
|
||||
{
|
||||
public:
|
||||
//virtual void readFields(CFRecord& record);
|
||||
|
||||
virtual void readFields(CFRecord& record);
|
||||
virtual BaseObjectPtr clone();
|
||||
|
||||
XLUnicodeStringSegmentedSXADDL stContinue;
|
||||
};
|
||||
class SXAddl_SXCAutoSort_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCAutoSort_SXDId : public SXAddl {};
|
||||
@ -77,12 +95,14 @@ class SXAddl_SXCCache_SXDEnd : public SXAddl
|
||||
{
|
||||
public:
|
||||
virtual void readFields(CFRecord& record);
|
||||
virtual BaseObjectPtr clone();
|
||||
};
|
||||
|
||||
class SXAddl_SXCCache_SXDId : public SXAddl
|
||||
{
|
||||
public:
|
||||
virtual void readFields(CFRecord& record);
|
||||
virtual BaseObjectPtr clone();
|
||||
|
||||
_UINT32 idCache;
|
||||
};
|
||||
@ -92,6 +112,7 @@ class SXAddl_SXCCache_SXDInfo12 : public SXAddl
|
||||
public:
|
||||
|
||||
virtual void readFields(CFRecord& record);
|
||||
virtual BaseObjectPtr clone();
|
||||
|
||||
bool fSheetData;
|
||||
bool fSrvSupportAttribDrill;
|
||||
@ -108,6 +129,7 @@ class SXAddl_SXCCache_SXDVer10Info : public SXAddl
|
||||
public:
|
||||
|
||||
virtual void readFields(CFRecord& record);
|
||||
virtual BaseObjectPtr clone();
|
||||
|
||||
_INT32 citmGhostMax;
|
||||
unsigned char bVerCacheLastRefresh;
|
||||
@ -119,8 +141,8 @@ public:
|
||||
class SXAddl_SXCCache_SXDVerSXMacro : public SXAddl
|
||||
{
|
||||
public:
|
||||
|
||||
virtual void readFields(CFRecord& record);
|
||||
virtual BaseObjectPtr clone();
|
||||
|
||||
unsigned char dwVer;
|
||||
};
|
||||
@ -134,11 +156,13 @@ class SXAddl_SXCCacheField_SXDIfdbMpMapCount: public SXAddl {};
|
||||
class SXAddl_SXCCacheField_SXDProperty : public SXAddl {};
|
||||
class SXAddl_SXCCacheField_SXDPropName : public SXAddl {};
|
||||
class SXAddl_SXCCacheField_SXDSxrmitmCount : public SXAddl {};
|
||||
|
||||
class SXAddl_SXCCacheItem_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCCacheItem_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCCacheItem_SXDItmMpMapCount : public SXAddl {};
|
||||
class SXAddl_SXCCacheItem_SXDItmMpropMap : public SXAddl {};
|
||||
class SXAddl_SXCCacheItem_SXDSxrmitmDisp : public SXAddl {};
|
||||
|
||||
class SXAddl_SXCField12_SXDAutoshow : public SXAddl {};
|
||||
class SXAddl_SXCField12_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCField12_SXDId : public SXAddl {};
|
||||
@ -146,16 +170,20 @@ class SXAddl_SXCField12_SXDISXTH : public SXAddl {};
|
||||
class SXAddl_SXCField12_SXDMemberCaption : public SXAddl {};
|
||||
class SXAddl_SXCField12_SXDVer12Info : public SXAddl {};
|
||||
class SXAddl_SXCField12_SXDVerUpdInv : public SXAddl {};
|
||||
|
||||
class SXAddl_SXCField_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCField_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCField_SXDVer10Info : public SXAddl {};
|
||||
|
||||
class SXAddl_SXCGroup_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCGroup_SXDGrpInfo : public SXAddl {};
|
||||
class SXAddl_SXCGroup_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCGroup_SXDMember : public SXAddl {};
|
||||
|
||||
class SXAddl_SXCGrpLevel_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCGrpLevel_SXDGrpLevelInfo : public SXAddl {};
|
||||
class SXAddl_SXCGrpLevel_SXDId : public SXAddl {};
|
||||
|
||||
class SXAddl_SXCHierarchy_SXDDisplayFolder : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDFilterMember : public SXAddl {};
|
||||
@ -175,13 +203,16 @@ class SXAddl_SXCHierarchy_SXDProperty : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDSXSetParentUnique : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDUserCaption : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDVerUpdInv : public SXAddl {};
|
||||
|
||||
class SXAddl_SXCQsi_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCQsi_SXDId : public SXAddl {};
|
||||
|
||||
class SXAddl_SXCQuery_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCQuery_SXDReconnCond : public SXAddl {};
|
||||
class SXAddl_SXCQuery_SXDSrcConnFile : public SXAddl {};
|
||||
class SXAddl_SXCQuery_SXDSrcDataFile : public SXAddl {};
|
||||
class SXAddl_SXCQuery_SXDXMLSource : public SXAddl {};
|
||||
|
||||
class SXAddl_SXCSXCondFmt_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCSXCondFmt_SXDSXCondFmt : public SXAddl {};
|
||||
class SXAddl_SXCSXCondFmts_SXDEnd : public SXAddl {};
|
||||
@ -189,10 +220,12 @@ class SXAddl_SXCSXCondFmts_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCSXDH_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCSXDH_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCSXDH_SXDSxdh : public SXAddl {};
|
||||
|
||||
class SXAddl_SXCSXfilt_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCSXfilt_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCSXfilt_SXDSXfilt : public SXAddl {};
|
||||
class SXAddl_SXCSXfilt_SXDSXItm : public SXAddl {};
|
||||
|
||||
class SXAddl_SXCSXFilter12_SXDCaption : public SXAddl {};
|
||||
class SXAddl_SXCSXFilter12_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCSXFilter12_SXDId : public SXAddl {};
|
||||
@ -205,21 +238,35 @@ class SXAddl_SXCSXFilter12_SXDXlsFilterValue1: public SXAddl {};
|
||||
class SXAddl_SXCSXFilter12_SXDXlsFilterValue2: public SXAddl {};
|
||||
class SXAddl_SXCSXFilters12_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCSXFilters12_SXDId : public SXAddl {};
|
||||
|
||||
class SXAddl_SXCSXMg_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCSXMg_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCSXMg_SXDUserCaption : public SXAddl {};
|
||||
|
||||
class SXAddl_SXCSXMgs_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCSXMgs_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCSXMgs_SXDMGrpSXDHMap : public SXAddl {};
|
||||
|
||||
class SXAddl_SXCSXrule_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCSXrule_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCSXrule_SXDSXrule : public SXAddl {};
|
||||
|
||||
class SXAddl_SXCView_SXDCalcMember : public SXAddl {};
|
||||
class SXAddl_SXCView_SXDCalcMemString : public SXAddl {};
|
||||
class SXAddl_SXCView_SXDCompactColHdr : public SXAddl {};
|
||||
class SXAddl_SXCView_SXDCompactRwHdr : public SXAddl {};
|
||||
class SXAddl_SXCView_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCView_SXDId : public SXAddl {};
|
||||
|
||||
class SXAddl_SXCView_SXDId : public SXAddl
|
||||
{
|
||||
public:
|
||||
|
||||
virtual void readFields(CFRecord& record);
|
||||
virtual BaseObjectPtr clone();
|
||||
|
||||
XLUnicodeStringSegmentedSXADDL stName;
|
||||
};
|
||||
|
||||
class SXAddl_SXCView_SXDSXPIIvmb : public SXAddl {};
|
||||
class SXAddl_SXCView_SXDTableStyleClient : public SXAddl {};
|
||||
class SXAddl_SXCView_SXDVer10Info : public SXAddl {};
|
||||
|
||||
@ -52,9 +52,13 @@ BaseObjectPtr SXDI::clone()
|
||||
|
||||
void SXDI::readFields(CFRecord& record)
|
||||
{
|
||||
Log::error("SXDI record is not implemented.");
|
||||
record >> isxvdData >> iiftab >> df >> isxvd >> isxvi >> ifmt >> cchName;
|
||||
|
||||
record.skipNunBytes(record.getDataSize() - record.getRdPtr());
|
||||
if (cchName > 0 && cchName < 0xFFFF)
|
||||
{
|
||||
stName.setSize(cchName);
|
||||
record >> stName;
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -32,12 +32,11 @@
|
||||
#pragma once
|
||||
|
||||
#include "BiffRecord.h"
|
||||
#include "../Biff_structures/BiffString.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
// Logical representation of SXDI record in BIFF8
|
||||
class SXDI: public BiffRecord
|
||||
{
|
||||
BIFF_RECORD_DEFINE_TYPE_INFO(SXDI)
|
||||
@ -47,11 +46,19 @@ public:
|
||||
~SXDI();
|
||||
|
||||
BaseObjectPtr clone();
|
||||
|
||||
|
||||
void readFields(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSXDI;
|
||||
static const ElementType type = typeSXDI;
|
||||
|
||||
short isxvdData;
|
||||
short iiftab;
|
||||
short df;
|
||||
short isxvd;
|
||||
short isxvi;
|
||||
unsigned short ifmt;
|
||||
unsigned short cchName;
|
||||
XLUnicodeStringNoCch stName;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -44,17 +44,45 @@ SXLI::~SXLI()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
BaseObjectPtr SXLI::clone()
|
||||
{
|
||||
return BaseObjectPtr(new SXLI(*this));
|
||||
}
|
||||
|
||||
void SXLI::readFields(CFRecord& record)
|
||||
{
|
||||
Log::error("SXLI record is not implemented.");
|
||||
{// 0 or 2 records SXLIItem
|
||||
int size_item = (record.getDataSize() - record.getRdPtr()) / 2;
|
||||
|
||||
record.skipNunBytes(record.getDataSize() - record.getRdPtr());
|
||||
if (size_item < 8)
|
||||
{
|
||||
//??
|
||||
return;
|
||||
}
|
||||
|
||||
for (int k = 0; k < 2; k++)
|
||||
{
|
||||
SXLIItem item;
|
||||
|
||||
unsigned short flags;
|
||||
|
||||
record >> item.cSic >> item.itmType >> item.isxviMac >> flags;
|
||||
|
||||
item.fMultiDataName = GETBIT(flags, 0);
|
||||
item.iData = GETBITS(flags, 1, 8);
|
||||
item.fSbt = GETBIT(flags, 9);
|
||||
item.fBlock = GETBIT(flags, 10);
|
||||
item.fGrand = GETBIT(flags, 11);
|
||||
item.fMultiDataOnAxis = GETBIT(flags, 12);
|
||||
|
||||
int count = (size_item - 8) / 2;
|
||||
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
short val; record >> val;
|
||||
item.rgisxvi.push_back(val);
|
||||
}
|
||||
m_arItems.push_back(item);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -35,9 +35,21 @@
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
struct SXLIItem
|
||||
{
|
||||
short cSic;
|
||||
unsigned short itmType;
|
||||
short isxviMac;
|
||||
bool fMultiDataName;
|
||||
unsigned char iData;
|
||||
bool fSbt;
|
||||
bool fBlock;
|
||||
bool fGrand;
|
||||
bool fMultiDataOnAxis;
|
||||
|
||||
std::vector<short> rgisxvi;
|
||||
};
|
||||
|
||||
// Logical representation of SXLI record in BIFF8
|
||||
class SXLI: public BiffRecordContinued
|
||||
{
|
||||
BIFF_RECORD_DEFINE_TYPE_INFO(SXLI)
|
||||
@ -47,12 +59,12 @@ public:
|
||||
~SXLI();
|
||||
|
||||
BaseObjectPtr clone();
|
||||
|
||||
|
||||
void readFields(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSXLI;
|
||||
|
||||
static const ElementType type = typeSXLI;
|
||||
|
||||
std::vector<SXLIItem> m_arItems;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -52,9 +52,15 @@ BaseObjectPtr SXPI::clone()
|
||||
|
||||
void SXPI::readFields(CFRecord& record)
|
||||
{
|
||||
Log::error("SXPI record is not implemented.");
|
||||
int size = (record.getDataSize() - record.getRdPtr()) / sizeof(SXPI_Item);
|
||||
|
||||
record.skipNunBytes(record.getDataSize() - record.getRdPtr());
|
||||
for (int i = 0; i < size; i++)
|
||||
{
|
||||
SXPI_Item item;
|
||||
record >> item.isxvd >> item.isxvi >> item.idObj;
|
||||
|
||||
m_arItems.push_back(item);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -36,8 +36,13 @@
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
struct SXPI_Item
|
||||
{
|
||||
short isxvd;
|
||||
short isxvi;
|
||||
short idObj;
|
||||
};
|
||||
|
||||
// Logical representation of SXPI record in BIFF8
|
||||
class SXPI: public BiffRecordContinued
|
||||
{
|
||||
BIFF_RECORD_DEFINE_TYPE_INFO(SXPI)
|
||||
@ -48,11 +53,11 @@ public:
|
||||
|
||||
BaseObjectPtr clone();
|
||||
|
||||
|
||||
void readFields(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSXPI;
|
||||
static const ElementType type = typeSXPI;
|
||||
|
||||
std::vector<SXPI_Item> m_arItems;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@ -36,8 +36,6 @@
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
// Logical representation of SXPIEx record in BIFF8
|
||||
class SXPIEx: public BiffRecord
|
||||
{
|
||||
BIFF_RECORD_DEFINE_TYPE_INFO(SXPIEx)
|
||||
@ -47,11 +45,10 @@ public:
|
||||
~SXPIEx();
|
||||
|
||||
BaseObjectPtr clone();
|
||||
|
||||
|
||||
void readFields(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSXPIEx;
|
||||
static const ElementType type = typeSXPIEx;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -53,9 +53,13 @@ BaseObjectPtr SXString::clone()
|
||||
|
||||
void SXString::readFields(CFRecord& record)
|
||||
{
|
||||
Log::error("SXString record is not implemented.");
|
||||
record >> cch;
|
||||
|
||||
record.skipNunBytes(record.getDataSize() - record.getRdPtr());
|
||||
if (cch > 0 && cch < 0xffff)
|
||||
{
|
||||
segment.setSize(cch);
|
||||
record >> segment;
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -32,12 +32,11 @@
|
||||
#pragma once
|
||||
|
||||
#include "BiffRecord.h"
|
||||
#include "../Biff_structures/BiffString.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
// Logical representation of SXString record in BIFF8
|
||||
class SXString: public BiffRecord
|
||||
{
|
||||
BIFF_RECORD_DEFINE_TYPE_INFO(SXString)
|
||||
@ -47,11 +46,13 @@ public:
|
||||
~SXString();
|
||||
|
||||
BaseObjectPtr clone();
|
||||
|
||||
|
||||
void readFields(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSXString;
|
||||
static const ElementType type = typeSXString;
|
||||
|
||||
unsigned short cch;
|
||||
XLUnicodeStringNoCch segment;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -36,8 +36,6 @@
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
// Logical representation of SXTBRGIITM record in BIFF8
|
||||
class SXTBRGIITM: public BiffRecord
|
||||
{
|
||||
BIFF_RECORD_DEFINE_TYPE_INFO(SXTBRGIITM)
|
||||
@ -47,11 +45,10 @@ public:
|
||||
~SXTBRGIITM();
|
||||
|
||||
BaseObjectPtr clone();
|
||||
|
||||
|
||||
void readFields(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSXTBRGIITM;
|
||||
static const ElementType type = typeSXTBRGIITM;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@ -39,12 +39,10 @@ SXTbl::SXTbl()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
SXTbl::~SXTbl()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
BaseObjectPtr SXTbl::clone()
|
||||
{
|
||||
return BaseObjectPtr(new SXTbl(*this));
|
||||
@ -52,9 +50,10 @@ BaseObjectPtr SXTbl::clone()
|
||||
|
||||
void SXTbl::readFields(CFRecord& record)
|
||||
{
|
||||
Log::error("SXTbl record is not implemented.");
|
||||
record >> cdref >> csxtbpg >> cPages;
|
||||
|
||||
record.skipNunBytes(record.getDataSize() - record.getRdPtr());
|
||||
fAutoPage = GETBIT(cPages, 15);
|
||||
cPages = GETBITS(cPages, 0, 14);
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -36,8 +36,6 @@
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
// Logical representation of SXTbl record in BIFF8
|
||||
class SXTbl: public BiffRecord
|
||||
{
|
||||
BIFF_RECORD_DEFINE_TYPE_INFO(SXTbl)
|
||||
@ -47,11 +45,16 @@ public:
|
||||
~SXTbl();
|
||||
|
||||
BaseObjectPtr clone();
|
||||
|
||||
|
||||
void readFields(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSXTbl;
|
||||
static const ElementType type = typeSXTbl;
|
||||
|
||||
unsigned short cdref;
|
||||
unsigned short csxtbpg;
|
||||
unsigned short cPages;
|
||||
|
||||
bool fAutoPage;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@ -39,12 +39,10 @@ SXVDEx::SXVDEx()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
SXVDEx::~SXVDEx()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
BaseObjectPtr SXVDEx::clone()
|
||||
{
|
||||
return BaseObjectPtr(new SXVDEx(*this));
|
||||
@ -53,9 +51,40 @@ BaseObjectPtr SXVDEx::clone()
|
||||
|
||||
void SXVDEx::readFields(CFRecord& record)
|
||||
{
|
||||
Log::error("SXVDEx record is not implemented.");
|
||||
unsigned short flags1;
|
||||
unsigned char flags2;
|
||||
|
||||
record.skipNunBytes(record.getDataSize() - record.getRdPtr());
|
||||
record >> flags1 >> flags2 >> citmAutoShow >> isxdiAutoSort >> isxdiAutoShow >> ifmt;
|
||||
|
||||
fShowAllItems = GETBIT(flags1, 0);
|
||||
fDragToRow = GETBIT(flags1, 1);
|
||||
fDragToColumn = GETBIT(flags1, 2);
|
||||
fDragToPage = GETBIT(flags1, 3);
|
||||
fDragToHide = GETBIT(flags1, 4);
|
||||
fNotDragToData = GETBIT(flags1, 5);
|
||||
|
||||
fServerBased = GETBIT(flags1, 7);
|
||||
|
||||
fAutoSort = GETBIT(flags1, 9);
|
||||
fAscendSort = GETBIT(flags1, 10);
|
||||
fAutoShow = GETBIT(flags1, 11);
|
||||
fTopAutoShow = GETBIT(flags1, 12);
|
||||
fCalculatedField = GETBIT(flags1, 13);
|
||||
fPageBreaksBetweenItems = GETBIT(flags1, 14);
|
||||
fHideNewItems = GETBIT(flags1, 15);
|
||||
|
||||
fOutline = GETBIT(flags2, 5);
|
||||
fInsertBlankRow = GETBIT(flags2, 6);
|
||||
fSubtotalAtTop = GETBIT(flags2, 7);
|
||||
|
||||
_UINT32 reserved1, reserved2;
|
||||
record >> cchSubName >> reserved1 >> reserved2;
|
||||
|
||||
if (cchSubName > 0 && cchSubName < 0xffff)
|
||||
{
|
||||
stSubName.setSize(cchSubName);
|
||||
record >> stSubName;
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -32,12 +32,11 @@
|
||||
#pragma once
|
||||
|
||||
#include "BiffRecordContinued.h"
|
||||
#include "../Biff_structures/BiffString.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
// Logical representation of SXVDEx record in BIFF8
|
||||
class SXVDEx: public BiffRecordContinued
|
||||
{
|
||||
BIFF_RECORD_DEFINE_TYPE_INFO(SXVDEx)
|
||||
@ -47,11 +46,35 @@ public:
|
||||
~SXVDEx();
|
||||
|
||||
BaseObjectPtr clone();
|
||||
|
||||
|
||||
void readFields(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSXVDEx;
|
||||
static const ElementType type = typeSXVDEx;
|
||||
|
||||
bool fShowAllItems;
|
||||
bool fDragToRow;
|
||||
bool fDragToColumn;
|
||||
bool fDragToPage;
|
||||
bool fDragToHide;
|
||||
bool fNotDragToData;
|
||||
bool fServerBased;
|
||||
bool fAutoSort;
|
||||
bool fAscendSort;
|
||||
bool fAutoShow;
|
||||
bool fTopAutoShow;
|
||||
bool fCalculatedField;
|
||||
bool fPageBreaksBetweenItems;
|
||||
bool fHideNewItems;
|
||||
bool fOutline;
|
||||
bool fInsertBlankRow;
|
||||
bool fSubtotalAtTop;
|
||||
|
||||
unsigned char citmAutoShow;
|
||||
short isxdiAutoSort;
|
||||
short isxdiAutoShow;
|
||||
unsigned short ifmt;
|
||||
unsigned short cchSubName;
|
||||
XLUnicodeStringNoCch stSubName;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@ -52,9 +52,20 @@ BaseObjectPtr SXVI::clone()
|
||||
|
||||
void SXVI::readFields(CFRecord& record)
|
||||
{
|
||||
Log::error("SXVI record is not implemented.");
|
||||
unsigned short flags;
|
||||
record >> itmType>> flags >> iCache >> cchName;
|
||||
|
||||
record.skipNunBytes(record.getDataSize() - record.getRdPtr());
|
||||
fHidden = GETBIT(flags, 0);
|
||||
fHideDetail = GETBIT(flags, 1);
|
||||
fFormula = GETBIT(flags, 4);
|
||||
fMissing = GETBIT(flags, 5);
|
||||
|
||||
if (cchName > 0 && cchName < 0xFFFF)
|
||||
{
|
||||
stName.setSize(cchName);
|
||||
stName.load(record);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -32,12 +32,10 @@
|
||||
#pragma once
|
||||
|
||||
#include "BiffRecord.h"
|
||||
#include "../Biff_structures/BiffString.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
// Logical representation of SXVI record in BIFF8
|
||||
class SXVI: public BiffRecord
|
||||
{
|
||||
BIFF_RECORD_DEFINE_TYPE_INFO(SXVI)
|
||||
@ -47,12 +45,34 @@ public:
|
||||
~SXVI();
|
||||
|
||||
BaseObjectPtr clone();
|
||||
|
||||
|
||||
void readFields(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSXVI;
|
||||
static const ElementType type = typeSXVI;
|
||||
|
||||
unsigned short itmType; //enum
|
||||
//0x0000 itmtypeData
|
||||
//0x0001 itmtypeDEFAULT
|
||||
//0x0002 itmtypeSUM
|
||||
//0x0003 itmtypeCOUNTA
|
||||
//0x0004 itmtypeAVERAGE
|
||||
//0x0005 itmtypeMAX
|
||||
//0x0006 itmtypeMIN
|
||||
//0x0007 itmtypePRODUCT
|
||||
//0x0008 itmtypeCOUNT
|
||||
//0x0009 itmtypeSTDEV
|
||||
//0x000A itmtypeSTDEVP
|
||||
//0x000B itmtypeVAR
|
||||
//0x000C itmtypeVARP
|
||||
|
||||
bool fHidden;
|
||||
bool fHideDetail;
|
||||
bool fFormula;
|
||||
bool fMissing;
|
||||
|
||||
short iCache;
|
||||
unsigned short cchName;
|
||||
XLUnicodeStringNoCch stName;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@ -36,8 +36,6 @@
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
// Logical representation of SXVS record in BIFF8
|
||||
class SXVS: public BiffRecord
|
||||
{
|
||||
BIFF_RECORD_DEFINE_TYPE_INFO(SXVS)
|
||||
@ -50,7 +48,7 @@ public:
|
||||
|
||||
void readFields(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSXVS;
|
||||
static const ElementType type = typeSXVS;
|
||||
|
||||
short sxvs;
|
||||
|
||||
|
||||
@ -37,8 +37,6 @@
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
// Logical representation of SXViewEx record in BIFF8
|
||||
class SXViewEx: public BiffRecord
|
||||
{
|
||||
BIFF_RECORD_DEFINE_TYPE_INFO(SXViewEx)
|
||||
|
||||
@ -39,7 +39,6 @@ SXViewEx9::SXViewEx9()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
SXViewEx9::~SXViewEx9()
|
||||
{
|
||||
}
|
||||
@ -53,9 +52,16 @@ BaseObjectPtr SXViewEx9::clone()
|
||||
|
||||
void SXViewEx9::readFields(CFRecord& record)
|
||||
{
|
||||
Log::error("SXViewEx9 record is not implemented.");
|
||||
unsigned short flags;
|
||||
_UINT32 reserved3, flags2;
|
||||
|
||||
record.skipNunBytes(record.getDataSize() - record.getRdPtr());
|
||||
record >> rt >> flags >> reserved3 >> flags2 >> itblAutoFmt >> chGrand;
|
||||
|
||||
fFrtAlert = GETBIT(flags, 1);
|
||||
|
||||
fPrintTitles = GETBIT(flags2, 1);
|
||||
fLineMode = GETBIT(flags2, 2);
|
||||
fRepeatItemsOnEachPrintedPage = GETBIT(flags2, 5);
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -32,12 +32,11 @@
|
||||
#pragma once
|
||||
|
||||
#include "BiffRecord.h"
|
||||
#include "../Biff_structures/BiffString.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
// Logical representation of SXViewEx9 record in BIFF8
|
||||
class SXViewEx9: public BiffRecord
|
||||
{
|
||||
BIFF_RECORD_DEFINE_TYPE_INFO(SXViewEx9)
|
||||
@ -47,11 +46,18 @@ public:
|
||||
~SXViewEx9();
|
||||
|
||||
BaseObjectPtr clone();
|
||||
|
||||
|
||||
void readFields(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSXViewEx9;
|
||||
static const ElementType type = typeSXViewEx9;
|
||||
|
||||
unsigned short rt;
|
||||
bool fFrtAlert;
|
||||
bool fPrintTitles;
|
||||
bool fLineMode;
|
||||
bool fRepeatItemsOnEachPrintedPage;
|
||||
unsigned short itblAutoFmt;
|
||||
XLUnicodeString chGrand;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@ -52,9 +52,15 @@ BaseObjectPtr SXViewLink::clone()
|
||||
|
||||
void SXViewLink::readFields(CFRecord& record)
|
||||
{
|
||||
Log::error("SXViewLink record is not implemented.");
|
||||
unsigned short unused, reserved;
|
||||
|
||||
record.skipNunBytes(record.getDataSize() - record.getRdPtr());
|
||||
record >> rt >> unused >> reserved >> cch;
|
||||
|
||||
if (cch > 0 && cch < 0xff)
|
||||
{
|
||||
stPivotTable.setSize(cch);
|
||||
record >> stPivotTable;
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -32,12 +32,11 @@
|
||||
#pragma once
|
||||
|
||||
#include "BiffRecord.h"
|
||||
#include "../Biff_structures/BiffString.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
// Logical representation of SXViewLink record in BIFF8
|
||||
class SXViewLink: public BiffRecord
|
||||
{
|
||||
BIFF_RECORD_DEFINE_TYPE_INFO(SXViewLink)
|
||||
@ -47,13 +46,14 @@ public:
|
||||
~SXViewLink();
|
||||
|
||||
BaseObjectPtr clone();
|
||||
|
||||
|
||||
void readFields(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSXViewLink;
|
||||
|
||||
static const ElementType type = typeSXViewLink;
|
||||
|
||||
unsigned short rt;
|
||||
unsigned char cch;
|
||||
XLUnicodeStringNoCch stPivotTable;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@ -38,8 +38,6 @@
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
// Logical representation of SortData record in BIFF8
|
||||
class SortData: public BiffRecordContinued
|
||||
{
|
||||
BIFF_RECORD_DEFINE_TYPE_INFO(SortData)
|
||||
@ -49,11 +47,10 @@ public:
|
||||
~SortData();
|
||||
|
||||
BaseObjectPtr clone();
|
||||
|
||||
|
||||
void readFields(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSortData;
|
||||
static const ElementType type = typeSortData;
|
||||
|
||||
bool fCol;
|
||||
bool fCaseSensitive;
|
||||
|
||||
@ -36,8 +36,6 @@
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
// Logical representation of SxFilt record in BIFF8
|
||||
class SxFilt: public BiffRecord
|
||||
{
|
||||
BIFF_RECORD_DEFINE_TYPE_INFO(SxFilt)
|
||||
@ -50,7 +48,7 @@ public:
|
||||
|
||||
void readFields(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSxFilt;
|
||||
static const ElementType type = typeSxFilt;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@ -36,8 +36,6 @@
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
// Logical representation of SxFormat record in BIFF8
|
||||
class SxFormat: public BiffRecord
|
||||
{
|
||||
BIFF_RECORD_DEFINE_TYPE_INFO(SxFormat)
|
||||
@ -47,11 +45,10 @@ public:
|
||||
~SxFormat();
|
||||
|
||||
BaseObjectPtr clone();
|
||||
|
||||
|
||||
void readFields(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSxFormat;
|
||||
static const ElementType type = typeSxFormat;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -39,12 +39,10 @@ SxRule::SxRule()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
SxRule::~SxRule()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
BaseObjectPtr SxRule::clone()
|
||||
{
|
||||
return BaseObjectPtr(new SxRule(*this));
|
||||
@ -53,9 +51,22 @@ BaseObjectPtr SxRule::clone()
|
||||
|
||||
void SxRule::readFields(CFRecord& record)
|
||||
{
|
||||
Log::error("SxRule record is not implemented.");
|
||||
|
||||
record.skipNunBytes(record.getDataSize() - record.getRdPtr());
|
||||
unsigned short flags, reserved;
|
||||
record >> iDim >> isxvd >> flags >> reserved >> csxFilt >> irwFirst >> irwLast >> icolFirst >> icolLast;
|
||||
|
||||
sxaxisRw = GETBIT(flags, 0);
|
||||
sxaxisCol = GETBIT(flags, 1);
|
||||
sxaxisPage = GETBIT(flags, 2);
|
||||
sxaxisData = GETBIT(flags, 3);
|
||||
sxrType = GETBITS(flags, 4, 7);
|
||||
fPart = GETBIT(flags, 8);
|
||||
fDataOnly = GETBIT(flags, 9);
|
||||
fLabelOnly = GETBIT(flags, 10);
|
||||
fGrandRw = GETBIT(flags, 11);
|
||||
fGrandCol = GETBIT(flags, 12);
|
||||
fGrandRwSav = GETBIT(flags, 13);
|
||||
fCacheBased = GETBIT(flags, 14);
|
||||
fGrandColSav = GETBIT(flags, 15);
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -36,8 +36,6 @@
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
// Logical representation of SxRule record in BIFF8
|
||||
class SxRule: public BiffRecord
|
||||
{
|
||||
BIFF_RECORD_DEFINE_TYPE_INFO(SxRule)
|
||||
@ -50,7 +48,29 @@ public:
|
||||
|
||||
void readFields(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSxRule;
|
||||
static const ElementType type = typeSxRule;
|
||||
|
||||
unsigned char iDim;
|
||||
unsigned char isxvd;
|
||||
|
||||
bool sxaxisRw;
|
||||
bool sxaxisCol;
|
||||
bool sxaxisPage;
|
||||
bool sxaxisData;
|
||||
unsigned char sxrType;
|
||||
bool fPart;
|
||||
bool fDataOnly;
|
||||
bool fLabelOnly;
|
||||
bool fGrandRw;
|
||||
bool fGrandCol;
|
||||
bool fGrandRwSav;
|
||||
bool fCacheBased;
|
||||
bool fGrandColSav;
|
||||
unsigned short csxFilt;
|
||||
unsigned char irwFirst;
|
||||
unsigned char irwLast;
|
||||
unsigned char icolFirst;
|
||||
unsigned char icolLast;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -53,9 +53,18 @@ BaseObjectPtr SxSelect::clone()
|
||||
|
||||
void SxSelect::readFields(CFRecord& record)
|
||||
{
|
||||
Log::error("SxSelect record is not implemented.");
|
||||
|
||||
record.skipNunBytes(record.getDataSize() - record.getRdPtr());
|
||||
short reserved1, flags;
|
||||
unsigned char reserved2;
|
||||
|
||||
record >> reserved1 >> pnn >> reserved2 >> sxaxisAct >> iDimAct >> iLiStart >> iLiAct >> iLiMin >> iLiMax;
|
||||
record >> rwClick >> colClick >> rwClickPrev >> colClickPrev >> flags;
|
||||
|
||||
cClick = GETBITS(flags, 0, 4);
|
||||
fLabelOnly = GETBIT(flags, 5);
|
||||
fDataOnly = GETBIT(flags, 6);
|
||||
fToggleDataHeader = GETBIT(flags, 7);
|
||||
fSelectionClick = GETBIT(flags, 8);
|
||||
fExtendable = GETBIT(flags, 9);
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -32,12 +32,11 @@
|
||||
#pragma once
|
||||
|
||||
#include "BiffRecord.h"
|
||||
#include "../Biff_structures/SxAxis.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
// Logical representation of SxSelect record in BIFF8
|
||||
class SxSelect: public BiffRecord
|
||||
{
|
||||
BIFF_RECORD_DEFINE_TYPE_INFO(SxSelect)
|
||||
@ -51,6 +50,26 @@ public:
|
||||
void readFields(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSxSelect;
|
||||
|
||||
unsigned char pnn; //enum PaneType
|
||||
SXAxis sxaxisAct;
|
||||
unsigned short iDimAct;
|
||||
unsigned short iLiStart;
|
||||
unsigned short iLiAct;
|
||||
unsigned short iLiMin;
|
||||
unsigned short iLiMax;
|
||||
RwU rwClick;
|
||||
ColU colClick;
|
||||
RwU rwClickPrev;
|
||||
ColU colClickPrev;
|
||||
|
||||
unsigned char cClick;
|
||||
bool fLabelOnly;
|
||||
bool fDataOnly;
|
||||
bool fToggleDataHeader;
|
||||
bool fSelectionClick;
|
||||
bool fExtendable;
|
||||
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -34,21 +34,7 @@
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
BiffStructurePtr SXAxis::clone()
|
||||
{
|
||||
return BiffStructurePtr(new SXAxis(*this));
|
||||
}
|
||||
void SXAxis::load(CFRecord& record)
|
||||
{
|
||||
unsigned short flags;
|
||||
record >> flags;
|
||||
|
||||
bRw = GETBIT(flags, 0);
|
||||
bCol = GETBIT(flags, 1);
|
||||
bPage = GETBIT(flags, 2);
|
||||
bData = GETBIT(flags, 3);
|
||||
}
|
||||
|
||||
BaseObjectPtr SxView::clone()
|
||||
{
|
||||
return BaseObjectPtr(new SxView(*this));
|
||||
|
||||
@ -34,29 +34,10 @@
|
||||
#include "BiffRecord.h"
|
||||
#include "../Biff_structures/BiffString.h"
|
||||
#include "../Biff_structures/CellRangeRef.h"
|
||||
#include "../Biff_structures/SxAxis.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
class SXAxis : public BiffStructure
|
||||
{
|
||||
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAxis)
|
||||
public:
|
||||
|
||||
SXAxis(){}
|
||||
~SXAxis(){}
|
||||
|
||||
BiffStructurePtr clone();
|
||||
|
||||
virtual void load(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSXAxis;
|
||||
|
||||
bool bRw;
|
||||
bool bCol;
|
||||
bool bPage;
|
||||
bool bData;
|
||||
|
||||
};
|
||||
|
||||
class SxView: public BiffRecord
|
||||
{
|
||||
|
||||
@ -31,7 +31,9 @@
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include "SxView.h"
|
||||
#include "BiffRecord.h"
|
||||
#include "../Biff_structures/SxAxis.h"
|
||||
#include "../Biff_structures/BiffString.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
@ -103,8 +103,10 @@ void Window2::readFields(CFRecord& record)
|
||||
if (10 > record.getDataSize())
|
||||
{
|
||||
record >> wScaleSLV >> wScaleNormal;
|
||||
record.skipNunBytes(4); // unused / reserved
|
||||
}
|
||||
int sz = record.getDataSize() - record.getRdPtr();
|
||||
|
||||
record.skipNunBytes(sz); // unused / reserved
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,53 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2017
|
||||
*
|
||||
* This program is a free software product. You can redistribute it and/or
|
||||
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
||||
* version 3 as published by the Free Software Foundation. In accordance with
|
||||
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
||||
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
||||
* of any third-party rights.
|
||||
*
|
||||
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
||||
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||||
*
|
||||
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
||||
* EU, LV-1021.
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions
|
||||
* of the Program must display Appropriate Legal Notices, as required under
|
||||
* Section 5 of the GNU AGPL version 3.
|
||||
*
|
||||
* Pursuant to Section 7(b) of the License you must retain the original Product
|
||||
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
||||
* grant you any rights under trademark law for use of our trademarks.
|
||||
*
|
||||
* All the Product's GUI elements, including illustrations and icon sets, as
|
||||
* well as technical writing content are licensed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
||||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
*
|
||||
*/
|
||||
|
||||
#include "SxAxis.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
BiffStructurePtr SXAxis::clone()
|
||||
{
|
||||
return BiffStructurePtr(new SXAxis(*this));
|
||||
}
|
||||
void SXAxis::load(CFRecord& record)
|
||||
{
|
||||
unsigned short flags;
|
||||
record >> flags;
|
||||
|
||||
bRw = GETBIT(flags, 0);
|
||||
bCol = GETBIT(flags, 1);
|
||||
bPage = GETBIT(flags, 2);
|
||||
bData = GETBIT(flags, 3);
|
||||
}
|
||||
} // namespace XLS
|
||||
|
||||
@ -0,0 +1,60 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2017
|
||||
*
|
||||
* This program is a free software product. You can redistribute it and/or
|
||||
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
||||
* version 3 as published by the Free Software Foundation. In accordance with
|
||||
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
||||
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
||||
* of any third-party rights.
|
||||
*
|
||||
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
||||
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||||
*
|
||||
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
||||
* EU, LV-1021.
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions
|
||||
* of the Program must display Appropriate Legal Notices, as required under
|
||||
* Section 5 of the GNU AGPL version 3.
|
||||
*
|
||||
* Pursuant to Section 7(b) of the License you must retain the original Product
|
||||
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
||||
* grant you any rights under trademark law for use of our trademarks.
|
||||
*
|
||||
* All the Product's GUI elements, including illustrations and icon sets, as
|
||||
* well as technical writing content are licensed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
||||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
*
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include "BiffStructure.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
class SXAxis : public BiffStructure
|
||||
{
|
||||
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAxis)
|
||||
public:
|
||||
|
||||
SXAxis(){}
|
||||
~SXAxis(){}
|
||||
|
||||
BiffStructurePtr clone();
|
||||
|
||||
virtual void load(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSXAxis;
|
||||
|
||||
bool bRw;
|
||||
bool bCol;
|
||||
bool bPage;
|
||||
bool bData;
|
||||
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -58,11 +58,15 @@ BaseObjectPtr PIVOTADDL::clone()
|
||||
|
||||
|
||||
/*
|
||||
PIVOTADDL = SXAddl_SXCView_SXDId *Continue_SxaddlSxString [SXAddl_SXCView_SXDVer10Info]
|
||||
PIVOTADDL = SXAddl_SXCView_SXDId *Continue_SxaddlSxString
|
||||
[SXAddl_SXCView_SXDVer10Info]
|
||||
[SXAddl_SXCView_SXDVer12Info] *SXADDLCALCMEMBER *SXADDLHIERARCHY *SXADDLFIELD *UNKNOWNFRT
|
||||
[SXAddl_SXCView_SXDTableStyleClient] [SXAddl_SXCView_SXDCompactRwHdr *Continue_SxaddlSxString]
|
||||
[SXAddl_SXCView_SXDCompactColHdr *Continue_SxaddlSxString] [SXAddl_SXCView_SXDVerUpdInv]
|
||||
[SXADDLCONDFMTS] [SXADDLSXFILTERS12] *SXAddl_SXCView_SXDVerUpdInv *SXAddl_SXCView_SXDSXPIIvmb
|
||||
[SXAddl_SXCView_SXDTableStyleClient]
|
||||
[SXAddl_SXCView_SXDCompactRwHdr *Continue_SxaddlSxString]
|
||||
[SXAddl_SXCView_SXDCompactColHdr *Continue_SxaddlSxString]
|
||||
[SXAddl_SXCView_SXDVerUpdInv]
|
||||
[SXADDLCONDFMTS]
|
||||
[SXADDLSXFILTERS12] *SXAddl_SXCView_SXDVerUpdInv *SXAddl_SXCView_SXDSXPIIvmb
|
||||
[SXAddl_SXCView_SXDVerUpdInv] SXAddl_SXCView_SXDEnd
|
||||
*/
|
||||
const bool PIVOTADDL::loadContent(BinProcessor& proc)
|
||||
@ -71,50 +75,102 @@ const bool PIVOTADDL::loadContent(BinProcessor& proc)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
int count = 0;
|
||||
m_SXAddl_SXCView_SXDId = elements_.back();
|
||||
elements_.pop_back();
|
||||
|
||||
count = proc.repeated<Continue_SxaddlSxString>(0, 0);
|
||||
int count = proc.repeated<Continue_SxaddlSxString>(0, 0);
|
||||
|
||||
if (proc.optional<SXAddl_SXCView_SXDVer10Info>())
|
||||
{
|
||||
m_SXAddl_SXCView_SXDVer10Info = elements_.back();
|
||||
elements_.pop_back();
|
||||
}
|
||||
if (proc.optional<SXAddl_SXCView_SXDVer12Info>())
|
||||
{
|
||||
m_SXAddl_SXCView_SXDVer12Info = elements_.back();
|
||||
elements_.pop_back();
|
||||
}
|
||||
count = proc.repeated<SXADDLCALCMEMBER>(0, 0);
|
||||
while(count > 0)
|
||||
{
|
||||
m_arSXADDLCALCMEMBER.push_back(elements_.front());
|
||||
elements_.pop_front(); count--;
|
||||
}
|
||||
|
||||
count = proc.repeated<SXADDLHIERARCHY>(0, 0);
|
||||
while(count > 0)
|
||||
{
|
||||
m_arSXADDLHIERARCHY.push_back(elements_.front());
|
||||
elements_.pop_front(); count--;
|
||||
}
|
||||
count = proc.repeated<SXADDLFIELD>(0, 0);
|
||||
while(count > 0)
|
||||
{
|
||||
m_arSXADDLFIELD.push_back(elements_.front());
|
||||
elements_.pop_front(); count--;
|
||||
}
|
||||
|
||||
count = proc.repeated<UNKNOWNFRT>(0, 0);
|
||||
|
||||
if (proc.optional<SXAddl_SXCView_SXDTableStyleClient>())
|
||||
{
|
||||
m_SXAddl_SXCView_SXDTableStyleClient = elements_.back();
|
||||
elements_.pop_back();
|
||||
}
|
||||
|
||||
if(proc.optional<SXAddl_SXCView_SXDCompactRwHdr>())
|
||||
{
|
||||
m_SXAddl_SXCView_SXDCompactRwHdr = elements_.back();
|
||||
elements_.pop_back();
|
||||
|
||||
count = proc.repeated<Continue_SxaddlSxString>(0, 0);
|
||||
}
|
||||
if(proc.optional<SXAddl_SXCView_SXDCompactColHdr>())
|
||||
{
|
||||
m_SXAddl_SXCView_SXDCompactColHdr = elements_.back();
|
||||
elements_.pop_back();
|
||||
|
||||
count = proc.repeated<Continue_SxaddlSxString>(0, 0);
|
||||
}
|
||||
|
||||
if (proc.optional<SXAddl_SXCView_SXDVerUpdInv>())
|
||||
{
|
||||
m_arSXAddl_SXCView_SXDVerUpdInv.push_back(elements_.back());
|
||||
elements_.pop_back();
|
||||
}
|
||||
if (proc.optional<SXADDLCONDFMTS>())
|
||||
{
|
||||
m_SXADDLCONDFMTS = elements_.back();
|
||||
elements_.pop_back();
|
||||
}
|
||||
if (proc.optional<SXADDLSXFILTERS12>())
|
||||
{
|
||||
m_SXAddl_SXADDLSXFILTERS12 = elements_.back();
|
||||
elements_.pop_back();
|
||||
}
|
||||
count = proc.repeated<SXAddl_SXCView_SXDVerUpdInv>(0, 0);
|
||||
while(count > 0)
|
||||
{
|
||||
m_arSXAddl_SXCView_SXDVerUpdInv.push_back(elements_.front());
|
||||
elements_.pop_front(); count--;
|
||||
}
|
||||
|
||||
count = proc.repeated<SXAddl_SXCView_SXDSXPIIvmb>(0, 0);
|
||||
while(count > 0)
|
||||
{
|
||||
m_arSXAddl_SXCView_SXDSXPIIvmb.push_back(elements_.front());
|
||||
elements_.pop_front(); count--;
|
||||
}
|
||||
|
||||
if (proc.optional<SXAddl_SXCView_SXDVerUpdInv>())
|
||||
{
|
||||
m_arSXAddl_SXCView_SXDVerUpdInv.push_back(elements_.front());
|
||||
elements_.pop_front();
|
||||
}
|
||||
if (proc.mandatory<SXAddl_SXCView_SXDEnd>())
|
||||
|
||||
if (proc.optional<SXAddl_SXCView_SXDEnd>())
|
||||
{
|
||||
elements_.pop_back();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -36,8 +36,6 @@
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
// Logical representation of PIVOTADDL union of records
|
||||
class PIVOTADDL: public CompositeObject
|
||||
{
|
||||
BASE_OBJECT_DEFINE_CLASS_NAME(PIVOTADDL)
|
||||
@ -49,7 +47,24 @@ public:
|
||||
|
||||
virtual const bool loadContent(BinProcessor& proc);
|
||||
|
||||
static const ElementType type = typePIVOTADDL;
|
||||
static const ElementType type = typePIVOTADDL;
|
||||
|
||||
BaseObjectPtr m_SXAddl_SXCView_SXDId;
|
||||
BaseObjectPtr m_SXAddl_SXCView_SXDVer10Info;
|
||||
BaseObjectPtr m_SXAddl_SXCView_SXDVer12Info;
|
||||
|
||||
BaseObjectPtr m_SXAddl_SXCView_SXDCompactRwHdr;
|
||||
BaseObjectPtr m_SXAddl_SXCView_SXDCompactColHdr;
|
||||
BaseObjectPtr m_SXAddl_SXADDLSXFILTERS12;
|
||||
BaseObjectPtr m_SXADDLCONDFMTS;
|
||||
BaseObjectPtr m_SXAddl_SXCView_SXDTableStyleClient;
|
||||
|
||||
std::vector<BaseObjectPtr> m_arSXAddl_SXCView_SXDVerUpdInv;
|
||||
std::vector<BaseObjectPtr> m_arSXAddl_SXCView_SXDSXPIIvmb;
|
||||
std::vector<BaseObjectPtr> m_arSXADDLFIELD;
|
||||
std::vector<BaseObjectPtr> m_arSXADDLHIERARCHY;
|
||||
std::vector<BaseObjectPtr> m_arSXADDLCALCMEMBER;
|
||||
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -61,6 +61,9 @@ const bool PIVOTPI::loadContent(BinProcessor& proc)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
m_SXPI = elements_.back();
|
||||
elements_.pop_back();
|
||||
|
||||
proc.repeated<Continue>(0, 0);
|
||||
|
||||
return true;
|
||||
|
||||
@ -36,8 +36,6 @@
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
// Logical representation of PIVOTPI union of records
|
||||
class PIVOTPI: public CompositeObject
|
||||
{
|
||||
BASE_OBJECT_DEFINE_CLASS_NAME(PIVOTPI)
|
||||
@ -49,7 +47,9 @@ public:
|
||||
|
||||
virtual const bool loadContent(BinProcessor& proc);
|
||||
|
||||
static const ElementType type = typePIVOTPI;
|
||||
static const ElementType type = typePIVOTPI;
|
||||
|
||||
BaseObjectPtr m_SXPI;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -61,8 +61,13 @@ const bool PIVOTSELECT::loadContent(BinProcessor& proc)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
m_SxSelect = elements_.back();
|
||||
elements_.pop_back();
|
||||
|
||||
if (proc.mandatory<PIVOTRULE>())
|
||||
{
|
||||
m_PIVOTRULE = elements_.back();
|
||||
elements_.pop_back();
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
@ -50,6 +50,9 @@ public:
|
||||
virtual const bool loadContent(BinProcessor& proc);
|
||||
|
||||
static const ElementType type = typePIVOTSELECT;
|
||||
|
||||
BaseObjectPtr m_SxSelect;
|
||||
BaseObjectPtr m_PIVOTRULE;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -67,7 +67,7 @@ const bool SXADDLCACHE::loadContent(BinProcessor& proc)
|
||||
m_SXCCache_SXDId = elements_.back();
|
||||
elements_.pop_back();
|
||||
|
||||
if (proc.mandatory<SXAddl_SXCCache_SXDVer10Info>())
|
||||
if (proc.optional<SXAddl_SXCCache_SXDVer10Info>())
|
||||
{
|
||||
m_SXDVer10Info = elements_.back();
|
||||
elements_.pop_back();
|
||||
@ -79,13 +79,17 @@ const bool SXADDLCACHE::loadContent(BinProcessor& proc)
|
||||
}
|
||||
if (proc.optional<SXADDLCACHE12>())
|
||||
{
|
||||
m_SXADDLCACHE12 = elements_.back();
|
||||
elements_.pop_back();
|
||||
}
|
||||
if (proc.optional<SXADDLDBQUERY>())
|
||||
{
|
||||
m_SXADDLDBQUERY = elements_.back();
|
||||
elements_.pop_back();
|
||||
}
|
||||
int count = proc.repeated<UNKNOWNFRT>(0, 0);
|
||||
|
||||
if (proc.mandatory<SXAddl_SXCCache_SXDEnd>())
|
||||
if (proc.optional<SXAddl_SXCCache_SXDEnd>())
|
||||
{
|
||||
elements_.pop_back();
|
||||
}
|
||||
|
||||
@ -52,6 +52,8 @@ public:
|
||||
BaseObjectPtr m_SXCCache_SXDId;
|
||||
BaseObjectPtr m_SXDVer10Info;
|
||||
BaseObjectPtr m_SXDVerSXMacro;
|
||||
BaseObjectPtr m_SXADDLDBQUERY;
|
||||
BaseObjectPtr m_SXADDLCACHE12;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@ -60,28 +60,44 @@ BaseObjectPtr SXADDLCACHE12::clone()
|
||||
// *SXADDLCACHEFIELD [SXADDLSXDH] [SXADDLSXMGS] SXAddl_SXCCache_SXDVerUpdInv
|
||||
const bool SXADDLCACHE12::loadContent(BinProcessor& proc)
|
||||
{
|
||||
|
||||
if(!proc.mandatory<SXAddl_SXCCache_SXDVerUpdInv>())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (proc.mandatory<SXAddl_SXCCache_SXDInfo12>())
|
||||
m_SXAddl_SXCCache_SXDVerUpdInv = elements_.back();
|
||||
elements_.pop_back();
|
||||
|
||||
if (proc.optional<SXAddl_SXCCache_SXDInfo12>())
|
||||
{
|
||||
m_SXAddl_SXCCache_SXDInfo12 = elements_.back();
|
||||
elements_.pop_back();
|
||||
}
|
||||
if (proc.mandatory<SXAddl_SXCCache_SXDInvRefreshReal>())
|
||||
if (proc.optional<SXAddl_SXCCache_SXDInvRefreshReal>())
|
||||
{
|
||||
m_SXAddl_SXCCache_SXDInvRefreshReal = elements_.back();
|
||||
elements_.pop_back();
|
||||
}
|
||||
|
||||
int count = proc.repeated<SXADDLCACHEFIELD>(0, 0);
|
||||
|
||||
int count = proc.repeated<SXADDLCACHEFIELD>(0, 0);
|
||||
while(count > 0)
|
||||
{
|
||||
m_arSXADDLCACHEFIELD.push_back(elements_.front());
|
||||
elements_.pop_front(); count--;
|
||||
}
|
||||
if (proc.optional<SXADDLSXDH>())
|
||||
{
|
||||
m_SXADDLSXDH = elements_.back();
|
||||
elements_.pop_back();
|
||||
}
|
||||
if (proc.optional<SXADDLSXMGS>())
|
||||
{
|
||||
m_SXADDLSXMGS = elements_.back();
|
||||
elements_.pop_back();
|
||||
}
|
||||
if (proc.mandatory<SXAddl_SXCCache_SXDVerUpdInv>())
|
||||
if (proc.optional<SXAddl_SXCCache_SXDVerUpdInv>())
|
||||
{
|
||||
m_SXAddl_SXCCache_SXDVerUpdInvS = elements_.back();
|
||||
elements_.pop_back();
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
@ -36,8 +36,6 @@
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
// Logical representation of SXADDLCACHE12 union of records
|
||||
class SXADDLCACHE12: public CompositeObject
|
||||
{
|
||||
BASE_OBJECT_DEFINE_CLASS_NAME(SXADDLCACHE12)
|
||||
@ -50,7 +48,15 @@ public:
|
||||
virtual const bool loadContent(BinProcessor& proc);
|
||||
|
||||
static const ElementType type = typeSXADDLCACHE12;
|
||||
|
||||
|
||||
BaseObjectPtr m_SXAddl_SXCCache_SXDVerUpdInv;
|
||||
BaseObjectPtr m_SXAddl_SXCCache_SXDVerUpdInvS;
|
||||
BaseObjectPtr m_SXADDLSXMGS;
|
||||
BaseObjectPtr m_SXADDLSXDH;
|
||||
BaseObjectPtr m_SXAddl_SXCCache_SXDInfo12;
|
||||
BaseObjectPtr m_SXAddl_SXCCache_SXDInvRefreshReal;
|
||||
|
||||
std::vector<BaseObjectPtr> m_arSXADDLCACHEFIELD;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -180,7 +180,7 @@ const bool SXADDLCACHEFIELD::loadContent(BinProcessor& proc)
|
||||
proc.optional<Parenthesis_SXADDLCACHEFIELD_2>();
|
||||
proc.optional<Parenthesis_SXADDLCACHEFIELD_4>();
|
||||
proc.optional<Parenthesis_SXADDLCACHEFIELD_5>();
|
||||
proc.mandatory<SXAddl_SXCCacheField_SXDEnd>();
|
||||
proc.optional<SXAddl_SXCCacheField_SXDEnd>();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@ -36,8 +36,6 @@
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
// Logical representation of SXADDLCACHEFIELD union of records
|
||||
class SXADDLCACHEFIELD: public CompositeObject
|
||||
{
|
||||
BASE_OBJECT_DEFINE_CLASS_NAME(SXADDLCACHEFIELD)
|
||||
|
||||
@ -56,16 +56,13 @@ BaseObjectPtr SXADDLCALCMEMBER::clone()
|
||||
// SXADDLCALCMEMBER = (SXAddl_SXCView_SXDCalcMember [SXAddl_SXCView_SXDCalcMemString *Continue_SxaddlSxString])
|
||||
const bool SXADDLCALCMEMBER::loadContent(BinProcessor& proc)
|
||||
{
|
||||
#pragma message("####################### SXADDLCALCMEMBER union is not implemented")
|
||||
Log::info("SXADDLCALCMEMBER union is not implemented!!!!!!!!!!!!!!!");
|
||||
|
||||
if(!proc.mandatory<SXAddl_SXCView_SXDCalcMember>())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if(proc.optional<SXAddl_SXCView_SXDCalcMemString>())
|
||||
{
|
||||
proc.repeated<Continue_SxaddlSxString>(0, 0);
|
||||
int count = proc.repeated<Continue_SxaddlSxString>(0, 0);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
@ -62,7 +62,7 @@ const bool SXADDLCONDFMTS::loadContent(BinProcessor& proc)
|
||||
return false;
|
||||
}
|
||||
proc.repeated<SXADDLCONDFMT>(0, 0);
|
||||
proc.mandatory<SXAddl_SXCSXCondFmts_SXDEnd>();
|
||||
proc.optional<SXAddl_SXCSXCondFmts_SXDEnd>();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -36,8 +36,6 @@
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
// Logical representation of SXADDLCONDFMTS union of records
|
||||
class SXADDLCONDFMTS: public CompositeObject
|
||||
{
|
||||
BASE_OBJECT_DEFINE_CLASS_NAME(SXADDLCONDFMTS)
|
||||
@ -50,7 +48,6 @@ public:
|
||||
virtual const bool loadContent(BinProcessor& proc);
|
||||
|
||||
static const ElementType type = typeSXADDLCONDFMTS;
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
@ -61,22 +61,41 @@ SXADDLDBQUERY = [SXAddl_SXCQuery_SXDXMLSource *Continue_SxaddlSxString]
|
||||
*/
|
||||
const bool SXADDLDBQUERY::loadContent(BinProcessor& proc)
|
||||
{
|
||||
int count = 0;
|
||||
|
||||
if(proc.optional<SXAddl_SXCQuery_SXDXMLSource>())
|
||||
{
|
||||
proc.repeated<Continue_SxaddlSxString>(0, 0);
|
||||
m_XMLSource = elements_.back();
|
||||
elements_.pop_back();
|
||||
|
||||
count = proc.repeated<Continue_SxaddlSxString>(0, 0);
|
||||
}
|
||||
if(proc.optional<SXAddl_SXCQuery_SXDSrcDataFile>())
|
||||
{
|
||||
proc.repeated<Continue_SxaddlSxString>(0, 0);
|
||||
m_SrcDataFile = elements_.back();
|
||||
elements_.pop_back();
|
||||
|
||||
count = proc.repeated<Continue_SxaddlSxString>(0, 0);
|
||||
}
|
||||
if(proc.optional<SXAddl_SXCQuery_SXDSrcConnFile>())
|
||||
{
|
||||
proc.repeated<Continue_SxaddlSxString>(0, 0);
|
||||
}
|
||||
proc.optional<SXAddl_SXCQuery_SXDReconnCond>();
|
||||
proc.mandatory<SXAddl_SXCQuery_SXDEnd>();
|
||||
m_SrcConnFile = elements_.back();
|
||||
elements_.pop_back();
|
||||
|
||||
return true;
|
||||
count = proc.repeated<Continue_SxaddlSxString>(0, 0);
|
||||
}
|
||||
if(proc.optional<SXAddl_SXCQuery_SXDReconnCond>())
|
||||
{
|
||||
m_ReconnCond = elements_.back();
|
||||
elements_.pop_back();
|
||||
}
|
||||
|
||||
if(proc.mandatory<SXAddl_SXCQuery_SXDEnd>())
|
||||
{
|
||||
elements_.pop_back();
|
||||
}
|
||||
|
||||
return m_XMLSource || m_SrcConnFile || m_SrcDataFile || m_ReconnCond;
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -50,6 +50,12 @@ public:
|
||||
virtual const bool loadContent(BinProcessor& proc);
|
||||
|
||||
static const ElementType type = typeSXADDLDBQUERY;
|
||||
|
||||
BaseObjectPtr m_SrcConnFile;
|
||||
BaseObjectPtr m_SrcDataFile;
|
||||
BaseObjectPtr m_XMLSource;
|
||||
BaseObjectPtr m_ReconnCond;
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
@ -36,8 +36,6 @@
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
// Logical representation of SXSRC union of records
|
||||
class SXSRC: public CompositeObject
|
||||
{
|
||||
BASE_OBJECT_DEFINE_CLASS_NAME(SXSRC)
|
||||
|
||||
@ -36,8 +36,6 @@
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
// Logical representation of SXTBL union of records
|
||||
class SXTBL: public CompositeObject
|
||||
{
|
||||
BASE_OBJECT_DEFINE_CLASS_NAME(SXTBL)
|
||||
@ -49,7 +47,7 @@ public:
|
||||
|
||||
virtual const bool loadContent(BinProcessor& proc);
|
||||
|
||||
static const ElementType type = typeSXTBL;
|
||||
static const ElementType type = typeSXTBL;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@ -161,7 +161,7 @@ const bool WorkbookStreamObject::loadContent(BinProcessor& proc)
|
||||
Log::warning("WARNING: Substream of unsupported type " + STR::int2str(substream_type, 10) +
|
||||
" The substream is skipped! Sorry.");
|
||||
proc.SeekToEOF();
|
||||
proc.mandatory<EOF_T>();
|
||||
proc.optional<EOF_T>();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -294,6 +294,7 @@ enum ElementType
|
||||
typeStyleExt,
|
||||
typeSupBook,
|
||||
typeSurf,
|
||||
typeStringSegmentedSXADDL,
|
||||
typeSXAddl,
|
||||
typeSXDI,
|
||||
typeSxDXF,
|
||||
|
||||
@ -582,6 +582,7 @@ SOURCES += \
|
||||
../XlsFormat/Logic/Biff_structures/XLUnicodeRichExtendedString.cpp \
|
||||
../XlsFormat/Logic/Biff_structures/XORObfuscation.cpp \
|
||||
../XlsFormat/Logic/Biff_structures/XTI.cpp \
|
||||
../XlsFormat/Logic/Biff_structures/SxAxis.cpp \
|
||||
../XlsFormat/Logic/Biff_structures/ODRAW/MSOCR.cpp \
|
||||
../XlsFormat/Logic/Biff_structures/ODRAW/MSOSHADECOLOR.cpp \
|
||||
../XlsFormat/Logic/Biff_structures/ODRAW/OfficeArtBlip.cpp \
|
||||
@ -1364,6 +1365,7 @@ HEADERS += \
|
||||
../XlsFormat/Logic/Biff_structures/XLUnicodeRichExtendedString.h \
|
||||
../XlsFormat/Logic/Biff_structures/XORObfuscation.h \
|
||||
../XlsFormat/Logic/Biff_structures/XTI.h \
|
||||
../XlsFormat/Logic/Biff_structures/SxAxis.h \
|
||||
../XlsFormat/Logic/Biff_structures/ODRAW/IMsoArray.h \
|
||||
../XlsFormat/Logic/Biff_structures/ODRAW/MSOCR.h \
|
||||
../XlsFormat/Logic/Biff_structures/ODRAW/MSO_enums.h \
|
||||
|
||||
@ -751,3 +751,4 @@
|
||||
#include "../XlsFormat/Logic/Biff_records/IMDATA.cpp"
|
||||
#include "../XlsFormat/Logic/Biff_structures/CFDatabar.cpp"
|
||||
#include "../XlsFormat/Logic/Biff_structures/CFGradient.cpp"
|
||||
#include "../XlsFormat/Logic/Biff_structures/SxAxis.cpp"
|
||||
|
||||
@ -4681,6 +4681,14 @@
|
||||
RelativePath="..\XlsFormat\Logic\Biff_structures\StyleXF.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\XlsFormat\Logic\Biff_structures\SxAxis.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\XlsFormat\Logic\Biff_structures\SxAxis.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\XlsFormat\Logic\Biff_structures\SyntaxPtg.cpp"
|
||||
>
|
||||
|
||||
@ -41,7 +41,7 @@ protected:
|
||||
void UncheckedSetKey(const byte *key, unsigned int length, const NameValuePairs ¶ms);
|
||||
virtual unsigned int GetDefaultDiscardBytes() const {return 0;}
|
||||
|
||||
FixedSizeSecBlock<byte, 256> m_state;
|
||||
FixedSizeSecBlock<byte, 512> m_state;
|
||||
byte m_x, m_y;
|
||||
};
|
||||
|
||||
|
||||
@ -382,7 +382,7 @@ namespace StreamUtils
|
||||
|
||||
pData[lLen] = 0;
|
||||
|
||||
std::string str(pData);
|
||||
std::string str(pData, lLen);
|
||||
|
||||
delete[] pData;
|
||||
return str;
|
||||
|
||||
@ -12,6 +12,7 @@
|
||||
#define OPEN_SSL_WARNING_ERR 1
|
||||
#define OPEN_SSL_WARNING_ALL_OK 2
|
||||
#define OPEN_SSL_WARNING_PASS 4
|
||||
#define OPEN_SSL_WARNING_NOVERIFY 8
|
||||
|
||||
class ICertificate;
|
||||
class Q_DECL_EXPORT ICertificateSelectDialogOpenSsl
|
||||
@ -45,6 +46,7 @@ private:
|
||||
std::wstring m_name;
|
||||
std::string m_date;
|
||||
std::string m_id;
|
||||
std::string m_rawData;
|
||||
|
||||
public:
|
||||
CCertificateInfo()
|
||||
@ -80,6 +82,15 @@ public:
|
||||
{
|
||||
m_id = id;
|
||||
}
|
||||
|
||||
std::string GetRawBase64()
|
||||
{
|
||||
return m_rawData;
|
||||
}
|
||||
void SetRawBase64(const std::string& data)
|
||||
{
|
||||
m_rawData = data;
|
||||
}
|
||||
};
|
||||
|
||||
class Q_DECL_EXPORT ICertificate
|
||||
@ -102,6 +113,7 @@ public:
|
||||
|
||||
virtual std::string GetDate() = 0;
|
||||
virtual std::string GetId() = 0;
|
||||
virtual int VerifySelf() = 0;
|
||||
|
||||
public:
|
||||
virtual std::string Sign(const std::string& sXml) = 0;
|
||||
|
||||
@ -1,5 +1,8 @@
|
||||
#include "./../include/OOXMLSigner.h"
|
||||
#include "./../src/XmlTransform.h"
|
||||
#include <cstdio>
|
||||
#include <ctime>
|
||||
#include <time.h>
|
||||
|
||||
class COOXMLSigner_private
|
||||
{
|
||||
@ -28,6 +31,20 @@ public:
|
||||
|
||||
m_date = L"2017-04-21T08:30:21Z";
|
||||
|
||||
std::time_t rawtime;
|
||||
std::tm* timeinfo;
|
||||
char buffer1[100];
|
||||
char buffer2[100];
|
||||
|
||||
std::time(&rawtime);
|
||||
timeinfo = std::gmtime(&rawtime);
|
||||
|
||||
std::strftime(buffer1, 100, "%Y-%m-%d", timeinfo);
|
||||
std::strftime(buffer2, 100, "%H:%M:%S", timeinfo);
|
||||
|
||||
std::string date = (std::string(buffer1) + "T" + std::string(buffer2) + "Z");
|
||||
m_date = NSFile::CUtf8Converter::GetUnicodeFromCharPtr(date);
|
||||
|
||||
m_signed_info.WriteString("<CanonicalizationMethod Algorithm=\"http://www.w3.org/TR/2001/REC-xml-c14n-20010315\"/>");
|
||||
m_signed_info.WriteString("<SignatureMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#rsa-sha1\"/>");
|
||||
}
|
||||
|
||||
@ -248,7 +248,13 @@ public:
|
||||
std::string sSignatureValue = U_TO_UTF8((m_node.ReadValueString(L"SignatureValue")));
|
||||
|
||||
if (!m_cert->Verify(sSignatureCalcValue, sSignatureValue, nSignatureMethod))
|
||||
m_valid = OOXML_SIGNATURE_INVALID;
|
||||
m_valid = OOXML_SIGNATURE_INVALID;
|
||||
else
|
||||
{
|
||||
int nCertVerify = m_cert->VerifySelf();
|
||||
if (OPEN_SSL_WARNING_NOVERIFY == nCertVerify)
|
||||
m_valid = OOXML_SIGNATURE_INVALID;
|
||||
}
|
||||
}
|
||||
|
||||
XmlUtils::CXmlNode GetObjectById(std::string sId)
|
||||
|
||||
@ -58,6 +58,7 @@ CCertificateInfo ICertificate::GetInfo()
|
||||
info.SetName(GetSignerName());
|
||||
info.SetDate(GetDate());
|
||||
info.SetId(GetId());
|
||||
info.SetRawBase64(GetCertificateBase64());
|
||||
return info;
|
||||
}
|
||||
|
||||
|
||||
@ -131,6 +131,11 @@ public:
|
||||
return GetNumber();
|
||||
}
|
||||
|
||||
virtual int VerifySelf()
|
||||
{
|
||||
return OPEN_SSL_WARNING_OK;
|
||||
}
|
||||
|
||||
public:
|
||||
virtual std::string Sign(const std::string& sXml)
|
||||
{
|
||||
|
||||
@ -328,6 +328,7 @@ public:
|
||||
RELEASEARRAYOBJECTS(pData);
|
||||
return (NULL == m_cert) ? false : true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -395,6 +396,8 @@ public:
|
||||
|
||||
if (!id.empty())
|
||||
arr.push_back(id);
|
||||
else if (3 == arr.size())
|
||||
arr.push_back("");
|
||||
|
||||
if (4 != arr.size())
|
||||
return false;
|
||||
@ -422,6 +425,27 @@ public:
|
||||
m_pDialog = pDialog;
|
||||
}
|
||||
|
||||
int VerifySelf()
|
||||
{
|
||||
if (NULL == m_cert)
|
||||
return OPEN_SSL_WARNING_NOVERIFY;
|
||||
|
||||
X509_STORE_CTX* ctx = X509_STORE_CTX_new();
|
||||
X509_STORE* store = X509_STORE_new();
|
||||
|
||||
X509_STORE_add_cert(store, m_cert);
|
||||
X509_STORE_CTX_init(ctx, store, m_cert, NULL);
|
||||
|
||||
int status = X509_verify_cert(ctx);
|
||||
int nErr = X509_STORE_CTX_get_error(ctx);
|
||||
std::string sErr(X509_verify_cert_error_string(nErr));
|
||||
|
||||
X509_STORE_free(store);
|
||||
X509_STORE_CTX_free(ctx);
|
||||
|
||||
return (1 == status) ? OPEN_SSL_WARNING_OK : OPEN_SSL_WARNING_NOVERIFY;
|
||||
}
|
||||
|
||||
protected:
|
||||
tm ASN1_GetTimeT(ASN1_TIME* time)
|
||||
{
|
||||
@ -714,6 +738,11 @@ std::string CCertificate_openssl::GetId()
|
||||
return m_internal->GetId();
|
||||
}
|
||||
|
||||
int CCertificate_openssl::VerifySelf()
|
||||
{
|
||||
return m_internal->VerifySelf();
|
||||
}
|
||||
|
||||
std::string CCertificate_openssl::Sign(const std::string& sXml)
|
||||
{
|
||||
return m_internal->Sign(sXml);
|
||||
|
||||
@ -26,6 +26,8 @@ public:
|
||||
|
||||
virtual std::string GetId();
|
||||
|
||||
virtual int VerifySelf();
|
||||
|
||||
public:
|
||||
virtual std::string Sign(const std::string& sXml);
|
||||
|
||||
|
||||
@ -49,6 +49,7 @@
|
||||
|
||||
#include "../../Common/DocxFormat/Source/Base/unicode_util.h"
|
||||
#include "../../Common/DocxFormat/Source/Base/Types_32.h"
|
||||
#include "../../ASCOfficeXlsFile2/source/XlsFormat/Crypt/rtl/cipher.h"
|
||||
|
||||
static const unsigned char encrVerifierHashInputBlockKey[8] = { 0xfe, 0xa7, 0xd2, 0x76, 0x3b, 0x4b, 0x9e, 0x79 };
|
||||
static const unsigned char encrVerifierHashValueBlockKey[8] = { 0xd7, 0xaa, 0x0f, 0x6d, 0x30, 0x61, 0x34, 0x4e };
|
||||
@ -216,17 +217,20 @@ _buf Hmac(_buf & buf, CRYPT_METHOD::_hashAlgorithm algorithm, std::string & pla
|
||||
|
||||
_buf HashAppend(_buf & hashBuf, _buf & block, CRYPT_METHOD::_hashAlgorithm algorithm)
|
||||
{//todooo переделать
|
||||
if (algorithm == CRYPT_METHOD::SHA1)
|
||||
if (algorithm == CRYPT_METHOD::MD5)
|
||||
{
|
||||
MD5 hash;
|
||||
|
||||
if (hashBuf.ptr && hashBuf.size > 0) hash.Update( hashBuf.ptr, hashBuf.size);
|
||||
if (block.ptr && block.size > 0) hash.Update( block.ptr , block.size);
|
||||
|
||||
SecByteBlock buffer(hash.DigestSize());
|
||||
hash.Final(buffer);
|
||||
|
||||
return _buf(buffer.BytePtr(), buffer.SizeInBytes());
|
||||
}
|
||||
else if (algorithm == CRYPT_METHOD::SHA1)
|
||||
{
|
||||
//MD5 hash;
|
||||
|
||||
//if (hashBuf.ptr && hashBuf.size > 0) hash.Update( hashBuf.ptr, hashBuf.size);
|
||||
//if (block.ptr && block.size > 0) hash.Update( block.ptr , block.size);
|
||||
|
||||
//SecByteBlock buffer(hash.DigestSize());
|
||||
//hash.Final(buffer);
|
||||
|
||||
//return _buf(buffer.BytePtr(), buffer.SizeInBytes());
|
||||
SHA1 hash;
|
||||
|
||||
if (hashBuf.ptr && hashBuf.size > 0) hash.Update( hashBuf.ptr, hashBuf.size);
|
||||
@ -282,30 +286,49 @@ _buf GenerateAgileKey(_buf & salt, _buf & password, _buf & blockKey, int hashSiz
|
||||
return _buf(pHashBuf.ptr, pHashBuf.size);
|
||||
}
|
||||
|
||||
_buf GenerateHashKey(_buf & salt, _buf & password, int hashSize, int spin, CRYPT_METHOD::_hashAlgorithm algorithm)
|
||||
_buf GenerateHashKey(_buf & salt, _buf & password, int hashSize, int spin, CRYPT_METHOD::_hashAlgorithm algorithm, int block_index = 0)
|
||||
{
|
||||
_buf empty (NULL, 0, false);
|
||||
_buf block ((unsigned char*)&block_index, 4, false);
|
||||
|
||||
_buf empty (NULL, 0, false);
|
||||
_buf pHashBuf = HashAppend(salt, password, algorithm);
|
||||
|
||||
int i = 0;
|
||||
for (i = 0; i < spin; i++)
|
||||
for (int i = 0; i < spin; i++)
|
||||
{
|
||||
_buf iterator((unsigned char*)&i, 4, false);
|
||||
pHashBuf = HashAppend(iterator, pHashBuf, algorithm);
|
||||
}
|
||||
i = 0;
|
||||
_buf iterator((unsigned char*)&i, 4, false);
|
||||
pHashBuf = HashAppend(pHashBuf, iterator, algorithm);
|
||||
|
||||
_buf derivedKey(64);
|
||||
for (int i = 0; i < derivedKey.size; i++)
|
||||
pHashBuf = HashAppend( pHashBuf, block, algorithm);
|
||||
|
||||
if (spin == 0)
|
||||
{
|
||||
derivedKey.ptr[i] = (i < pHashBuf.size ? 0x36 ^ pHashBuf.ptr[i] : 0x36);
|
||||
return _buf(pHashBuf.ptr, pHashBuf.size);
|
||||
}
|
||||
|
||||
pHashBuf = HashAppend(derivedKey, empty, algorithm);
|
||||
_buf derivedKey1(64);
|
||||
memset (derivedKey1.ptr, 0x36, 64);
|
||||
for (int i = 0; i < pHashBuf.size; i++)
|
||||
{
|
||||
derivedKey1.ptr[i] ^= pHashBuf.ptr[i];
|
||||
}
|
||||
|
||||
return _buf(pHashBuf.ptr, hashSize);
|
||||
_buf derivedKey2(64);
|
||||
memset (derivedKey2.ptr, 0x5c, 64);
|
||||
for (int i = 0; i < pHashBuf.size; i++)
|
||||
{
|
||||
derivedKey2.ptr[i] ^= pHashBuf.ptr[i];
|
||||
}
|
||||
|
||||
_buf pHashBuf1 = HashAppend(derivedKey1, empty, algorithm);
|
||||
_buf pHashBuf2 = HashAppend(derivedKey2, empty, algorithm);
|
||||
|
||||
_buf pHashBuf3(2 * hashSize);
|
||||
|
||||
memcpy(pHashBuf3.ptr + 0, pHashBuf1.ptr, hashSize);
|
||||
memcpy(pHashBuf3.ptr + hashSize, pHashBuf2.ptr, hashSize);
|
||||
|
||||
return _buf(pHashBuf3.ptr, pHashBuf3.size);
|
||||
}
|
||||
|
||||
bool EncryptCipher(_buf & key, _buf & iv, _buf & data_inp, _buf & data_out, CRYPT_METHOD::_cipherAlgorithm algorithm,
|
||||
@ -317,7 +340,12 @@ bool EncryptCipher(_buf & key, _buf & iv, _buf & data_inp, _buf & data_out, CRYP
|
||||
}
|
||||
else if (algorithm == CRYPT_METHOD::RC4)
|
||||
{
|
||||
return false;
|
||||
data_out.ptr = new unsigned char[data_inp.size];
|
||||
data_out.size = data_inp.size;
|
||||
|
||||
ARC4::Encryption rc4Encryption(key.ptr, key.size);
|
||||
rc4Encryption.ProcessData(data_out.ptr, data_inp.ptr, data_inp.size);
|
||||
|
||||
}
|
||||
else //AES
|
||||
{
|
||||
@ -353,19 +381,25 @@ bool EncryptCipher(_buf & key, _buf & iv, _buf & data_inp, _buf & data_out, CRYP
|
||||
|
||||
return true;
|
||||
}
|
||||
ARC4::Decryption rc4Decryption;
|
||||
//CipherARCFOUR rc4Decryption;
|
||||
|
||||
bool DecryptCipher(_buf & key, _buf & iv, _buf & data_inp, _buf & data_out, CRYPT_METHOD::_cipherAlgorithm algorithm,
|
||||
StreamTransformationFilter::BlockPaddingScheme padding = StreamTransformationFilter::NO_PADDING)
|
||||
{
|
||||
if (!data_out.ptr)
|
||||
{
|
||||
data_out = _buf(data_inp.size);
|
||||
}
|
||||
|
||||
if (algorithm == CRYPT_METHOD::XOR)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else if (algorithm == CRYPT_METHOD::RC4)
|
||||
{
|
||||
CryptoPP::ARC4 rc4(key.ptr, key.size);
|
||||
data_out.ptr = new unsigned char[data_inp.size];
|
||||
data_out.size = data_inp.size;
|
||||
rc4.ProcessData(data_out.ptr, data_inp.ptr, data_inp.size);
|
||||
//rc4Decryption.Decode(data_inp.ptr, data_inp.size, data_out.ptr, data_out.size);
|
||||
rc4Decryption.ProcessData(data_out.ptr, data_inp.ptr, data_inp.size);
|
||||
}
|
||||
else //AES
|
||||
{
|
||||
@ -386,10 +420,6 @@ bool DecryptCipher(_buf & key, _buf & iv, _buf & data_inp, _buf & data_out, CRY
|
||||
|
||||
if (!modeDecryption) return false;
|
||||
|
||||
if (!data_out.ptr)
|
||||
{
|
||||
data_out = _buf(data_inp.size);
|
||||
}
|
||||
StreamTransformationFilter stfDecryptor(*modeDecryption, new ArraySink( data_out.ptr, data_out.size), padding);
|
||||
|
||||
stfDecryptor.Put( data_inp.ptr, data_inp.size );
|
||||
@ -409,6 +439,10 @@ ECMADecryptor::ECMADecryptor()
|
||||
bVerify = false;
|
||||
}
|
||||
|
||||
ECMADecryptor::~ECMADecryptor()
|
||||
{
|
||||
}
|
||||
|
||||
bool ECMADecryptor::SetPassword(std::wstring _password)
|
||||
{
|
||||
bVerify = false;
|
||||
@ -416,55 +450,53 @@ bool ECMADecryptor::SetPassword(std::wstring _password)
|
||||
|
||||
if (password.empty()) return false;
|
||||
|
||||
_buf pPassword (password);
|
||||
_buf pSalt (cryptData.saltValue);
|
||||
_buf empty (NULL, 0, false);
|
||||
|
||||
_buf pEncVerInput (cryptData.encryptedVerifierInput);
|
||||
_buf pEncVerValue (cryptData.encryptedVerifierValue);
|
||||
|
||||
if (cryptData.bAgile)
|
||||
{
|
||||
_buf pPassword (password);
|
||||
_buf pSalt (cryptData.saltValue);
|
||||
_buf pInputBlockKey ((unsigned char*)encrVerifierHashInputBlockKey, 8);
|
||||
_buf pValueBlockKey ((unsigned char*)encrVerifierHashValueBlockKey, 8);
|
||||
_buf empty (NULL, 0, false);
|
||||
_buf pValueBlockKey ((unsigned char*)encrVerifierHashValueBlockKey, 8);
|
||||
|
||||
_buf pEncVerInput (cryptData.encryptedVerifierInput);
|
||||
_buf pEncVerValue (cryptData.encryptedVerifierValue);
|
||||
|
||||
_buf verifierInputKey = GenerateAgileKey( pSalt, pPassword, pInputBlockKey, cryptData.keySize, cryptData.spinCount, cryptData.hashAlgorithm );
|
||||
_buf decryptedVerifierHashInputBytes;
|
||||
_buf verifierInputKey = GenerateAgileKey( pSalt, pPassword, pInputBlockKey, cryptData.keySize, cryptData.spinCount, cryptData.hashAlgorithm );
|
||||
_buf verifierHashKey = GenerateAgileKey(pSalt, pPassword, pValueBlockKey, cryptData.keySize, cryptData.spinCount, cryptData.hashAlgorithm);
|
||||
|
||||
//--------------------------------------------
|
||||
_buf decryptedVerifierHashInputBytes;
|
||||
DecryptCipher(verifierInputKey, pSalt, pEncVerInput, decryptedVerifierHashInputBytes, cryptData.cipherAlgorithm);
|
||||
//--------------------------------------------
|
||||
|
||||
_buf hashBuf = HashAppend(decryptedVerifierHashInputBytes, empty, cryptData.hashAlgorithm);
|
||||
|
||||
//--------------------------------------------
|
||||
_buf decryptedVerifierHashBytes;
|
||||
|
||||
_buf verifierHashKey = GenerateAgileKey(pSalt, pPassword, pValueBlockKey, cryptData.keySize, cryptData.spinCount, cryptData.hashAlgorithm);
|
||||
_buf decryptedVerifierHashBytes;
|
||||
DecryptCipher(verifierHashKey, pSalt, pEncVerValue, decryptedVerifierHashBytes, cryptData.cipherAlgorithm);
|
||||
//--------------------------------------------
|
||||
bVerify = (decryptedVerifierHashBytes==hashBuf);
|
||||
}
|
||||
else
|
||||
{
|
||||
_buf pPassword (password);
|
||||
_buf pSalt (cryptData.saltValue);
|
||||
_buf empty (NULL, 0, false);
|
||||
_buf verifierKey = GenerateHashKey(pSalt, pPassword, cryptData.hashSize, cryptData.spinCount, cryptData.hashAlgorithm);
|
||||
CorrectHashSize(verifierKey, cryptData.keySize, 0);
|
||||
if (cryptData.keySize == 5)
|
||||
CorrectHashSize(verifierKey, 16, 0); //40-bit crypt key !!!
|
||||
|
||||
_buf pEncVerInput (cryptData.encryptedVerifierInput);
|
||||
_buf pEncVerValue (cryptData.encryptedVerifierValue);
|
||||
if (cryptData.cipherAlgorithm == CRYPT_METHOD::RC4)
|
||||
rc4Decryption.SetKey(verifierKey.ptr, verifierKey.size);
|
||||
|
||||
_buf hashKey = GenerateHashKey(pSalt, pPassword, cryptData.keySize, cryptData.spinCount, cryptData.hashAlgorithm);
|
||||
|
||||
//--------------------------------------------
|
||||
_buf decryptedVerifierHashInputBytes;
|
||||
DecryptCipher(hashKey, empty, pEncVerInput, decryptedVerifierHashInputBytes, cryptData.cipherAlgorithm);
|
||||
DecryptCipher(verifierKey, pSalt, pEncVerInput, decryptedVerifierHashInputBytes, cryptData.cipherAlgorithm);
|
||||
|
||||
//--------------------------------------------
|
||||
|
||||
_buf hashBuf = HashAppend(decryptedVerifierHashInputBytes, empty, cryptData.hashAlgorithm);
|
||||
|
||||
//--------------------------------------------
|
||||
_buf decryptedVerifierHashBytes;
|
||||
|
||||
DecryptCipher(hashKey, empty, pEncVerValue, decryptedVerifierHashBytes, cryptData.cipherAlgorithm);
|
||||
_buf decryptedVerifierHashBytes;
|
||||
DecryptCipher(verifierKey, pSalt, pEncVerValue, decryptedVerifierHashBytes, cryptData.cipherAlgorithm);
|
||||
|
||||
bVerify = (decryptedVerifierHashBytes==hashBuf);
|
||||
}
|
||||
@ -600,13 +632,41 @@ void ECMADecryptor::Decrypt(unsigned char* data_ptr, int data_size, unsigned ch
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
_buf hashKey = GenerateHashKey(pSalt, pPassword, cryptData.keySize, cryptData.spinCount, cryptData.hashAlgorithm);
|
||||
|
||||
_buf pInp(data_inp, size, false);
|
||||
_buf pOut(data_out, size, false);
|
||||
|
||||
DecryptCipher(hashKey, empty, pInp, pOut, cryptData.cipherAlgorithm);
|
||||
{
|
||||
if (cryptData.cipherAlgorithm == CRYPT_METHOD::RC4)
|
||||
{
|
||||
int i = 0, sz = 512, pos = 0;
|
||||
|
||||
while (pos < size)
|
||||
{
|
||||
if (pos + sz > size)
|
||||
sz = size - pos;
|
||||
|
||||
_buf hashKey = GenerateHashKey(pSalt, pPassword, cryptData.hashSize, cryptData.spinCount, cryptData.hashAlgorithm, i);
|
||||
CorrectHashSize(hashKey, cryptData.keySize, 0);
|
||||
if (cryptData.keySize == 5)
|
||||
CorrectHashSize(hashKey, 16, 0); //40-bit crypt key !!!
|
||||
|
||||
rc4Decryption.SetKey(hashKey.ptr, hashKey.size);
|
||||
|
||||
_buf pInp(data_inp + pos, sz, false);
|
||||
_buf pOut(data_out + pos, sz, false);
|
||||
|
||||
DecryptCipher(empty, empty, pInp, pOut, cryptData.cipherAlgorithm);
|
||||
|
||||
pos += sz; i++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_buf hashKey = GenerateHashKey(pSalt, pPassword, cryptData.hashSize, cryptData.spinCount, cryptData.hashAlgorithm);
|
||||
CorrectHashSize(hashKey, cryptData.keySize, 0);
|
||||
|
||||
_buf pInp(data_inp, size, false);
|
||||
_buf pOut(data_out, size, false);
|
||||
|
||||
DecryptCipher(hashKey, empty, pInp, pOut, cryptData.cipherAlgorithm);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -40,6 +40,7 @@ namespace CRYPT_METHOD
|
||||
{
|
||||
enum _hashAlgorithm
|
||||
{
|
||||
MD5,
|
||||
SHA1,
|
||||
SHA224,
|
||||
SHA256,
|
||||
@ -125,7 +126,7 @@ class ECMADecryptor : public Decryptor
|
||||
{
|
||||
public:
|
||||
ECMADecryptor();
|
||||
virtual ~ECMADecryptor(){}
|
||||
virtual ~ECMADecryptor();
|
||||
|
||||
void Decrypt (unsigned char* data, int size, unsigned char*& data_out);
|
||||
|
||||
|
||||
@ -874,7 +874,7 @@ namespace NExtractTools
|
||||
COfficePPTFile pptFile;
|
||||
|
||||
pptFile.put_TempDirectory(sTemp);
|
||||
return S_OK == pptFile.LoadFromFile(sFrom, sTo) ? 0 : AVS_FILEUTILS_ERROR_CONVERT;
|
||||
return S_OK == pptFile.LoadFromFile(sFrom, sTo, params.getPassword()) ? 0 : AVS_FILEUTILS_ERROR_CONVERT;
|
||||
}
|
||||
// ppt -> pptt
|
||||
int ppt2pptt (const std::wstring &sFrom, const std::wstring &sTo, const std::wstring &sTemp, InputParams& params)
|
||||
@ -905,7 +905,7 @@ namespace NExtractTools
|
||||
|
||||
pptFile.put_TempDirectory(sTemp);
|
||||
|
||||
if ( pptFile.LoadFromFile(sFrom, sTempUnpackedPPTX) != S_OK) return AVS_FILEUTILS_ERROR_CONVERT;
|
||||
if ( pptFile.LoadFromFile(sFrom, sTempUnpackedPPTX, params.getPassword()) != S_OK) return AVS_FILEUTILS_ERROR_CONVERT;
|
||||
|
||||
// convert unzipped pptx to unzipped pptt
|
||||
CPPTXFile *pptx_file = new CPPTXFile(NULL, NULL, NULL, NULL);
|
||||
|
||||
Reference in New Issue
Block a user