复合二进制文档(Compound Document File)解析

复合文档(Compound Document)是一种不仅包含文本而且包括图形、电子表格数据、声音、视频图象以及其它信息的文档。可以把复合文档想象成一个所有者,它装着文本、图形以及多媒体信息如声音和图象。目前建立复合文档的趋势是使用面向对象技术,在这里,非标准信息如图像和声音可以作为独立的、自包含式对象包含在文档中。Microsoft Windows就是使用这种技术,叫做―OLE2 storage file format 或―Microsoft Office compatible storage file format。 

可以用百度搜索 "" 查找相关资料,但是我找了很久,都是介绍格式之类的,没有对其结构解析的源代码,所以就自己动手写了一下,便于理解复合文档到底是怎么设计的。初步的理解就是:这种文件格式按照windows的目录结构来设计的,什么意思呢,比如说:你的电脑上有3个盘符,分别是 "C:/","D:/","E:/",这就是3个根目录,假如D盘目录下面有1个叫test1.txt的文件和一个叫"music"的文件夹,并且该文件夹下面有一个叫"一万个舍不得.mp3"的文件,那么这个目录结构就是:


                                  ["D:/"]

                                /           \

                   test1.txt        [music]

                                       /                 \

                "万万没想到.flv"        "一万个舍不得.mp3"

而复合文档就是按照上面的方法设计的,例如有一个叫"示例.doc"的文件,而这个文件是用复合文档格式存储数据的,里面含有txt文本数据和mp3数据。下面就是怎么区分这两种数据的问题,每个复合文档文件以512个字节为单位,被分成一块一块的,这个块就叫"sector"(中文就是"扇区"的意思),所有块都有一个唯一编号,依次为:

0x00000000: [sector -1] [size=0x200=512 byte]  ==> Compound Document Header

0x00000200: [sector 0] [size=0x200=512 byte]

0x00000400: [sector 1] [size=0x200=512 byte]

0x00000600: [sector 2] [size=0x200=512 byte]

... ...

0x00000000: [sector n] [size=0x200=512 byte]

========================================================

而每个sector还可以被分成4个short-sector(短扇区),每个short-sector占2^6=64字节,这个6是存在"sector -1"里面的,需要注意的是,不是所有的sector都被细分成4个short-sector,如果某个stream(文件流)占用的磁盘小于0x1000=4096 byte的话,那么这个文件就一定被存放在一个个的short-sector里面了,每个stream的大小信息,是被保存在某个Storage_Directory_Entry里面的,每个Storage_Directory_Entry占128字节,并且Storage_Directory_Entry必须被放在一个个sector(注意:不是short-sector)中,就是说一个sector可以存放512/128=4个Storage_Directory_Entry记录,比如说上面的"D:/"这个stream会占一个Storage_Directory_Entry, test1.txt ,[music],"万万没想到.flv" , "一万个舍不得.mp3",这4个也一样,所以至少需要2个sector才能装下这5个stream。而这2个sector不一定是连续的,可以是sector 23, 和 sector 40这两个,也可能是sector 2,sector 6这两个,具体是哪两个,则需要从一个叫 MSAT(主扇区配置表)里面获得,而这个MSAT也是存放在一个个的sector里面的,MSAT的第1个sector ID号,保存在sector -1里面(即Compound Document Header里面),除了MSAT还有一个叫SSAT(短扇区表)来存储short-sector-chain,SSAT的第1个sector ID号,也保存在sector -1里面的。需要说明的是MSAT和SSAT的作用相当于C语言里面的链表,就是说一个stream代表一个链条(chain),上面5个stream就会有5个链条.stream大于4096 byte的需要到MSAT chain里面去查找,小于4096 byte的需要到SSAT里面去找,特别特别需要注意的是MSAT 和SSAT都是用数组(每个元素占4个byte)形式存放的,例如:

MSAT_chain[0]=-3 (表示sector 0存放的是MSAT)
MSAT_chain[1]=-1 (表示sector 1未使用)
MSAT_chain[2]=-2 (表示一个链条结束了)
MSAT_chain[3]=4
MSAT_chain[4]=5
MSAT_chain[5]=6
MSAT_chain[6]=7
MSAT_chain[7]=8
MSAT_chain[8]=9
MSAT_chain[9]=-2 (表示一个链条结束了)
MSAT_chain[10]=11
MSAT_chain[11]=-2 (表示一个链条结束了)
MSAT_chain[12]=-1 (表示sector 12未使用)

则 2->-2是一个链条,

3->4->5->6->7->8->9->-2是一个链条,

10->11->-2是一个链条

=============================

对于SSAT,例如:

0->1->2->3->...->45->-2是一个链条,

===============================

通过上面链条的比较,你会发现怎么MSAT和SSAT的链条都是从0开始计数的,那我怎么知道sector 3是不是short-sector呢,最开始我也被这个问题困扰,后来才知道Root Storage Entry是专门用来保存short-sector信息的,就是说你可以利用Root Storage Entry里面的sid_of_first_sector,在MSAT里面去找到该链条的所有sector,而这所有的sector都是被分割成short-sector的,真特么绕啊。

另外计算某个 sector n 在复合文档中的绝对位置公式是: sector_addr= (n * 512) byte

============================================================

附件是test.bin的原始文件,用"DFVIEW.EXE"查看该文件的截图如下:



下面是一部分C代码:

//作者:过客
//邮箱:386520874@qq.com
//日期:2014.01.24

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef unsigned char byte;

long file_addr=0;

#define Free_SID 0xFFFFFFFF //–1 Free sector, may exist in the file, but is not part of any stream
#define End_Of_Chain_SID 0xFFFFFFFE //–2 Trailing SID in a SID chain
#define SAT_SID 0xFFFFFFFD //–3 Sector is used by the sector allocation table
#define MSAT_SID 0xFFFFFFFC //–4 Sector is used by the master sector allocation table

struct Compound_Binary_File_Header
{
	byte compound_file_id[8]; //0 8 Compound document file identifier: D0 CF 11 E0 A1 B1 1A E1 
	byte class_id[16]; //8 16 Unique identifier (UID) of this file, class id (set with WriteClassStg, retrieved with GetClassFile/ReadClassStg)
	byte minor_version[2]; //24 2 minor version number of the file format (most used is 003EH)
	byte major_version[2]; //26 2 major version number of the file format (most used is 0003H)
	byte byte_order[2]; //28 2 Byte order identifier :FEH FFH = Little-Endian FFH FEH = Big-Endian 
	byte size_of_a_master_sector[2]; //30 2 Size of a sector in the compound document file in power-of-two (ssz), real sector size is sec_size = 2ssz bytes (most used value is 9 which means 512 bytes, minimum value is 7 which means 128 bytes) 
	byte size_of_a_short_sector[2]; //32 2 Size of a short-sector in the short-stream container stream in power-of-two (sssz), real short-sector size is short_sec_size = 2sssz bytes (most used value is 6 which means 64 bytes, maximum value is sector size ssz, see above)
	byte reserved[2]; //34 2 Not used
	byte reserved1[4]; //36 4 Not used
	byte reserved2[4]; //40 4 Not used
	byte number_of_sector_SAT[4]; //44 4 Total number of sectors used for the sector allocation table
	byte first_sector_of_directory_stream[4]; //48 4 SID of first sector of the directory stream, first sector in the Directory chain
	byte signature[4]; //52 4 Not used, signature used for transactionin: must be zero. The reference implementation does not support transactioning
	byte min_size_of_a_standard_stream[4]; //56 4 Minimum size of a standard stream (in bytes, most used size is 4096 bytes), streams smaller than this value are stored as short-streams 
	byte first_sector_of_short_sector_SSAT[4]; //60 4 SID of first sector of the short-sector allocation table, or –2 (End Of Chain SID) if not extant 
	byte total_number_of_short_sector_SSAT[4]; //64 4 Total number of sectors used for the short-sector allocation table
	byte first_sector_of_master_sector_MSAT[4]; //68 4 SID of first sector of the master sector allocation table, or –2 (End Of Chain SID) if no additional sectors used 
	byte total_number_of_master_sector_MSAT[4]; //72 4 Total number of sectors used for the master sector allocation table
	byte first_109_master_sector_MSAT[436]; //76 436 First part of the master sector allocation table containing 109 SIDs
};

typedef enum tagSTGTY
{
	TGTY_INVALID = 0,
	STGTY_STORAGE = 1,
	STGTY_STREAM = 2,
	STGTY_LOCKBYTES = 3,
	STGTY_PROPERTY = 4,
	STGTY_ROOT = 5
} STGTY;

typedef enum tagDECOLOR //red-black tree 红黑树的颜色
{
	DE_RED = 0,
	DE_BLACK = 1
} DECOLOR;

struct Storage_Directory_Entry
{
	byte name_of_entry[64]; // [000H,64] 64 bytes. The Element name in Unicode, like: "Root Entry"
	byte length_of_entry[2]; // [040H,02] Length of the Element name in characters, not bytes 
	byte type_of_entry[1]; // [042H,01] Type of the entry: value taken from the STGTY enumeration   
	byte node_colour_of_entry[1]; // [043H,01] Value taken from DECOLOR enumeration. Node colour of the entry:00H = Red 01H = Black
	byte did_of_left_sibling[4]; // [044H,04] SID of the left-sibling of this entry in the directory tree, DID of the left child node inside the red-black tree of all direct members of the parent storage (if this entry is a user storage or stream), –1 if there is no left child 
	byte did_of_right_sibling[4]; // [048H,04] SID of the right-sibling of this entry in the directory tree   
	byte did_of_child[4]; // [04CH,04] SID of the child acting as the root of all the children of this element (if _mse=STGTY_STORAGE) 
	byte class_id[16]; // [050H,16] CLSID of this storage (if _mse=STGTY_STORAGE)   
	byte user_flag[4]; // [060H,04] User flags of this storage (if _mse=STGTY_STORAGE)   
	byte time_st[8]; // [064H,16] Create/Modify time-stamps (if _mse=STGTY_STORAGE)
	byte time_ed[8]; // [064H,16] Create/Modify time-stamps (if _mse=STGTY_STORAGE)    
	byte sid_of_first_sector[4]; // [074H,04] starting SECT of the stream (if _mse=STGTY_STREAM), SID of first sector or short-sector, if this entry refers to a stream, SID of first sector of the short-stream container stream, if this is the root storage entry, 0 otherwise
	byte total_stream_size[4]; // [078H,04] size of stream in bytes (if _mse=STGTY_STREAM), Total stream size in bytes,
	byte reserved[4]; // [07CH,04] Reserved for future use. Must be zero.
};

