Files
DocumentServer-v-9.2.0/core/MsBinaryFile/DocFile/FileInformationBlock.h
Yajbir Singh f1b860b25c
Some checks failed
check / markdownlint (push) Has been cancelled
check / spellchecker (push) Has been cancelled
updated
2025-12-11 19:03:17 +05:30

535 lines
16 KiB
C++

/*
* (c) Copyright Ascensio System SIA 2010-2023
*
* 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 20A-6 Ernesta Birznieka-Upish
* street, Riga, Latvia, EU, LV-1050.
*
* 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 "VirtualStreamReader.h"
#include "../XlsFile/Format/Crypt/Decryptor.h"
namespace DocFileFormat
{
typedef enum FibVersion
{
Fib1983 = 0x002d, // WinWord 2
Fib1985 = 0x003F, //
//---------------------------------------------------------
Fib1989 = 0x0045, //
Fib1993 = 0x0065, // Word 6.0
Fib1995 = 0x0068, // Word 7.0 (95)
//---------------------------------------------------------
Fib1996 = 0x0069, // Word 8.0 (97)
Fib1997 = 0x00C1,
Fib2000 = 0x00D9,
Fib2002 = 0x0101,
Fib2003 = 0x010C,
Fib2007 = 0x0112
} FibVersion;
typedef struct FibBase
{
FibBase() :
wIdent(0), nFib(Fib1997), lid(0), pnNext(0), fDot(false), fGlsy(false), fComplex(false), fHasPic(false),
cQuickSaves(0), fEncrypted(false), fWhichTblStm(false), fReadOnlyRecommended(false), fWriteReservation(false),
fExtChar(false), fLoadOverwrite(false), fFarEast(false), fObfuscation(false), nFibBack(0), lKey(0), envr(0), fMac(false),
fEmptySpecial(false), fLoadOverridePage(false), fFutureSavedUndo(false), fWord97Saved(false), fcMin(0), fcMac(0) {}
//------------------------------------------------------------
WORD wIdent;
FibVersion nFib;
WORD lid;
WORD pnNext;
bool fDot;
bool fGlsy;
bool fComplex;
bool fHasPic;
WORD cQuickSaves;
bool fEncrypted;
bool fWhichTblStm;
bool fReadOnlyRecommended;
bool fWriteReservation;
bool fExtChar;
bool fLoadOverwrite;
bool fFarEast;
bool fObfuscation;
WORD nFibBack;
int lKey;
unsigned char envr;
bool fMac;
bool fEmptySpecial;
bool fLoadOverridePage;
bool fFutureSavedUndo;
bool fWord97Saved;
int fcMin;
int fcMac;
} FibBase;
typedef struct RgW97
{
WORD lidFE;
} RgW97;
typedef struct RgLw97
{
int cbMac = 0;
int ccpText = 0;
int ccpFtn = 0;
int ccpHdr = 0;
int ccpAtn = 0;
int ccpEdn = 0;
int ccpTxbx = 0;
int ccpHdrTxbx = 0;
} RgLw97;
typedef struct FibWord2
{
unsigned int Spare = 0;
unsigned short rgwSpare0[3];
unsigned int fcPlcMcr = 0;
unsigned int lcbPlcMcr = 0;
unsigned int fcPrEnv = 0;
unsigned int lcbPrEnv = 0;
unsigned int fcSpare5 = 0;
unsigned int lcbSpare5 = 0;
unsigned int fcSpare6 = 0;
unsigned int lcbSpare6 = 0;
unsigned int wSpare4 = 0;
unsigned int pnChpFirst = 0;
unsigned int pnPapFirst = 0;
unsigned int cpnBteChp = 0;
unsigned int cpnBtePap = 0;
} FibWord2;
typedef struct FibWord97
{
unsigned int fcStshfOrig = 0;
unsigned int lcbStshfOrig = 0;
unsigned int fcStshf = 0;
unsigned int lcbStshf = 0;
unsigned int fcPlcffndRef = 0;
unsigned int lcbPlcffndRef = 0;
unsigned int fcPlcffndTxt = 0;
unsigned int lcbPlcffndTxt = 0;
unsigned int fcPlcfandRef = 0;
unsigned int lcbPlcfandRef = 0;
unsigned int fcPlcfandTxt = 0;
unsigned int lcbPlcfandTxt = 0;
unsigned int fcPlcfSed = 0;
unsigned int lcbPlcfSed = 0;
unsigned int fcPlcPad = 0;
unsigned int lcbPlcPad = 0;
unsigned int fcPlcfPhe = 0;
unsigned int lcbPlcfPhe = 0;
unsigned int fcSttbfGlsy = 0;
unsigned int lcbSttbfGlsy = 0;
unsigned int fcPlcfGlsy = 0;
unsigned int lcbPlcfGlsy = 0;
unsigned int fcPlcfHdd = 0;
unsigned int lcbPlcfHdd = 0;
unsigned int fcPlcfBteChpx = 0;
unsigned int lcbPlcfBteChpx = 0;
unsigned int fcPlcfBtePapx = 0;
unsigned int lcbPlcfBtePapx = 0;
unsigned int fcPlcfSea = 0;
unsigned int lcbPlcfSea = 0;
unsigned int fcSttbfFfn = 0;
unsigned int lcbSttbfFfn = 0;
unsigned int fcPlcfFldMom = 0;
unsigned int lcbPlcfFldMom = 0;
unsigned int fcPlcfFldHdr = 0;
unsigned int lcbPlcfFldHdr = 0;
unsigned int fcPlcfFldFtn = 0;
unsigned int lcbPlcfFldFtn = 0;
unsigned int fcPlcfFldAtn = 0;
unsigned int lcbPlcfFldAtn = 0;
unsigned int fcPlcfFldMcr = 0;
unsigned int lcbPlcfFldMcr = 0;
unsigned int fcSttbfBkmk = 0;
unsigned int lcbSttbfBkmk = 0;
unsigned int fcPlcfBkf = 0;
unsigned int lcbPlcfBkf = 0;
unsigned int fcPlcfBkl = 0;
unsigned int lcbPlcfBkl = 0;
unsigned int fcCmds = 0;
unsigned int lcbCmds = 0;
unsigned int fcSttbfMcr = 0;
unsigned int lcbSttbfMcr = 0;
unsigned int fcPrDrvr = 0;
unsigned int lcbPrDrvr = 0;
unsigned int fcPrEnvPort = 0;
unsigned int lcbPrEnvPort = 0;
unsigned int fcPrEnvLand = 0;
unsigned int lcbPrEnvLand = 0;
unsigned int fcWss = 0;
unsigned int lcbWss = 0;
unsigned int fcDop = 0;
unsigned int lcbDop = 0;
unsigned int fcSttbfAssoc = 0;
unsigned int lcbSttbfAssoc = 0;
unsigned int fcClx = 0;
unsigned int lcbClx = 0;
unsigned int fcPlcfPgdFtn = 0;
unsigned int lcbPlcfPgdFtn = 0;
unsigned int fcAutosaveSource = 0;
unsigned int lcbAutosaveSource = 0;
unsigned int fcGrpXstAtnOwners = 0;
unsigned int lcbGrpXstAtnOwners = 0;
unsigned int fcSttbfAtnBkmk = 0;
unsigned int lcbSttbfAtnBkmk = 0;
unsigned int fcPlcSpaMom = 0;
unsigned int lcbPlcSpaMom = 0;
unsigned int fcPlcSpaHdr = 0;
unsigned int lcbPlcSpaHdr = 0;
unsigned int fcPlcfAtnBkf = 0;
unsigned int lcbPlcfAtnBkf = 0;
unsigned int fcPlcfAtnBkl = 0;
unsigned int lcbPlcfAtnBkl = 0;
unsigned int fcPms = 0;
unsigned int lcbPms = 0;
unsigned int fcFormFldSttbs = 0;
unsigned int lcbFormFldSttbs = 0;
unsigned int fcPlcfendRef = 0;
unsigned int lcbPlcfendRef = 0;
unsigned int fcPlcfendTxt = 0;
unsigned int lcbPlcfendTxt = 0;
unsigned int fcPlcfFldEdn = 0;
unsigned int lcbPlcfFldEdn = 0;
unsigned int fcDggInfo = 0;
unsigned int lcbDggInfo = 0;
unsigned int fcSttbfRMark = 0;
unsigned int lcbSttbfRMark = 0;
unsigned int fcSttbfCaption = 0;
unsigned int lcbSttbfCaption = 0;
unsigned int fcSttbfAutoCaption = 0;
unsigned int lcbSttbfAutoCaption = 0;
unsigned int fcPlcfWkb = 0;
unsigned int lcbPlcfWkb = 0;
unsigned int fcPlcfSpl = 0;
unsigned int lcbPlcfSpl = 0;
unsigned int fcPlcftxbxTxt = 0;
unsigned int lcbPlcftxbxTxt = 0;
unsigned int fcPlcfFldTxbx = 0;
unsigned int lcbPlcfFldTxbx = 0;
unsigned int fcPlcfHdrtxbxTxt = 0;
unsigned int lcbPlcfHdrtxbxTxt = 0;
unsigned int fcPlcffldHdrTxbx = 0;
unsigned int lcbPlcffldHdrTxbx = 0;
unsigned int fcStwUser = 0;
unsigned int lcbStwUser = 0;
unsigned int fcSttbTtmbd = 0;
unsigned int lcbSttbTtmbd = 0;
unsigned int fcCookieData = 0;
unsigned int lcbCookieData = 0;
unsigned int fcPgdMotherOldOld = 0;
unsigned int lcbPgdMotherOldOld = 0;
unsigned int fcBkdMotherOldOld = 0;
unsigned int lcbBkdMotherOldOld = 0;
unsigned int fcPgdFtnOldOld = 0;
unsigned int lcbPgdFtnOldOld = 0;
unsigned int fcBkdFtnOldOld = 0;
unsigned int lcbBkdFtnOldOld = 0;
unsigned int fcPgdEdnOldOld = 0;
unsigned int lcbPgdEdnOldOld = 0;
unsigned int fcBkdEdnOldOld = 0;
unsigned int lcbBkdEdnOldOld = 0;
unsigned int fcSttbfIntlFld = 0;
unsigned int lcbSttbfIntlFld = 0;
unsigned int fcRouteSlip = 0;
unsigned int lcbRouteSlip = 0;
unsigned int fcSttbSavedBy = 0;
unsigned int lcbSttbSavedBy = 0;
unsigned int fcSttbFnm = 0;
unsigned int lcbSttbFnm = 0;
unsigned int fcPlfLst = 0;
unsigned int lcbPlfLst = 0;
unsigned int fcPlfLfo = 0;
unsigned int lcbPlfLfo = 0;
unsigned int fcPlcfTxbxBkd = 0;
unsigned int lcbPlcfTxbxBkd = 0;
unsigned int fcPlcfTxbxHdrBkd = 0;
unsigned int lcbPlcfTxbxHdrBkd = 0;
unsigned int fcDocUndoWord9 = 0;
unsigned int lcbDocUndoWord9 = 0;
unsigned int fcRgbUse = 0;
unsigned int lcbRgbUse = 0;
unsigned int fcUsp = 0;
unsigned int lcbUsp = 0;
unsigned int fcUskf = 0;
unsigned int lcbUskf = 0;
unsigned int fcPlcupcRgbUse = 0;
unsigned int lcbPlcupcRgbUse = 0;
unsigned int fcPlcupcUsp = 0;
unsigned int lcbPlcupcUsp = 0;
unsigned int fcSttbGlsyStyle = 0;
unsigned int lcbSttbGlsyStyle = 0;
unsigned int fcPlgosl = 0;
unsigned int lcbPlgosl = 0;
unsigned int fcPlcocx = 0;
unsigned int lcbPlcocx = 0;
unsigned int fcPlcfBteLvc = 0;
unsigned int lcbPlcfBteLvc = 0;
unsigned int dwLowDateTime = 0;
unsigned int dwHighDateTime = 0;
unsigned int fcPlcfLvcPre10 = 0;
unsigned int lcbPlcfLvcPre10 = 0;
unsigned int fcPlcfAsumy = 0;
unsigned int lcbPlcfAsumy = 0;
unsigned int fcPlcfGram = 0;
unsigned int lcbPlcfGram = 0;
unsigned int fcSttbListNames = 0;
unsigned int lcbSttbListNames = 0;
unsigned int fcSttbfUssr = 0;
unsigned int lcbSttbfUssr = 0;
} FibWord97;
typedef struct FibWord2000
{
unsigned int fcPlcfTch = 0;
unsigned int lcbPlcfTch = 0;
unsigned int fcRmdThreading = 0;
unsigned int lcbRmdThreading = 0;
unsigned int fcMid = 0;
unsigned int lcbMid = 0;
unsigned int fcSttbRgtplc = 0;
unsigned int lcbSttbRgtplc = 0;
unsigned int fcMsoEnvelope = 0;
unsigned int lcbMsoEnvelope = 0;
unsigned int fcPlcfLad = 0;
unsigned int lcbPlcfLad = 0;
unsigned int fcRgDofr = 0;
unsigned int lcbRgDofr = 0;
unsigned int fcPlcosl = 0;
unsigned int lcbPlcosl = 0;
unsigned int fcPlcfCookieOld = 0;
unsigned int lcbPlcfCookieOld = 0;
unsigned int fcPgdMotherOld = 0;
unsigned int lcbPgdMotherOld = 0;
unsigned int fcBkdMotherOld = 0;
unsigned int lcbBkdMotherOld = 0;
unsigned int fcPgdFtnOld = 0;
unsigned int lcbPgdFtnOld = 0;
unsigned int fcBkdFtnOld = 0;
unsigned int lcbBkdFtnOld = 0;
unsigned int fcPgdEdnOld = 0;
unsigned int lcbPgdEdnOld = 0;
unsigned int fcBkdEdnOld = 0;
unsigned int lcbBkdEdnOld = 0;
} FibWord2000;
typedef struct FibWord2002
{
unsigned int fcPlcfPgp = 0;
unsigned int lcbPlcfPgp = 0;
unsigned int fcPlcfuim = 0;
unsigned int lcbPlcfuim = 0;
unsigned int fcPlfguidUim = 0;
unsigned int lcbPlfguidUim = 0;
unsigned int fcAtrdExtra = 0;
unsigned int lcbAtrdExtra = 0;
unsigned int fcPlrsid = 0;
unsigned int lcbPlrsid = 0;
unsigned int fcSttbfBkmkFactoid = 0;
unsigned int lcbSttbfBkmkFactoid = 0;
unsigned int fcPlcfBkfFactoid = 0;
unsigned int lcbPlcfBkfFactoid = 0;
unsigned int fcPlcfcookie = 0;
unsigned int lcbPlcfcookie = 0;
unsigned int fcPlcfBklFactoid = 0;
unsigned int lcbPlcfBklFactoid = 0;
unsigned int fcFactoidData = 0;
unsigned int lcbFactoidData = 0;
unsigned int fcDocUndo = 0;
unsigned int lcbDocUndo = 0;
unsigned int fcSttbfBkmkFcc = 0;
unsigned int lcbSttbfBkmkFcc = 0;
unsigned int fcPlcfBkfFcc = 0;
unsigned int lcbPlcfBkfFcc = 0;
unsigned int fcPlcfBklFcc = 0;
unsigned int lcbPlcfBklFcc = 0;
unsigned int fcSttbfbkmkBPRepairs = 0;
unsigned int lcbSttbfbkmkBPRepairs = 0;
unsigned int fcPlcfbkfBPRepairs = 0;
unsigned int lcbPlcfbkfBPRepairs = 0;
unsigned int fcPlcfbklBPRepairs = 0;
unsigned int lcbPlcfbklBPRepairs = 0;
unsigned int fcPmsNew = 0;
unsigned int lcbPmsNew = 0;
unsigned int fcODSO = 0;
unsigned int lcbODSO = 0;
unsigned int fcPlcfpmiOldXP = 0;
unsigned int lcbPlcfpmiOldXP = 0;
unsigned int fcPlcfpmiNewXP = 0;
unsigned int lcbPlcfpmiNewXP = 0;
unsigned int fcPlcfpmiMixedXP = 0;
unsigned int lcbPlcfpmiMixedXP = 0;
unsigned int fcPlcffactoid = 0;
unsigned int lcbPlcffactoid = 0;
unsigned int fcPlcflvcOldXP = 0;
unsigned int lcbPlcflvcOldXP = 0;
unsigned int fcPlcflvcNewXP = 0;
unsigned int lcbPlcflvcNewXP = 0;
unsigned int fcPlcflvcMixedXP = 0;
unsigned int lcbPlcflvcMixedXP = 0;
} FibWord2002;
typedef struct FibWord2003
{
unsigned int fcHplxsdr = 0;
unsigned int lcbHplxsdr = 0;
unsigned int fcSttbfBkmkSdt = 0;
unsigned int lcbSttbfBkmkSdt = 0;
unsigned int fcPlcfBkfSdt = 0;
unsigned int lcbPlcfBkfSdt = 0;
unsigned int fcPlcfBklSdt = 0;
unsigned int lcbPlcfBklSdt = 0;
unsigned int fcCustomXForm = 0;
unsigned int lcbCustomXForm = 0;
unsigned int fcSttbfBkmkProt = 0;
unsigned int lcbSttbfBkmkProt = 0;
unsigned int fcPlcfBkfProt = 0;
unsigned int lcbPlcfBkfProt = 0;
unsigned int fcPlcfBklProt = 0;
unsigned int lcbPlcfBklProt = 0;
unsigned int fcSttbProtUser = 0;
unsigned int lcbSttbProtUser = 0;
unsigned int fcPlcfpmiOld = 0;
unsigned int lcbPlcfpmiOld = 0;
unsigned int fcPlcfpmiOldInline = 0;
unsigned int lcbPlcfpmiOldInline = 0;
unsigned int fcPlcfpmiNew = 0;
unsigned int lcbPlcfpmiNew = 0;
unsigned int fcPlcfpmiNewInline = 0;
unsigned int lcbPlcfpmiNewInline = 0;
unsigned int fcPlcflvcOld = 0;
unsigned int lcbPlcflvcOld = 0;
unsigned int fcPlcflvcOldInline = 0;
unsigned int lcbPlcflvcOldInline = 0;
unsigned int fcPlcflvcNew = 0;
unsigned int lcbPlcflvcNew = 0;
unsigned int fcPlcflvcNewInline = 0;
unsigned int lcbPlcflvcNewInline = 0;
unsigned int fcPgdMother = 0;
unsigned int lcbPgdMother = 0;
unsigned int fcBkdMother = 0;
unsigned int lcbBkdMother = 0;
unsigned int fcAfdMother = 0;
unsigned int lcbAfdMother = 0;
unsigned int fcPgdFtn = 0;
unsigned int lcbPgdFtn = 0;
unsigned int fcBkdFtn = 0;
unsigned int lcbBkdFtn = 0;
unsigned int fcAfdFtn = 0;
unsigned int lcbAfdFtn = 0;
unsigned int fcPgdEdn = 0;
unsigned int lcbPgdEdn = 0;
unsigned int fcBkdEdn = 0;
unsigned int lcbBkdEdn = 0;
unsigned int fcAfdEdn = 0;
unsigned int lcbAfdEdn = 0;
unsigned int fcAfd = 0;
unsigned int lcbAfd = 0;
} FibWord2003;
typedef struct FibWord2007
{
unsigned int fcPlcfmthd = 0;
unsigned int lcbPlcfmthd = 0;
unsigned int fcSttbfBkmkMoveFrom = 0;
unsigned int lcbSttbfBkmkMoveFrom = 0;
unsigned int fcPlcfBkfMoveFrom = 0;
unsigned int lcbPlcfBkfMoveFrom = 0;
unsigned int fcPlcfBklMoveFrom = 0;
unsigned int lcbPlcfBklMoveFrom = 0;
unsigned int fcSttbfBkmkMoveTo = 0;
unsigned int lcbSttbfBkmkMoveTo = 0;
unsigned int fcPlcfBkfMoveTo = 0;
unsigned int lcbPlcfBkfMoveTo = 0;
unsigned int fcPlcfBklMoveTo = 0;
unsigned int lcbPlcfBklMoveTo = 0;
unsigned int fcSttbfBkmkArto = 0;
unsigned int lcbSttbfBkmkArto = 0;
unsigned int fcPlcfBkfArto = 0;
unsigned int lcbPlcfBkfArto = 0;
unsigned int fcPlcfBklArto = 0;
unsigned int lcbPlcfBklArto = 0;
unsigned int fcArtoData = 0;
unsigned int lcbArtoData = 0;
unsigned int fcOssTheme = 0;
unsigned int lcbOssTheme = 0;
unsigned int fcColorSchemeMapping = 0;
unsigned int lcbColorSchemeMapping = 0;
} FibWord2007;
struct FibNew
{
FibNew() : nFibNew(Fib1997), cQuickSavesNew(0), lidThemeOther(0), lidThemeFE(0), lidThemeCS(0) {}
FibVersion nFibNew;
WORD cQuickSavesNew;
WORD lidThemeOther;
WORD lidThemeFE;
WORD lidThemeCS;
};
class FileInformationBlock
{
public:
int m_nWordVersion;
int m_CodePage;
int m_CodePageSaved;
FibBase m_FibBase;
RgW97 m_RgW97;
RgLw97 m_RgLw97;
FibWord2 m_FibWord2;
FibWord97 m_FibWord97;
FibWord2000 m_FibWord2000;
FibWord2002 m_FibWord2002;
FibWord2003 m_FibWord2003;
FibWord2007 m_FibWord2007;
FibNew m_FibNew;
WORD csw;
WORD cslw;
WORD cbRgFcLcb;
WORD cswNew;
void reset( VirtualStreamReader reader );
FileInformationBlock( VirtualStreamReader reader );
};
}