/* File: ole.h Copyright (C) 2006 Christophe GRENIER This software is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _OLE_H #define _OLE_H #ifdef __cplusplus extern "C" { #endif #define SPECIAL_BLOCK - 3 #define END_OF_CHAIN - 2 #define UNUSED - 1 #define NO_ENTRY 0 #define STORAGE 1 #define STREAM 2 #define ROOT 5 #define SHORT_BLOCK 3 #define FAT_START 0x4c #define OUR_BLK_SIZE 512 #define DIRS_PER_BLK 4 struct OLE_HDR { char magic[8]; /*0*/ char clsid[16]; /*8*/ uint16_t uMinorVersion; /*24*/ uint16_t uDllVersion; /*26*/ uint16_t uByteOrder; /*28*/ uint16_t uSectorShift; /*30*/ uint16_t uMiniSectorShift; /*32*/ uint16_t reserved; /*34*/ uint32_t reserved1; /*36*/ uint32_t csectDir; /*40 Number of sectors in directory chains for 4KB sectors */ uint32_t num_FAT_blocks; /*44*/ uint32_t root_start_block; /*48*/ uint32_t dfsignature; /*52*/ uint32_t miniSectorCutoff; /*56*/ uint32_t MiniFat_block; /*60 first sec in the mini fat chain*/ uint32_t csectMiniFat; /*64 number of sectors in the minifat */ uint32_t FAT_next_block; /*68*/ uint32_t num_extra_FAT_blocks; /*72*/ /* FAT block list starts here !! first 109 entries */ } __attribute__ ((gcc_struct, __packed__)); struct OLE_DIR { char name[64]; // 0 uint16_t namsiz; // 64 char type; // 66 char bflags; // 67: 0 or 1 uint32_t prev_dirent; // 68 uint32_t next_dirent; // 72 uint32_t sidChild; // 76 char clsid[16]; // 80 uint32_t userFlags; // 96 int32_t secs1; // 100 int32_t days1; // 104 int32_t secs2; // 108 int32_t days2; // 112 uint32_t start_block; // 116 starting SECT of stream uint32_t size; // 120 int16_t reserved; // 124 must be 0 int16_t padding; // 126 must be 0 } __attribute__ ((gcc_struct, __packed__)); struct DIRECTORY { char name[64]; int32_t type; int32_t level; int32_t start_block; int32_t size; int32_t next; int32_t prev; int32_t dir; int32_t s1; int32_t s2; int32_t d1; int32_t d2; }; #ifdef __cplusplus } /* closing brace for extern "C" */ #endif #endif