int bin_to_hex(byte* addr, int len)
{
	int hex=0;

	if((addr[len-1] & 0x80) == 0x80) //负数
	{
		for(int i=len-1;i>=0;i--) //Little-Endian
		{
			byte temp=~addr[i];
			hex=hex*16*16+temp;
		}
		hex=(hex+1)*(-1); //取反加1
	}else //正数
	{
		for(int i=len-1;i>=0;i--) //Little-Endian
		{
			hex=hex*16*16+addr[i];
		}
	}

	return hex;
}

void print_hex(long file_addr, const char str[], byte* addr, int len)
{
	printf("0x%08X: %s=[ ",file_addr,str);

	for(int i=0;i<len;i++)
	{
		printf("%02X ",addr[i]);
	}
	printf("]");
	if(len==4)
	{
		int hex=bin_to_hex(addr, len);
		if(hex<0){printf(" [-0x%08X]",-hex);}else{printf(" [0x%08X]",hex);}
	}
	printf("\n");
}

void print_hex_str(long file_addr, const char str[], byte* addr, int len)
{
	printf("0x%08X: %s=[ ",file_addr,str);

	for(int i=0;i<len;i++)
	{
		if(i%2==1){continue;}
		if(addr[i]=='\0'){continue;}
		printf("%c",addr[i]);
	}
	printf(" ]\n");
}

void print_header(Compound_Binary_File_Header& header)
{
	printf("\n============= Compound_Binary_File_Header ===================\n");
	print_hex(file_addr,"header.compound_file_id",header.compound_file_id,sizeof(header.compound_file_id));file_addr+=sizeof(header.compound_file_id);
	print_hex(file_addr,"header.class_id",header.class_id,sizeof(header.class_id));file_addr+=sizeof(header.class_id);
	print_hex(file_addr,"header.minor_version",header.minor_version,sizeof(header.minor_version));file_addr+=sizeof(header.minor_version);
	print_hex(file_addr,"header.major_version",header.major_version,sizeof(header.major_version));file_addr+=sizeof(header.major_version);
	print_hex(file_addr,"header.byte_order",header.byte_order,sizeof(header.byte_order));file_addr+=sizeof(header.byte_order);
	print_hex(file_addr,"header.size_of_a_master_sector",header.size_of_a_master_sector,sizeof(header.size_of_a_master_sector));file_addr+=sizeof(header.size_of_a_master_sector);
	print_hex(file_addr,"header.size_of_a_short_sector",header.size_of_a_short_sector,sizeof(header.size_of_a_short_sector));file_addr+=sizeof(header.size_of_a_short_sector);
	print_hex(file_addr,"header.reserved",header.reserved,sizeof(header.reserved));file_addr+=sizeof(header.reserved);
	print_hex(file_addr,"header.reserved1",header.reserved1,sizeof(header.reserved1));file_addr+=sizeof(header.reserved1);
	print_hex(file_addr,"header.reserved2",header.reserved2,sizeof(header.reserved2));file_addr+=sizeof(header.reserved2);
	print_hex(file_addr,"header.number_of_sector_SAT",header.number_of_sector_SAT,sizeof(header.number_of_sector_SAT));file_addr+=sizeof(header.number_of_sector_SAT);
	print_hex(file_addr,"header.first_sector_of_directory_stream",header.first_sector_of_directory_stream,sizeof(header.first_sector_of_directory_stream));file_addr+=sizeof(header.first_sector_of_directory_stream);
	print_hex(file_addr,"header.signature",header.signature,sizeof(header.signature));file_addr+=sizeof(header.signature);
	print_hex(file_addr,"header.min_size_of_a_standard_stream",header.min_size_of_a_standard_stream,sizeof(header.min_size_of_a_standard_stream));file_addr+=sizeof(header.min_size_of_a_standard_stream);
	print_hex(file_addr,"header.first_sector_of_short_sector_SSAT",header.first_sector_of_short_sector_SSAT,sizeof(header.first_sector_of_short_sector_SSAT));file_addr+=sizeof(header.first_sector_of_short_sector_SSAT);
	print_hex(file_addr,"header.total_number_of_short_sector_SSAT",header.total_number_of_short_sector_SSAT,sizeof(header.total_number_of_short_sector_SSAT));file_addr+=sizeof(header.total_number_of_short_sector_SSAT);
	print_hex(file_addr,"header.first_sector_of_master_sector_MSAT",header.first_sector_of_master_sector_MSAT,sizeof(header.first_sector_of_master_sector_MSAT));file_addr+=sizeof(header.first_sector_of_master_sector_MSAT);
	print_hex(file_addr,"header.total_number_of_master_sector_MSAT",header.total_number_of_master_sector_MSAT,sizeof(header.total_number_of_master_sector_MSAT));file_addr+=sizeof(header.total_number_of_master_sector_MSAT);
	print_hex(file_addr,"header.first_109_master_sector_MSAT",header.first_109_master_sector_MSAT,sizeof(header.first_109_master_sector_MSAT));file_addr+=sizeof(header.first_109_master_sector_MSAT);
}

void print_dir_entry(Storage_Directory_Entry& dir_entry)
{
//	printf("\n============= Storage_Directory_Entry ===================\n");
	print_hex_str(file_addr,"dir_entry.name_of_entry",dir_entry.name_of_entry,sizeof(dir_entry.name_of_entry));file_addr+=sizeof(dir_entry.name_of_entry);
	print_hex(file_addr,"dir_entry.length_of_entry",dir_entry.length_of_entry,sizeof(dir_entry.length_of_entry));file_addr+=sizeof(dir_entry.length_of_entry);
	print_hex(file_addr,"dir_entry.type_of_entry",dir_entry.type_of_entry,sizeof(dir_entry.type_of_entry));file_addr+=sizeof(dir_entry.type_of_entry);
	print_hex(file_addr,"dir_entry.node_colour_of_entry",dir_entry.node_colour_of_entry,sizeof(dir_entry.node_colour_of_entry));file_addr+=sizeof(dir_entry.node_colour_of_entry);
	print_hex(file_addr,"dir_entry.did_of_left_sibling",dir_entry.did_of_left_sibling,sizeof(dir_entry.did_of_left_sibling));file_addr+=sizeof(dir_entry.did_of_left_sibling);
	print_hex(file_addr,"dir_entry.did_of_right_sibling",dir_entry.did_of_right_sibling,sizeof(dir_entry.did_of_right_sibling));file_addr+=sizeof(dir_entry.did_of_right_sibling);
	print_hex(file_addr,"dir_entry.did_of_child",dir_entry.did_of_child,sizeof(dir_entry.did_of_child));file_addr+=sizeof(dir_entry.did_of_child);
	print_hex(file_addr,"dir_entry.class_id",dir_entry.class_id,sizeof(dir_entry.class_id));file_addr+=sizeof(dir_entry.class_id);
	print_hex(file_addr,"dir_entry.user_flag",dir_entry.user_flag,sizeof(dir_entry.user_flag));file_addr+=sizeof(dir_entry.user_flag);
	print_hex(file_addr,"dir_entry.time_st",dir_entry.time_st,sizeof(dir_entry.time_st));file_addr+=sizeof(dir_entry.time_st);
	print_hex(file_addr,"dir_entry.time_ed",dir_entry.time_ed,sizeof(dir_entry.time_ed));file_addr+=sizeof(dir_entry.time_ed);
	print_hex(file_addr,"dir_entry.sid_of_first_sector",dir_entry.sid_of_first_sector,sizeof(dir_entry.sid_of_first_sector));file_addr+=sizeof(dir_entry.sid_of_first_sector);
	print_hex(file_addr,"dir_entry.total_stream_size",dir_entry.total_stream_size,sizeof(dir_entry.total_stream_size));file_addr+=sizeof(dir_entry.total_stream_size);
	print_hex(file_addr,"dir_entry.reserved",dir_entry.reserved,sizeof(dir_entry.reserved));file_addr+=sizeof(dir_entry.reserved);
}

