Moin Ralf,
da ich auch gerne solche Dinge versuche, habe ich mich mal ein wenig damit beschäftigt.
Ich habe mir jetzt mal ein paar Word-Dokumente in einem Hex-Editor eingelesen.
Alle müssten im Format 97-2003 gewesen sein (einmal Last Modified 1998, einmal 2003 und eine Testdatei habe ich in dem Format mit Word 2013 abgespeichert).
Bei allen beginnt FibBase am Offset 512.
Wichtig hierbei:
Die Daten werden im Intel-Format (Littel-Endian) gespeichert, dass heisst:
Die Kennung wIdent $A5EC steht dort in der Reihenfolge $ECA5.
Hier mal ein Beispiel:
Delphi-Quellcode:
type
TcsFibBase = packed record
wIdent : WORD; // $A5EC
nFib : WORD; // $00C1
wUnused1 : WORD;
wLID : WORD;
pnNext : WORD;
wBitField1 : WORD; // Eventuell zwei einzelne Byte und kein Word
nFibBack : WORD; // $00BF oder $00C1
lKey : DWORD;
envr : Byte;
bBitField2 : Byte;
wReserved3 : WORD;
wReserved4 : WORD;
dwReserved5 : DWORD;
dwReserved6 : DWORD;
end;
var
fs : TFileStream;
LFibBase : TcsFibBase;
begin
fs := TFileStream.Create('i:\temp\Testdokument.doc',fmOpenRead);
try
fs.Position := 512;
fs.Read(LFibBase,SizeOf(LFibBase));
if LFibBase.wIdent = $A5EC then ShowMessage('wIdent ist OK');
if LFibBase.nFib = $00C1 then ShowMessage('nFib ist OK');
if (LFibBase.nFibBack = $00BF) or (LFibBase.nFibBack = $00C1) then ShowMessage('nFibBack ist OK');
finally
fs.Free;
end;
end;