int main(int argc, char* argv[])
{
	char in_fileName[]="E:\\test.bin";

	FILE* fp;
	if((fp=fopen(in_fileName,"rb"))==NULL){printf("Can't open %s\n",in_fileName);return 0;}

	//============= header ====================
	Compound_Binary_File_Header header;
	::fread(&header,1,sizeof(Compound_Binary_File_Header),fp);
	print_header(header);

	//============= master_sector_chain ====================
	printf("\n============= master_sector_chain ===================\n");
	int size_head=sizeof(Compound_Binary_File_Header);
	int size_sector=1<<bin_to_hex(header.size_of_a_master_sector,sizeof(header.size_of_a_master_sector)); //size_sector=1<<9=2^9=512=0x200 byte
	int first_sector_of_directory_stream=bin_to_hex(header.first_sector_of_directory_stream,sizeof(header.first_sector_of_directory_stream));

	int number_of_sector_SAT=bin_to_hex(header.number_of_sector_SAT,sizeof(header.number_of_sector_SAT)); //一般情况下 number_of_sector_SAT=1
	int *chain=NULL;
	chain=(int *)::malloc(128*number_of_sector_SAT*sizeof(int)); //sector_chain_arrary 扇区链表数组,所有的sector都存在这一个数组里面,最好不要用二维数组存
	if(chain==NULL){printf("错误: ::malloc(128*number_of_sector_SAT);申请内存失败!\n");system("pause");return 0;}
	::memset(chain,0,128*number_of_sector_SAT);

	if(number_of_sector_SAT == 1)
	{
		printf("MSAT全部内容存放在header的最后4*109byte里面了\n");

		int first_sector_of_master_sector_MSAT=bin_to_hex(header.first_sector_of_master_sector_MSAT,sizeof(header.first_sector_of_master_sector_MSAT));
		if(first_sector_of_master_sector_MSAT == End_Of_Chain_SID)
		{
			for(int i=0;i<109;i++)
			{
				int sector_temp=bin_to_hex(header.first_109_master_sector_MSAT+i*4,4);
				if(sector_temp==0xFFFFFFFF){break;} //一般来说i=1的时候就break了
				file_addr=size_head+size_sector*sector_temp; //header.first_109_master_sector_MSAT[0,1,2,3] = [00 00 00 00]
				
				::fseek(fp,file_addr,0);
//				int chain[128]; // 4*128=512 byte
				::fread(chain,4,128,fp);
				for(int j=0;j<128;j++)
				{
					if(chain[j]==0xFFFFFFFF){continue;}
					printf("SAT[%d]=0x%08X: chain[%d]=0x%08X [%d]\n",i,file_addr+j*4,j,chain[j],chain[j]);
				}
			}
		}else
		{
			printf("错误: header.first_sector_of_master_sector_MSAT=0x%08X;\n",header.first_sector_of_master_sector_MSAT);
			system("pause");
			return 0;
		}
	}else
	{
		printf("警告: number_of_sector_SAT=%d; 暂不处理这种情况,因为我还没遇到过这种情况\n",number_of_sector_SAT);
	}
	
	//============= short_sector_chain ====================
	//短流链, 一个short-sector短流一般占2^6=64个byte,凡是某个Directory_Entry对应的stream size小于0x1000(即header.min_size_of_a_standard_stream)
	//则该stream就用short-sector存储,如果用sector存储可能觉得很浪费资源
	printf("\n============= short_sector_chain ===================\n");
	int total_number_of_short_sector_SSAT=bin_to_hex(header.total_number_of_short_sector_SSAT,sizeof(header.total_number_of_short_sector_SSAT)); //一般情况下 number_of_sector_SAT=1
	int *chain_short=NULL;
	chain_short=(int *)::malloc(128*total_number_of_short_sector_SSAT*sizeof(int)); //sector_chain_arrary 扇区链表数组,所有的sector都存在这一个数组里面,最好不要用二维数组存
	if(chain_short==NULL){printf("错误: ::malloc(128*number_of_sector_SAT);申请内存失败!\n");system("pause");return 0;}
	::memset(chain_short,0,128*total_number_of_short_sector_SSAT);

	int first_sector_of_short_sector_SSAT=bin_to_hex(header.first_sector_of_short_sector_SSAT,sizeof(header.first_sector_of_short_sector_SSAT));
	int sector_temp=first_sector_of_short_sector_SSAT;

	printf("开始读取short_sector_chain_table短流链表\n");
	//此例中用了3个sector存放short_sector_chain_table
	//SAT[0]=0x00000208: chain[2]=0x00000041 [65]
	//SAT[0]=0x00000304: chain[65]=0x00000005 [5]
	//SAT[0]=0x00000214: chain[5]=0xFFFFFFFE [-2]
	//上面构成的链条为: 2->65->5->-2
	for(int i=0;i<total_number_of_short_sector_SSAT;i++)
	{
		file_addr=size_head+size_sector*sector_temp;
		::fseek(fp,file_addr,0);
		::fread(chain_short+i*128,4,128,fp);
		for(int j=0;j<128;j++)
		{
			if(chain_short[i*128+j]==0xFFFFFFFF){continue;}
			printf("SSAT[%d]=0x%08X: chain_short[%d]=0x%08X [%d]\n",i,file_addr+j*4,i*128+j,chain_short[i*128+j],chain_short[i*128+j]);
		}
		
		for(int j=0;j<128*number_of_sector_SAT;j++) //在主链表MSAT中查找SAT的下一个sector
		{
			if(chain[j]==0xFFFFFFFF){continue;}
			if(j!=sector_temp){continue;} //相当于的查找链表的下一个节点
			sector_temp=chain[j]; //相当于链表的 pLink_Table=pLink_Table->next;
			break;
		}
	}

	//=============== Directory_Entry ==================
	int dir_sector_id=first_sector_of_directory_stream;
	int cnt_DID=0; //DID就是每个Directory_Entry存放的先后顺序,全部按照Directory_Entry链条中以0开始计数
	for(int i=0;i<128*number_of_sector_SAT;i++)
	{
		if(chain[i]==0xFFFFFFFF){continue;}
		if(i!=dir_sector_id){continue;} //相当于的查找链表的下一个节点
		//SAT[0]=0x00000204: chain[1]=0x0000002E [46]
		//SAT[0]=0x000002B8: chain[46]=0x00000037 [55]
		//SAT[0]=0x000002DC: chain[55]=0x0000003D [61]
		//SAT[0]=0x000002F4: chain[61]=0x0000004D [77]
		//SAT[0]=0x00000334: chain[77]=0xFFFFFFFE [-2]
		//上面构成的链条为: 1->46->55->61->77->-2,注意-2就是表示该链条到此处结束 #define End_Of_Chain_SID 0xFFFFFFFE
		//该链条对应的DID为: {1}[0-1-2-3] -> {46}[4-5-6-7] -> {55}[8-9-10-11] -> {61}[12-13-14-15] -> {77}[16-17-18-19]

		file_addr=size_head+size_sector*i; //计算文件的绝对偏移量,一般是512byte的倍数
		::fseek(fp,file_addr,0);

		for(int j=0;j<4;j++) //一个Directory_Entry占128个字节,所以一个sector里面含有512/128=4个目录项
		{
			Storage_Directory_Entry dir_entry;
			::fread(&dir_entry,1,sizeof(Storage_Directory_Entry),fp);
			printf("\n============= Storage_Directory_Entry [DID=%d] ===================\n",cnt_DID);
			print_dir_entry(dir_entry);
			
			cnt_DID++;
		}

		dir_sector_id=chain[i]; //相当于链表的 pLink_Table=pLink_Table->next;
	}
	
	if(chain_short!=NULL){free(chain_short);}
	if(chain!=NULL){free(chain);}
	fclose(fp);

	system("pause");

	return 0;
}

/*=====================复合文档头(共512=0x200字节)================================
00000000: D0 CF 11 E0 A1 B1 1A E1 00 00 00 00 00 00 00 00  : ................
00000010: 00 00 00 00 00 00 00 00 3E 00 03 00 FE FF 09 00  : ........>.......
00000020: 06 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00  : ................
00000030: 01 00 00 00 00 00 00 00 00 10 00 00 02 00 00 00  : ................
00000040: 03 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00  : ................
00000050: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF  : ................
... ...
000001E0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF  : ................
000001F0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF  : ................
00000200: FD FF FF FF 2E 00 00 00 41 00 00 00 04 00 00 00  : ........A.......
... ...
00000400: 52 00 6F 00 6F 00 74 00 20 00 45 00 6E 00 74 00  : R.o.o.t. .E.n.t.
00000410: 72 00 79 00 00 00 00 00 00 00 00 00 00 00 00 00  : r.y.............
00000420: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  : ................
00000430: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  : ................
00000440: 16 00 05 00 FF FF FF FF FF FF FF FF 05 00 00 00  : ................
00000450: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  : ................
00000460: 00 00 00 00 00 00 00 00 00 00 00 00 90 B2 B1 D3  : ................
00000470: 8C FD CE 01 2F 00 00 00 C0 3A 00 00 00 00 00 00  : ..../....:......
00000480: 4C 00 54 00 51 00 00 00 00 00 00 00 00 00 00 00  : L.T.Q...........
00000490: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  : ................
000004A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  : ................
000004B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  : ................
000004C0: 08 00 01 00 FF FF FF FF FF FF FF FF 03 00 00 00  : ................
000004D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  : ................
000004E0: 00 00 00 00 B0 AD AA D3 8C FD CE 01 B0 AD AA D3  : ................
000004F0: 8C FD CE 01 00 00 00 00 00 00 00 00 00 00 00 00  : ................
00000500: 44 00 61 00 74 00 61 00 00 00 00 00 00 00 00 00  : D.a.t.a.........
00000510: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  : ................
00000520: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  : ................
00000530: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  : ................
00000540: 0A 00 02 00 FF FF FF FF FF FF FF FF FF FF FF FF  : ................
00000550: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  : ................
00000560: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  : ................
00000570: 00 00 00 00 09 00 00 00 E2 2B 00 00 00 00 00 00  : .........+......
00000580: 54 00 65 00 78 00 74 00 00 00 00 00 00 00 00 00  : T.e.x.t.........
00000590: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  : ................
000005A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  : ................
000005B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  : ................
000005C0: 0A 00 02 01 02 00 00 00 04 00 00 00 FF FF FF FF  : ................
000005D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  : ................
000005E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  : ................
000005F0: 00 00 00 00 1A 00 00 00 9E 28 00 00 00 00 00 00  : .........(......
=====================================================*/

输出结果:



============= Compound_Binary_File_Header ===================
0x00000000: header.compound_file_id=[ D0 CF 11 E0 A1 B1 1A E1 ]
0x00000008: header.class_id=[ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ]
0x00000018: header.minor_version=[ 3E 00 ]
0x0000001A: header.major_version=[ 03 00 ]
0x0000001C: header.byte_order=[ FE FF ]
0x0000001E: header.size_of_a_master_sector=[ 09 00 ]
0x00000020: header.size_of_a_short_sector=[ 06 00 ]
0x00000022: header.reserved=[ 00 00 ]
0x00000024: header.reserved1=[ 00 00 00 00 ] [0x00000000]
0x00000028: header.reserved2=[ 00 00 00 00 ] [0x00000000]
0x0000002C: header.number_of_sector_SAT=[ 01 00 00 00 ] [0x00000001]
0x00000030: header.first_sector_of_directory_stream=[ 01 00 00 00 ] [0x00000001]
0x00000034: header.signature=[ 00 00 00 00 ] [0x00000000]
0x00000038: header.min_size_of_a_standard_stream=[ 00 10 00 00 ] [0x00001000]
0x0000003C: header.first_sector_of_short_sector_SSAT=[ 02 00 00 00 ] [0x00000002]
0x00000040: header.total_number_of_short_sector_SSAT=[ 03 00 00 00 ] [0x00000003]
0x00000044: header.first_sector_of_master_sector_MSAT=[ FE FF FF FF ] [-0x00000002]
0x00000048: header.total_number_of_master_sector_MSAT=[ 00 00 00 00 ] [0x00000000]
0x0000004C: header.first_109_master_sector_MSAT=[ 00 00 00 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ]


============= master_sector_chain ===================
MSAT全部内容存放在header的最后4*109byte里面了
SAT[0]=0x00000200: chain[0]=0xFFFFFFFD [-3]
SAT[0]=0x00000204: chain[1]=0x0000002E [46]
SAT[0]=0x00000208: chain[2]=0x00000041 [65]
SAT[0]=0x0000020C: chain[3]=0x00000004 [4]
SAT[0]=0x00000210: chain[4]=0x00000006 [6]
SAT[0]=0x00000214: chain[5]=0xFFFFFFFE [-2]
SAT[0]=0x00000218: chain[6]=0x00000007 [7]
SAT[0]=0x0000021C: chain[7]=0x00000008 [8]
SAT[0]=0x00000220: chain[8]=0x00000012 [18]
SAT[0]=0x00000224: chain[9]=0x0000000A [10]
SAT[0]=0x00000228: chain[10]=0x0000000B [11]
SAT[0]=0x0000022C: chain[11]=0x0000000C [12]
SAT[0]=0x00000230: chain[12]=0x0000000D [13]
SAT[0]=0x00000234: chain[13]=0x0000000E [14]
SAT[0]=0x00000238: chain[14]=0x0000000F [15]
SAT[0]=0x0000023C: chain[15]=0x00000010 [16]
SAT[0]=0x00000240: chain[16]=0x00000011 [17]
SAT[0]=0x00000244: chain[17]=0x00000003 [3]
SAT[0]=0x00000248: chain[18]=0x00000013 [19]
SAT[0]=0x0000024C: chain[19]=0x00000014 [20]
SAT[0]=0x00000250: chain[20]=0x00000015 [21]
SAT[0]=0x00000254: chain[21]=0x00000016 [22]
SAT[0]=0x00000258: chain[22]=0x00000017 [23]
SAT[0]=0x0000025C: chain[23]=0x00000018 [24]
SAT[0]=0x00000260: chain[24]=0x00000019 [25]
SAT[0]=0x00000264: chain[25]=0xFFFFFFFE [-2]
SAT[0]=0x00000268: chain[26]=0x0000001B [27]
SAT[0]=0x0000026C: chain[27]=0x0000001C [28]
SAT[0]=0x00000270: chain[28]=0x0000001D [29]
SAT[0]=0x00000274: chain[29]=0x0000001E [30]
SAT[0]=0x00000278: chain[30]=0x0000001F [31]
SAT[0]=0x0000027C: chain[31]=0x00000020 [32]
SAT[0]=0x00000280: chain[32]=0x00000021 [33]
SAT[0]=0x00000284: chain[33]=0x00000022 [34]
SAT[0]=0x00000288: chain[34]=0x00000023 [35]
SAT[0]=0x0000028C: chain[35]=0x00000024 [36]
SAT[0]=0x00000290: chain[36]=0x00000025 [37]
SAT[0]=0x00000294: chain[37]=0x00000026 [38]
SAT[0]=0x00000298: chain[38]=0x00000027 [39]
SAT[0]=0x0000029C: chain[39]=0x00000028 [40]
SAT[0]=0x000002A0: chain[40]=0x00000029 [41]
SAT[0]=0x000002A4: chain[41]=0x0000002A [42]
SAT[0]=0x000002A8: chain[42]=0x0000002B [43]
SAT[0]=0x000002AC: chain[43]=0x0000002C [44]
SAT[0]=0x000002B0: chain[44]=0x0000002D [45]
SAT[0]=0x000002B4: chain[45]=0x00000051 [81]
SAT[0]=0x000002B8: chain[46]=0x00000037 [55]
SAT[0]=0x000002BC: chain[47]=0x00000030 [48]
SAT[0]=0x000002C0: chain[48]=0x00000031 [49]
SAT[0]=0x000002C4: chain[49]=0x00000032 [50]
SAT[0]=0x000002C8: chain[50]=0x00000033 [51]
SAT[0]=0x000002CC: chain[51]=0x00000034 [52]
SAT[0]=0x000002D0: chain[52]=0x00000035 [53]
SAT[0]=0x000002D4: chain[53]=0x00000036 [54]
SAT[0]=0x000002D8: chain[54]=0x00000038 [56]
SAT[0]=0x000002DC: chain[55]=0x0000003D [61]
SAT[0]=0x000002E0: chain[56]=0x00000039 [57]
SAT[0]=0x000002E4: chain[57]=0x0000003A [58]
SAT[0]=0x000002E8: chain[58]=0x0000003B [59]
SAT[0]=0x000002EC: chain[59]=0x0000003C [60]
SAT[0]=0x000002F0: chain[60]=0x0000003E [62]
SAT[0]=0x000002F4: chain[61]=0x0000004D [77]
SAT[0]=0x000002F8: chain[62]=0x0000003F [63]
SAT[0]=0x000002FC: chain[63]=0x00000040 [64]
SAT[0]=0x00000300: chain[64]=0x00000042 [66]
SAT[0]=0x00000304: chain[65]=0x00000005 [5]
SAT[0]=0x00000308: chain[66]=0x00000043 [67]
SAT[0]=0x0000030C: chain[67]=0x00000044 [68]
SAT[0]=0x00000310: chain[68]=0x00000045 [69]
SAT[0]=0x00000314: chain[69]=0x00000046 [70]
SAT[0]=0x00000318: chain[70]=0x00000047 [71]
SAT[0]=0x0000031C: chain[71]=0x00000048 [72]
SAT[0]=0x00000320: chain[72]=0x00000049 [73]
SAT[0]=0x00000324: chain[73]=0x0000004A [74]
SAT[0]=0x00000328: chain[74]=0x0000004B [75]
SAT[0]=0x0000032C: chain[75]=0x0000004C [76]
SAT[0]=0x00000330: chain[76]=0x0000004E [78]
SAT[0]=0x00000334: chain[77]=0xFFFFFFFE [-2]
SAT[0]=0x00000338: chain[78]=0x0000004F [79]
SAT[0]=0x0000033C: chain[79]=0x00000050 [80]
SAT[0]=0x00000340: chain[80]=0xFFFFFFFE [-2]
SAT[0]=0x00000344: chain[81]=0xFFFFFFFE [-2]


============= short_sector_chain ===================
开始读取short_sector_chain_table短流链表
SSAT[0]=0x00000600: chain_short[0]=0x00000001 [1]
SSAT[0]=0x00000604: chain_short[1]=0x00000002 [2]
SSAT[0]=0x00000608: chain_short[2]=0x00000003 [3]
SSAT[0]=0x0000060C: chain_short[3]=0x00000004 [4]
SSAT[0]=0x00000610: chain_short[4]=0x00000005 [5]
SSAT[0]=0x00000614: chain_short[5]=0x00000006 [6]
SSAT[0]=0x00000618: chain_short[6]=0x00000007 [7]
SSAT[0]=0x0000061C: chain_short[7]=0x00000008 [8]
SSAT[0]=0x00000620: chain_short[8]=0x00000009 [9]
SSAT[0]=0x00000624: chain_short[9]=0x0000000A [10]
SSAT[0]=0x00000628: chain_short[10]=0x0000000B [11]
SSAT[0]=0x0000062C: chain_short[11]=0x0000000C [12]
SSAT[0]=0x00000630: chain_short[12]=0x0000000D [13]
SSAT[0]=0x00000634: chain_short[13]=0x0000000E [14]
SSAT[0]=0x00000638: chain_short[14]=0x0000000F [15]
SSAT[0]=0x0000063C: chain_short[15]=0x00000010 [16]
SSAT[0]=0x00000640: chain_short[16]=0x00000011 [17]
SSAT[0]=0x00000644: chain_short[17]=0x00000012 [18]
SSAT[0]=0x00000648: chain_short[18]=0x00000013 [19]
SSAT[0]=0x0000064C: chain_short[19]=0x00000014 [20]
SSAT[0]=0x00000650: chain_short[20]=0x00000015 [21]
SSAT[0]=0x00000654: chain_short[21]=0xFFFFFFFE [-2]
SSAT[0]=0x00000658: chain_short[22]=0x00000017 [23]
SSAT[0]=0x0000065C: chain_short[23]=0x00000018 [24]
SSAT[0]=0x00000660: chain_short[24]=0x00000019 [25]
SSAT[0]=0x00000664: chain_short[25]=0x0000001A [26]
SSAT[0]=0x00000668: chain_short[26]=0x0000001B [27]
SSAT[0]=0x0000066C: chain_short[27]=0x0000001C [28]
SSAT[0]=0x00000670: chain_short[28]=0x0000001D [29]
SSAT[0]=0x00000674: chain_short[29]=0x0000001E [30]
SSAT[0]=0x00000678: chain_short[30]=0x0000001F [31]
SSAT[0]=0x0000067C: chain_short[31]=0x00000020 [32]
SSAT[0]=0x00000680: chain_short[32]=0x00000021 [33]
SSAT[0]=0x00000684: chain_short[33]=0x00000022 [34]
SSAT[0]=0x00000688: chain_short[34]=0x00000023 [35]
SSAT[0]=0x0000068C: chain_short[35]=0x00000024 [36]
SSAT[0]=0x00000690: chain_short[36]=0x00000025 [37]
SSAT[0]=0x00000694: chain_short[37]=0x00000026 [38]
SSAT[0]=0x00000698: chain_short[38]=0x00000027 [39]
SSAT[0]=0x0000069C: chain_short[39]=0x00000028 [40]
SSAT[0]=0x000006A0: chain_short[40]=0x00000029 [41]
SSAT[0]=0x000006A4: chain_short[41]=0x0000002A [42]
SSAT[0]=0x000006A8: chain_short[42]=0x0000002B [43]
SSAT[0]=0x000006AC: chain_short[43]=0x0000002C [44]
SSAT[0]=0x000006B0: chain_short[44]=0x0000002D [45]
SSAT[0]=0x000006B4: chain_short[45]=0x0000002E [46]
SSAT[0]=0x000006B8: chain_short[46]=0x0000002F [47]
SSAT[0]=0x000006BC: chain_short[47]=0x00000030 [48]
SSAT[0]=0x000006C0: chain_short[48]=0x00000031 [49]
SSAT[0]=0x000006C4: chain_short[49]=0x00000032 [50]
SSAT[0]=0x000006C8: chain_short[50]=0x00000033 [51]
SSAT[0]=0x000006CC: chain_short[51]=0xFFFFFFFE [-2]
SSAT[0]=0x000006D0: chain_short[52]=0x00000035 [53]
SSAT[0]=0x000006D4: chain_short[53]=0x00000036 [54]
SSAT[0]=0x000006D8: chain_short[54]=0x00000037 [55]
SSAT[0]=0x000006DC: chain_short[55]=0x00000038 [56]
SSAT[0]=0x000006E0: chain_short[56]=0x00000039 [57]
SSAT[0]=0x000006E4: chain_short[57]=0xFFFFFFFE [-2]
SSAT[0]=0x000006E8: chain_short[58]=0x0000003B [59]
SSAT[0]=0x000006EC: chain_short[59]=0x0000003C [60]
SSAT[0]=0x000006F0: chain_short[60]=0x0000003D [61]
SSAT[0]=0x000006F4: chain_short[61]=0x0000003E [62]
SSAT[0]=0x000006F8: chain_short[62]=0x0000003F [63]
SSAT[0]=0x000006FC: chain_short[63]=0x00000040 [64]
SSAT[0]=0x00000700: chain_short[64]=0x00000041 [65]
SSAT[0]=0x00000704: chain_short[65]=0x00000042 [66]
SSAT[0]=0x00000708: chain_short[66]=0x00000043 [67]
SSAT[0]=0x0000070C: chain_short[67]=0x00000044 [68]
SSAT[0]=0x00000710: chain_short[68]=0x00000045 [69]
SSAT[0]=0x00000714: chain_short[69]=0x00000046 [70]
SSAT[0]=0x00000718: chain_short[70]=0x00000047 [71]
SSAT[0]=0x0000071C: chain_short[71]=0x00000048 [72]
SSAT[0]=0x00000720: chain_short[72]=0x00000049 [73]
SSAT[0]=0x00000724: chain_short[73]=0xFFFFFFFE [-2]
SSAT[0]=0x00000728: chain_short[74]=0x0000004B [75]
SSAT[0]=0x0000072C: chain_short[75]=0x0000004C [76]
SSAT[0]=0x00000730: chain_short[76]=0x0000004D [77]
SSAT[0]=0x00000734: chain_short[77]=0x0000004E [78]
SSAT[0]=0x00000738: chain_short[78]=0x0000004F [79]
SSAT[0]=0x0000073C: chain_short[79]=0x00000050 [80]
SSAT[0]=0x00000740: chain_short[80]=0x00000051 [81]
SSAT[0]=0x00000744: chain_short[81]=0x00000052 [82]
SSAT[0]=0x00000748: chain_short[82]=0xFFFFFFFE [-2]
SSAT[0]=0x0000074C: chain_short[83]=0x00000054 [84]
SSAT[0]=0x00000750: chain_short[84]=0xFFFFFFFE [-2]
SSAT[0]=0x00000754: chain_short[85]=0x00000056 [86]
SSAT[0]=0x00000758: chain_short[86]=0x00000057 [87]
SSAT[0]=0x0000075C: chain_short[87]=0x00000058 [88]
SSAT[0]=0x00000760: chain_short[88]=0x00000059 [89]
SSAT[0]=0x00000764: chain_short[89]=0x0000005A [90]
SSAT[0]=0x00000768: chain_short[90]=0x0000005B [91]
SSAT[0]=0x0000076C: chain_short[91]=0x0000005C [92]
SSAT[0]=0x00000770: chain_short[92]=0x0000005D [93]
SSAT[0]=0x00000774: chain_short[93]=0x0000005E [94]
SSAT[0]=0x00000778: chain_short[94]=0x0000005F [95]
SSAT[0]=0x0000077C: chain_short[95]=0x00000060 [96]
SSAT[0]=0x00000780: chain_short[96]=0x00000061 [97]
SSAT[0]=0x00000784: chain_short[97]=0x00000062 [98]
SSAT[0]=0x00000788: chain_short[98]=0x00000063 [99]
SSAT[0]=0x0000078C: chain_short[99]=0x00000064 [100]
SSAT[0]=0x00000790: chain_short[100]=0xFFFFFFFE [-2]
SSAT[0]=0x00000794: chain_short[101]=0xFFFFFFFE [-2]
SSAT[0]=0x00000798: chain_short[102]=0x00000067 [103]
SSAT[0]=0x0000079C: chain_short[103]=0x00000068 [104]
SSAT[0]=0x000007A0: chain_short[104]=0x00000069 [105]
SSAT[0]=0x000007A4: chain_short[105]=0x0000006A [106]
SSAT[0]=0x000007A8: chain_short[106]=0x0000006B [107]
SSAT[0]=0x000007AC: chain_short[107]=0x0000006C [108]
SSAT[0]=0x000007B0: chain_short[108]=0x0000006D [109]
SSAT[0]=0x000007B4: chain_short[109]=0x0000006E [110]
SSAT[0]=0x000007B8: chain_short[110]=0x0000006F [111]
SSAT[0]=0x000007BC: chain_short[111]=0x00000070 [112]
SSAT[0]=0x000007C0: chain_short[112]=0x00000071 [113]
SSAT[0]=0x000007C4: chain_short[113]=0x00000072 [114]
SSAT[0]=0x000007C8: chain_short[114]=0x00000073 [115]
SSAT[0]=0x000007CC: chain_short[115]=0x00000074 [116]
SSAT[0]=0x000007D0: chain_short[116]=0x00000075 [117]
SSAT[0]=0x000007D4: chain_short[117]=0x00000076 [118]
SSAT[0]=0x000007D8: chain_short[118]=0x00000077 [119]
SSAT[0]=0x000007DC: chain_short[119]=0x00000078 [120]
SSAT[0]=0x000007E0: chain_short[120]=0x00000079 [121]
SSAT[0]=0x000007E4: chain_short[121]=0x0000007A [122]
SSAT[0]=0x000007E8: chain_short[122]=0x0000007B [123]
SSAT[0]=0x000007EC: chain_short[123]=0x0000007C [124]
SSAT[0]=0x000007F0: chain_short[124]=0x0000007D [125]
SSAT[0]=0x000007F4: chain_short[125]=0xFFFFFFFE [-2]
SSAT[0]=0x000007F8: chain_short[126]=0x0000007F [127]
SSAT[0]=0x000007FC: chain_short[127]=0x00000080 [128]
SSAT[1]=0x00008400: chain_short[128]=0x00000081 [129]
SSAT[1]=0x00008404: chain_short[129]=0x00000082 [130]
SSAT[1]=0x00008408: chain_short[130]=0x00000083 [131]
SSAT[1]=0x0000840C: chain_short[131]=0x00000084 [132]
SSAT[1]=0x00008410: chain_short[132]=0x00000085 [133]
SSAT[1]=0x00008414: chain_short[133]=0x00000086 [134]
SSAT[1]=0x00008418: chain_short[134]=0x00000087 [135]
SSAT[1]=0x0000841C: chain_short[135]=0x00000088 [136]
SSAT[1]=0x00008420: chain_short[136]=0x00000089 [137]
SSAT[1]=0x00008424: chain_short[137]=0x0000008A [138]
SSAT[1]=0x00008428: chain_short[138]=0x0000008B [139]
SSAT[1]=0x0000842C: chain_short[139]=0x0000008C [140]
SSAT[1]=0x00008430: chain_short[140]=0x0000008D [141]
SSAT[1]=0x00008434: chain_short[141]=0x0000008E [142]
SSAT[1]=0x00008438: chain_short[142]=0x0000008F [143]
SSAT[1]=0x0000843C: chain_short[143]=0x00000090 [144]
SSAT[1]=0x00008440: chain_short[144]=0x00000091 [145]
SSAT[1]=0x00008444: chain_short[145]=0x00000092 [146]
SSAT[1]=0x00008448: chain_short[146]=0x00000093 [147]
SSAT[1]=0x0000844C: chain_short[147]=0x00000094 [148]
SSAT[1]=0x00008450: chain_short[148]=0x00000095 [149]
SSAT[1]=0x00008454: chain_short[149]=0x00000096 [150]
SSAT[1]=0x00008458: chain_short[150]=0x00000097 [151]
SSAT[1]=0x0000845C: chain_short[151]=0x00000098 [152]
SSAT[1]=0x00008460: chain_short[152]=0x00000099 [153]
SSAT[1]=0x00008464: chain_short[153]=0x0000009A [154]
SSAT[1]=0x00008468: chain_short[154]=0x0000009B [155]
SSAT[1]=0x0000846C: chain_short[155]=0x0000009C [156]
SSAT[1]=0x00008470: chain_short[156]=0x0000009D [157]
SSAT[1]=0x00008474: chain_short[157]=0x0000009E [158]
SSAT[1]=0x00008478: chain_short[158]=0x0000009F [159]
SSAT[1]=0x0000847C: chain_short[159]=0x000000A0 [160]
SSAT[1]=0x00008480: chain_short[160]=0x000000A1 [161]
SSAT[1]=0x00008484: chain_short[161]=0x000000A2 [162]
SSAT[1]=0x00008488: chain_short[162]=0x000000A3 [163]
SSAT[1]=0x0000848C: chain_short[163]=0x000000A4 [164]
SSAT[1]=0x00008490: chain_short[164]=0x000000A5 [165]
SSAT[1]=0x00008494: chain_short[165]=0x000000A6 [166]
SSAT[1]=0x00008498: chain_short[166]=0x000000A7 [167]
SSAT[1]=0x0000849C: chain_short[167]=0x000000A8 [168]
SSAT[1]=0x000084A0: chain_short[168]=0x000000A9 [169]
SSAT[1]=0x000084A4: chain_short[169]=0x000000AA [170]
SSAT[1]=0x000084A8: chain_short[170]=0x000000AB [171]
SSAT[1]=0x000084AC: chain_short[171]=0x000000AC [172]
SSAT[1]=0x000084B0: chain_short[172]=0x000000AD [173]
SSAT[1]=0x000084B4: chain_short[173]=0x000000AE [174]
SSAT[1]=0x000084B8: chain_short[174]=0x000000AF [175]
SSAT[1]=0x000084BC: chain_short[175]=0x000000B0 [176]
SSAT[1]=0x000084C0: chain_short[176]=0xFFFFFFFE [-2]
SSAT[1]=0x000084C4: chain_short[177]=0x000000B2 [178]
SSAT[1]=0x000084C8: chain_short[178]=0x000000B3 [179]
SSAT[1]=0x000084CC: chain_short[179]=0x000000B4 [180]
SSAT[1]=0x000084D0: chain_short[180]=0x000000B5 [181]
SSAT[1]=0x000084D4: chain_short[181]=0x000000B6 [182]
SSAT[1]=0x000084D8: chain_short[182]=0x000000B7 [183]
SSAT[1]=0x000084DC: chain_short[183]=0x000000B8 [184]
SSAT[1]=0x000084E0: chain_short[184]=0x000000B9 [185]
SSAT[1]=0x000084E4: chain_short[185]=0x000000BA [186]
SSAT[1]=0x000084E8: chain_short[186]=0x000000BB [187]
SSAT[1]=0x000084EC: chain_short[187]=0x000000BC [188]
SSAT[1]=0x000084F0: chain_short[188]=0x000000BD [189]
SSAT[1]=0x000084F4: chain_short[189]=0x000000BE [190]
SSAT[1]=0x000084F8: chain_short[190]=0x000000BF [191]
SSAT[1]=0x000084FC: chain_short[191]=0x000000C0 [192]
SSAT[1]=0x00008500: chain_short[192]=0x000000C1 [193]
SSAT[1]=0x00008504: chain_short[193]=0x000000C2 [194]
SSAT[1]=0x00008508: chain_short[194]=0x000000C3 [195]
SSAT[1]=0x0000850C: chain_short[195]=0x000000C4 [196]
SSAT[1]=0x00008510: chain_short[196]=0x000000C5 [197]
SSAT[1]=0x00008514: chain_short[197]=0x000000C6 [198]
SSAT[1]=0x00008518: chain_short[198]=0x000000C7 [199]
SSAT[1]=0x0000851C: chain_short[199]=0x000000C8 [200]
SSAT[1]=0x00008520: chain_short[200]=0x000000C9 [201]
SSAT[1]=0x00008524: chain_short[201]=0x000000CA [202]
SSAT[1]=0x00008528: chain_short[202]=0x000000CB [203]
SSAT[1]=0x0000852C: chain_short[203]=0x000000CC [204]
SSAT[1]=0x00008530: chain_short[204]=0x000000CD [205]
SSAT[1]=0x00008534: chain_short[205]=0x000000CE [206]
SSAT[1]=0x00008538: chain_short[206]=0x000000CF [207]
SSAT[1]=0x0000853C: chain_short[207]=0x000000D0 [208]
SSAT[1]=0x00008540: chain_short[208]=0x000000D1 [209]
SSAT[1]=0x00008544: chain_short[209]=0x000000D2 [210]
SSAT[1]=0x00008548: chain_short[210]=0x000000D3 [211]
SSAT[1]=0x0000854C: chain_short[211]=0xFFFFFFFE [-2]
SSAT[1]=0x00008550: chain_short[212]=0xFFFFFFFE [-2]
SSAT[1]=0x00008554: chain_short[213]=0x000000D6 [214]
SSAT[1]=0x00008558: chain_short[214]=0x000000D7 [215]
SSAT[1]=0x0000855C: chain_short[215]=0x000000D8 [216]
SSAT[1]=0x00008560: chain_short[216]=0x000000D9 [217]
SSAT[1]=0x00008564: chain_short[217]=0x000000DA [218]
SSAT[1]=0x00008568: chain_short[218]=0x000000DB [219]
SSAT[1]=0x0000856C: chain_short[219]=0x000000DC [220]
SSAT[1]=0x00008570: chain_short[220]=0x000000DD [221]
SSAT[1]=0x00008574: chain_short[221]=0x000000DE [222]
SSAT[1]=0x00008578: chain_short[222]=0x000000DF [223]
SSAT[1]=0x0000857C: chain_short[223]=0x000000E0 [224]
SSAT[1]=0x00008580: chain_short[224]=0x000000E1 [225]
SSAT[1]=0x00008584: chain_short[225]=0x000000E2 [226]
SSAT[1]=0x00008588: chain_short[226]=0x000000E3 [227]
SSAT[1]=0x0000858C: chain_short[227]=0x000000E4 [228]
SSAT[1]=0x00008590: chain_short[228]=0x000000E5 [229]
SSAT[1]=0x00008594: chain_short[229]=0x000000E6 [230]
SSAT[1]=0x00008598: chain_short[230]=0x000000E7 [231]
SSAT[1]=0x0000859C: chain_short[231]=0x000000E8 [232]
SSAT[1]=0x000085A0: chain_short[232]=0x000000E9 [233]
SSAT[1]=0x000085A4: chain_short[233]=0x000000EA [234]
SSAT[1]=0x000085A8: chain_short[234]=0xFFFFFFFE [-2]


============= Storage_Directory_Entry [DID=0] ===================
0x00000400: dir_entry.name_of_entry=[ Root Entry ]
0x00000440: dir_entry.length_of_entry=[ 16 00 ]
0x00000442: dir_entry.type_of_entry=[ 05 ]
0x00000443: dir_entry.node_colour_of_entry=[ 00 ]
0x00000444: dir_entry.did_of_left_sibling=[ FF FF FF FF ] [-0x00000001]
0x00000448: dir_entry.did_of_right_sibling=[ FF FF FF FF ] [-0x00000001]
0x0000044C: dir_entry.did_of_child=[ 05 00 00 00 ] [0x00000005]
0x00000450: dir_entry.class_id=[ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ]
0x00000460: dir_entry.user_flag=[ 00 00 00 00 ] [0x00000000]
0x00000464: dir_entry.time_st=[ 00 00 00 00 00 00 00 00 ]
0x0000046C: dir_entry.time_ed=[ 90 B2 B1 D3 8C FD CE 01 ]
0x00000474: dir_entry.sid_of_first_sector=[ 2F 00 00 00 ] [0x0000002F]
0x00000478: dir_entry.total_stream_size=[ C0 3A 00 00 ] [0x00003AC0]
0x0000047C: dir_entry.reserved=[ 00 00 00 00 ] [0x00000000]


============= Storage_Directory_Entry [DID=1] ===================
0x00000480: dir_entry.name_of_entry=[ LTQ ]
0x000004C0: dir_entry.length_of_entry=[ 08 00 ]
0x000004C2: dir_entry.type_of_entry=[ 01 ]
0x000004C3: dir_entry.node_colour_of_entry=[ 00 ]
0x000004C4: dir_entry.did_of_left_sibling=[ FF FF FF FF ] [-0x00000001]
0x000004C8: dir_entry.did_of_right_sibling=[ FF FF FF FF ] [-0x00000001]
0x000004CC: dir_entry.did_of_child=[ 03 00 00 00 ] [0x00000003]
0x000004D0: dir_entry.class_id=[ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ]
0x000004E0: dir_entry.user_flag=[ 00 00 00 00 ] [0x00000000]
0x000004E4: dir_entry.time_st=[ B0 AD AA D3 8C FD CE 01 ]
0x000004EC: dir_entry.time_ed=[ B0 AD AA D3 8C FD CE 01 ]
0x000004F4: dir_entry.sid_of_first_sector=[ 00 00 00 00 ] [0x00000000]
0x000004F8: dir_entry.total_stream_size=[ 00 00 00 00 ] [0x00000000]
0x000004FC: dir_entry.reserved=[ 00 00 00 00 ] [0x00000000]


============= Storage_Directory_Entry [DID=2] ===================
0x00000500: dir_entry.name_of_entry=[ Data ]
0x00000540: dir_entry.length_of_entry=[ 0A 00 ]
0x00000542: dir_entry.type_of_entry=[ 02 ]
0x00000543: dir_entry.node_colour_of_entry=[ 00 ]
0x00000544: dir_entry.did_of_left_sibling=[ FF FF FF FF ] [-0x00000001]
0x00000548: dir_entry.did_of_right_sibling=[ FF FF FF FF ] [-0x00000001]
0x0000054C: dir_entry.did_of_child=[ FF FF FF FF ] [-0x00000001]
0x00000550: dir_entry.class_id=[ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ]
0x00000560: dir_entry.user_flag=[ 00 00 00 00 ] [0x00000000]
0x00000564: dir_entry.time_st=[ 00 00 00 00 00 00 00 00 ]
0x0000056C: dir_entry.time_ed=[ 00 00 00 00 00 00 00 00 ]
0x00000574: dir_entry.sid_of_first_sector=[ 09 00 00 00 ] [0x00000009]
0x00000578: dir_entry.total_stream_size=[ E2 2B 00 00 ] [0x00002BE2]
0x0000057C: dir_entry.reserved=[ 00 00 00 00 ] [0x00000000]


============= Storage_Directory_Entry [DID=3] ===================
0x00000580: dir_entry.name_of_entry=[ Text ]
0x000005C0: dir_entry.length_of_entry=[ 0A 00 ]
0x000005C2: dir_entry.type_of_entry=[ 02 ]
0x000005C3: dir_entry.node_colour_of_entry=[ 01 ]
0x000005C4: dir_entry.did_of_left_sibling=[ 02 00 00 00 ] [0x00000002]
0x000005C8: dir_entry.did_of_right_sibling=[ 04 00 00 00 ] [0x00000004]
0x000005CC: dir_entry.did_of_child=[ FF FF FF FF ] [-0x00000001]
0x000005D0: dir_entry.class_id=[ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ]
0x000005E0: dir_entry.user_flag=[ 00 00 00 00 ] [0x00000000]
0x000005E4: dir_entry.time_st=[ 00 00 00 00 00 00 00 00 ]
0x000005EC: dir_entry.time_ed=[ 00 00 00 00 00 00 00 00 ]
0x000005F4: dir_entry.sid_of_first_sector=[ 1A 00 00 00 ] [0x0000001A]
0x000005F8: dir_entry.total_stream_size=[ 9E 28 00 00 ] [0x0000289E]
0x000005FC: dir_entry.reserved=[ 00 00 00 00 ] [0x00000000]


============= Storage_Directory_Entry [DID=4] ===================
0x00005E00: dir_entry.name_of_entry=[ Header ]
0x00005E40: dir_entry.length_of_entry=[ 0E 00 ]
0x00005E42: dir_entry.type_of_entry=[ 02 ]
0x00005E43: dir_entry.node_colour_of_entry=[ 00 ]
0x00005E44: dir_entry.did_of_left_sibling=[ FF FF FF FF ] [-0x00000001]
0x00005E48: dir_entry.did_of_right_sibling=[ FF FF FF FF ] [-0x00000001]
0x00005E4C: dir_entry.did_of_child=[ FF FF FF FF ] [-0x00000001]
0x00005E50: dir_entry.class_id=[ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ]
0x00005E60: dir_entry.user_flag=[ 00 00 00 00 ] [0x00000000]
0x00005E64: dir_entry.time_st=[ 00 00 00 00 00 00 00 00 ]
0x00005E6C: dir_entry.time_ed=[ 00 00 00 00 00 00 00 00 ]
0x00005E74: dir_entry.sid_of_first_sector=[ 00 00 00 00 ] [0x00000000]
0x00005E78: dir_entry.total_stream_size=[ 74 05 00 00 ] [0x00000574]
0x00005E7C: dir_entry.reserved=[ 00 00 00 00 ] [0x00000000]


============= Storage_Directory_Entry [DID=5] ===================
0x00005E80: dir_entry.name_of_entry=[ ShimadzuLC ]
0x00005EC0: dir_entry.length_of_entry=[ 16 00 ]
0x00005EC2: dir_entry.type_of_entry=[ 01 ]
0x00005EC3: dir_entry.node_colour_of_entry=[ 01 ]
0x00005EC4: dir_entry.did_of_left_sibling=[ 10 00 00 00 ] [0x00000010]
0x00005EC8: dir_entry.did_of_right_sibling=[ FF FF FF FF ] [-0x00000001]
0x00005ECC: dir_entry.did_of_child=[ 06 00 00 00 ] [0x00000006]
0x00005ED0: dir_entry.class_id=[ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ]
0x00005EE0: dir_entry.user_flag=[ 00 00 00 00 ] [0x00000000]
0x00005EE4: dir_entry.time_st=[ A0 68 AF D3 8C FD CE 01 ]
0x00005EEC: dir_entry.time_ed=[ A0 68 AF D3 8C FD CE 01 ]
0x00005EF4: dir_entry.sid_of_first_sector=[ 00 00 00 00 ] [0x00000000]
0x00005EF8: dir_entry.total_stream_size=[ 00 00 00 00 ] [0x00000000]
0x00005EFC: dir_entry.reserved=[ 00 00 00 00 ] [0x00000000]


============= Storage_Directory_Entry [DID=6] ===================
0x00005F00: dir_entry.name_of_entry=[ Controller ]
0x00005F40: dir_entry.length_of_entry=[ 16 00 ]
0x00005F42: dir_entry.type_of_entry=[ 02 ]
0x00005F43: dir_entry.node_colour_of_entry=[ 01 ]
0x00005F44: dir_entry.did_of_left_sibling=[ 07 00 00 00 ] [0x00000007]
0x00005F48: dir_entry.did_of_right_sibling=[ 08 00 00 00 ] [0x00000008]
0x00005F4C: dir_entry.did_of_child=[ FF FF FF FF ] [-0x00000001]
0x00005F50: dir_entry.class_id=[ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ]
0x00005F60: dir_entry.user_flag=[ 00 00 00 00 ] [0x00000000]
0x00005F64: dir_entry.time_st=[ 00 00 00 00 00 00 00 00 ]
0x00005F6C: dir_entry.time_ed=[ 00 00 00 00 00 00 00 00 ]
0x00005F74: dir_entry.sid_of_first_sector=[ 16 00 00 00 ] [0x00000016]
0x00005F78: dir_entry.total_stream_size=[ 5A 07 00 00 ] [0x0000075A]
0x00005F7C: dir_entry.reserved=[ 00 00 00 00 ] [0x00000000]


============= Storage_Directory_Entry [DID=7] ===================
0x00005F80: dir_entry.name_of_entry=[ Pumps ]
0x00005FC0: dir_entry.length_of_entry=[ 0C 00 ]
0x00005FC2: dir_entry.type_of_entry=[ 02 ]
0x00005FC3: dir_entry.node_colour_of_entry=[ 01 ]
0x00005FC4: dir_entry.did_of_left_sibling=[ 0C 00 00 00 ] [0x0000000C]
0x00005FC8: dir_entry.did_of_right_sibling=[ 09 00 00 00 ] [0x00000009]
0x00005FCC: dir_entry.did_of_child=[ FF FF FF FF ] [-0x00000001]
0x00005FD0: dir_entry.class_id=[ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ]
0x00005FE0: dir_entry.user_flag=[ 00 00 00 00 ] [0x00000000]
0x00005FE4: dir_entry.time_st=[ 00 00 00 00 00 00 00 00 ]
0x00005FEC: dir_entry.time_ed=[ 00 00 00 00 00 00 00 00 ]
0x00005FF4: dir_entry.sid_of_first_sector=[ 34 00 00 00 ] [0x00000034]
0x00005FF8: dir_entry.total_stream_size=[ 60 01 00 00 ] [0x00000160]
0x00005FFC: dir_entry.reserved=[ 00 00 00 00 ] [0x00000000]


============= Storage_Directory_Entry [DID=8] ===================
0x00007000: dir_entry.name_of_entry=[ TimeProgram ]
0x00007040: dir_entry.length_of_entry=[ 18 00 ]
0x00007042: dir_entry.type_of_entry=[ 02 ]
0x00007043: dir_entry.node_colour_of_entry=[ 01 ]
0x00007044: dir_entry.did_of_left_sibling=[ 0A 00 00 00 ] [0x0000000A]
0x00007048: dir_entry.did_of_right_sibling=[ 0D 00 00 00 ] [0x0000000D]
0x0000704C: dir_entry.did_of_child=[ FF FF FF FF ] [-0x00000001]
0x00007050: dir_entry.class_id=[ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ]
0x00007060: dir_entry.user_flag=[ 00 00 00 00 ] [0x00000000]
0x00007064: dir_entry.time_st=[ 00 00 00 00 00 00 00 00 ]
0x0000706C: dir_entry.time_ed=[ 00 00 00 00 00 00 00 00 ]
0x00007074: dir_entry.sid_of_first_sector=[ 3A 00 00 00 ] [0x0000003A]
0x00007078: dir_entry.total_stream_size=[ F8 03 00 00 ] [0x000003F8]
0x0000707C: dir_entry.reserved=[ 00 00 00 00 ] [0x00000000]


============= Storage_Directory_Entry [DID=9] ===================
0x00007080: dir_entry.name_of_entry=[ Detectors ]
0x000070C0: dir_entry.length_of_entry=[ 14 00 ]
0x000070C2: dir_entry.type_of_entry=[ 02 ]
0x000070C3: dir_entry.node_colour_of_entry=[ 01 ]
0x000070C4: dir_entry.did_of_left_sibling=[ FF FF FF FF ] [-0x00000001]
0x000070C8: dir_entry.did_of_right_sibling=[ FF FF FF FF ] [-0x00000001]
0x000070CC: dir_entry.did_of_child=[ FF FF FF FF ] [-0x00000001]
0x000070D0: dir_entry.class_id=[ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ]
0x000070E0: dir_entry.user_flag=[ 00 00 00 00 ] [0x00000000]
0x000070E4: dir_entry.time_st=[ 00 00 00 00 00 00 00 00 ]
0x000070EC: dir_entry.time_ed=[ 00 00 00 00 00 00 00 00 ]
0x000070F4: dir_entry.sid_of_first_sector=[ 4A 00 00 00 ] [0x0000004A]
0x000070F8: dir_entry.total_stream_size=[ 04 02 00 00 ] [0x00000204]
0x000070FC: dir_entry.reserved=[ 00 00 00 00 ] [0x00000000]


============= Storage_Directory_Entry [DID=10] ===================
0x00007100: dir_entry.name_of_entry=[ Autosampler ]
0x00007140: dir_entry.length_of_entry=[ 18 00 ]
0x00007142: dir_entry.type_of_entry=[ 02 ]
0x00007143: dir_entry.node_colour_of_entry=[ 01 ]
0x00007144: dir_entry.did_of_left_sibling=[ FF FF FF FF ] [-0x00000001]
0x00007148: dir_entry.did_of_right_sibling=[ FF FF FF FF ] [-0x00000001]
0x0000714C: dir_entry.did_of_child=[ FF FF FF FF ] [-0x00000001]
0x00007150: dir_entry.class_id=[ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ]
0x00007160: dir_entry.user_flag=[ 00 00 00 00 ] [0x00000000]
0x00007164: dir_entry.time_st=[ 00 00 00 00 00 00 00 00 ]
0x0000716C: dir_entry.time_ed=[ 00 00 00 00 00 00 00 00 ]
0x00007174: dir_entry.sid_of_first_sector=[ 53 00 00 00 ] [0x00000053]
0x00007178: dir_entry.total_stream_size=[ 80 00 00 00 ] [0x00000080]
0x0000717C: dir_entry.reserved=[ 00 00 00 00 ] [0x00000000]


============= Storage_Directory_Entry [DID=11] ===================
0x00007180: dir_entry.name_of_entry=[ PDA ]
0x000071C0: dir_entry.length_of_entry=[ 08 00 ]
0x000071C2: dir_entry.type_of_entry=[ 02 ]
0x000071C3: dir_entry.node_colour_of_entry=[ 00 ]
0x000071C4: dir_entry.did_of_left_sibling=[ FF FF FF FF ] [-0x00000001]
0x000071C8: dir_entry.did_of_right_sibling=[ FF FF FF FF ] [-0x00000001]
0x000071CC: dir_entry.did_of_child=[ FF FF FF FF ] [-0x00000001]
0x000071D0: dir_entry.class_id=[ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ]
0x000071E0: dir_entry.user_flag=[ 00 00 00 00 ] [0x00000000]
0x000071E4: dir_entry.time_st=[ 00 00 00 00 00 00 00 00 ]
0x000071EC: dir_entry.time_ed=[ 00 00 00 00 00 00 00 00 ]
0x000071F4: dir_entry.sid_of_first_sector=[ 55 00 00 00 ] [0x00000055]
0x000071F8: dir_entry.total_stream_size=[ C8 03 00 00 ] [0x000003C8]
0x000071FC: dir_entry.reserved=[ 00 00 00 00 ] [0x00000000]


============= Storage_Directory_Entry [DID=12] ===================
0x00007C00: dir_entry.name_of_entry=[ OVEN ]
0x00007C40: dir_entry.length_of_entry=[ 0A 00 ]
0x00007C42: dir_entry.type_of_entry=[ 02 ]
0x00007C43: dir_entry.node_colour_of_entry=[ 01 ]
0x00007C44: dir_entry.did_of_left_sibling=[ 0B 00 00 00 ] [0x0000000B]
0x00007C48: dir_entry.did_of_right_sibling=[ 0F 00 00 00 ] [0x0000000F]
0x00007C4C: dir_entry.did_of_child=[ FF FF FF FF ] [-0x00000001]
0x00007C50: dir_entry.class_id=[ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ]
0x00007C60: dir_entry.user_flag=[ 00 00 00 00 ] [0x00000000]
0x00007C64: dir_entry.time_st=[ 00 00 00 00 00 00 00 00 ]
0x00007C6C: dir_entry.time_ed=[ 00 00 00 00 00 00 00 00 ]
0x00007C74: dir_entry.sid_of_first_sector=[ 65 00 00 00 ] [0x00000065]
0x00007C78: dir_entry.total_stream_size=[ 38 00 00 00 ] [0x00000038]
0x00007C7C: dir_entry.reserved=[ 00 00 00 00 ] [0x00000000]


============= Storage_Directory_Entry [DID=13] ===================
0x00007C80: dir_entry.name_of_entry=[ SUBCONTROLLER ]
0x00007CC0: dir_entry.length_of_entry=[ 1C 00 ]
0x00007CC2: dir_entry.type_of_entry=[ 02 ]
0x00007CC3: dir_entry.node_colour_of_entry=[ 01 ]
0x00007CC4: dir_entry.did_of_left_sibling=[ 0E 00 00 00 ] [0x0000000E]
0x00007CC8: dir_entry.did_of_right_sibling=[ FF FF FF FF ] [-0x00000001]
0x00007CCC: dir_entry.did_of_child=[ FF FF FF FF ] [-0x00000001]
0x00007CD0: dir_entry.class_id=[ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ]
0x00007CE0: dir_entry.user_flag=[ 00 00 00 00 ] [0x00000000]
0x00007CE4: dir_entry.time_st=[ 00 00 00 00 00 00 00 00 ]
0x00007CEC: dir_entry.time_ed=[ 00 00 00 00 00 00 00 00 ]
0x00007CF4: dir_entry.sid_of_first_sector=[ 66 00 00 00 ] [0x00000066]
0x00007CF8: dir_entry.total_stream_size=[ E0 05 00 00 ] [0x000005E0]
0x00007CFC: dir_entry.reserved=[ 00 00 00 00 ] [0x00000000]


============= Storage_Directory_Entry [DID=14] ===================
0x00007D00: dir_entry.name_of_entry=[ Pretreatment ]
0x00007D40: dir_entry.length_of_entry=[ 1A 00 ]
0x00007D42: dir_entry.type_of_entry=[ 02 ]
0x00007D43: dir_entry.node_colour_of_entry=[ 00 ]
0x00007D44: dir_entry.did_of_left_sibling=[ FF FF FF FF ] [-0x00000001]
0x00007D48: dir_entry.did_of_right_sibling=[ FF FF FF FF ] [-0x00000001]
0x00007D4C: dir_entry.did_of_child=[ FF FF FF FF ] [-0x00000001]
0x00007D50: dir_entry.class_id=[ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ]
0x00007D60: dir_entry.user_flag=[ 00 00 00 00 ] [0x00000000]
0x00007D64: dir_entry.time_st=[ 00 00 00 00 00 00 00 00 ]
0x00007D6C: dir_entry.time_ed=[ 00 00 00 00 00 00 00 00 ]
0x00007D74: dir_entry.sid_of_first_sector=[ 7E 00 00 00 ] [0x0000007E]
0x00007D78: dir_entry.total_stream_size=[ A0 0C 00 00 ] [0x00000CA0]
0x00007D7C: dir_entry.reserved=[ 00 00 00 00 ] [0x00000000]


============= Storage_Directory_Entry [DID=15] ===================
0x00007D80: dir_entry.name_of_entry=[ Text ]
0x00007DC0: dir_entry.length_of_entry=[ 0A 00 ]
0x00007DC2: dir_entry.type_of_entry=[ 02 ]
0x00007DC3: dir_entry.node_colour_of_entry=[ 00 ]
0x00007DC4: dir_entry.did_of_left_sibling=[ FF FF FF FF ] [-0x00000001]
0x00007DC8: dir_entry.did_of_right_sibling=[ FF FF FF FF ] [-0x00000001]
0x00007DCC: dir_entry.did_of_child=[ FF FF FF FF ] [-0x00000001]
0x00007DD0: dir_entry.class_id=[ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ]
0x00007DE0: dir_entry.user_flag=[ 00 00 00 00 ] [0x00000000]
0x00007DE4: dir_entry.time_st=[ 00 00 00 00 00 00 00 00 ]
0x00007DEC: dir_entry.time_ed=[ 00 00 00 00 00 00 00 00 ]
0x00007DF4: dir_entry.sid_of_first_sector=[ B1 00 00 00 ] [0x000000B1]
0x00007DF8: dir_entry.total_stream_size=[ A0 08 00 00 ] [0x000008A0]
0x00007DFC: dir_entry.reserved=[ 00 00 00 00 ] [0x00000000]


============= Storage_Directory_Entry [DID=16] ===================
0x00009C00: dir_entry.name_of_entry=[ AuditData ]
0x00009C40: dir_entry.length_of_entry=[ 14 00 ]
0x00009C42: dir_entry.type_of_entry=[ 02 ]
0x00009C43: dir_entry.node_colour_of_entry=[ 01 ]
0x00009C44: dir_entry.did_of_left_sibling=[ 01 00 00 00 ] [0x00000001]
0x00009C48: dir_entry.did_of_right_sibling=[ 11 00 00 00 ] [0x00000011]
0x00009C4C: dir_entry.did_of_child=[ FF FF FF FF ] [-0x00000001]
0x00009C50: dir_entry.class_id=[ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ]
0x00009C60: dir_entry.user_flag=[ 00 00 00 00 ] [0x00000000]
0x00009C64: dir_entry.time_st=[ 00 00 00 00 00 00 00 00 ]
0x00009C6C: dir_entry.time_ed=[ 00 00 00 00 00 00 00 00 ]
0x00009C74: dir_entry.sid_of_first_sector=[ D4 00 00 00 ] [0x000000D4]
0x00009C78: dir_entry.total_stream_size=[ 04 00 00 00 ] [0x00000004]
0x00009C7C: dir_entry.reserved=[ 00 00 00 00 ] [0x00000000]


============= Storage_Directory_Entry [DID=17] ===================
0x00009C80: dir_entry.name_of_entry=[ LCQ Header ]
0x00009CC0: dir_entry.length_of_entry=[ 16 00 ]
0x00009CC2: dir_entry.type_of_entry=[ 02 ]
0x00009CC3: dir_entry.node_colour_of_entry=[ 00 ]
0x00009CC4: dir_entry.did_of_left_sibling=[ FF FF FF FF ] [-0x00000001]
0x00009CC8: dir_entry.did_of_right_sibling=[ FF FF FF FF ] [-0x00000001]
0x00009CCC: dir_entry.did_of_child=[ FF FF FF FF ] [-0x00000001]
0x00009CD0: dir_entry.class_id=[ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ]
0x00009CE0: dir_entry.user_flag=[ 00 00 00 00 ] [0x00000000]
0x00009CE4: dir_entry.time_st=[ 00 00 00 00 00 00 00 00 ]
0x00009CEC: dir_entry.time_ed=[ 00 00 00 00 00 00 00 00 ]
0x00009CF4: dir_entry.sid_of_first_sector=[ D5 00 00 00 ] [0x000000D5]
0x00009CF8: dir_entry.total_stream_size=[ 4C 05 00 00 ] [0x0000054C]
0x00009CFC: dir_entry.reserved=[ 00 00 00 00 ] [0x00000000]


============= Storage_Directory_Entry [DID=18] ===================
0x00009D00: dir_entry.name_of_entry=[  ]
0x00009D40: dir_entry.length_of_entry=[ 00 00 ]
0x00009D42: dir_entry.type_of_entry=[ 00 ]
0x00009D43: dir_entry.node_colour_of_entry=[ 00 ]
0x00009D44: dir_entry.did_of_left_sibling=[ FF FF FF FF ] [-0x00000001]
0x00009D48: dir_entry.did_of_right_sibling=[ FF FF FF FF ] [-0x00000001]
0x00009D4C: dir_entry.did_of_child=[ FF FF FF FF ] [-0x00000001]
0x00009D50: dir_entry.class_id=[ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ]
0x00009D60: dir_entry.user_flag=[ 00 00 00 00 ] [0x00000000]
0x00009D64: dir_entry.time_st=[ 00 00 00 00 00 00 00 00 ]
0x00009D6C: dir_entry.time_ed=[ 00 00 00 00 00 00 00 00 ]
0x00009D74: dir_entry.sid_of_first_sector=[ 00 00 00 00 ] [0x00000000]
0x00009D78: dir_entry.total_stream_size=[ 00 00 00 00 ] [0x00000000]
0x00009D7C: dir_entry.reserved=[ 00 00 00 00 ] [0x00000000]


============= Storage_Directory_Entry [DID=19] ===================
0x00009D80: dir_entry.name_of_entry=[  ]
0x00009DC0: dir_entry.length_of_entry=[ 00 00 ]
0x00009DC2: dir_entry.type_of_entry=[ 00 ]
0x00009DC3: dir_entry.node_colour_of_entry=[ 00 ]
0x00009DC4: dir_entry.did_of_left_sibling=[ FF FF FF FF ] [-0x00000001]
0x00009DC8: dir_entry.did_of_right_sibling=[ FF FF FF FF ] [-0x00000001]
0x00009DCC: dir_entry.did_of_child=[ FF FF FF FF ] [-0x00000001]
0x00009DD0: dir_entry.class_id=[ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ]
0x00009DE0: dir_entry.user_flag=[ 00 00 00 00 ] [0x00000000]
0x00009DE4: dir_entry.time_st=[ 00 00 00 00 00 00 00 00 ]
0x00009DEC: dir_entry.time_ed=[ 00 00 00 00 00 00 00 00 ]
0x00009DF4: dir_entry.sid_of_first_sector=[ 00 00 00 00 ] [0x00000000]
0x00009DF8: dir_entry.total_stream_size=[ 00 00 00 00 ] [0x00000000]
0x00009DFC: dir_entry.reserved=[ 00 00 00 00 ] [0x00000000]


=================================================
test.bin 的链接: http://pan.baidu.com/s/1o6I09ui


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值