0_CURRENT_HEADER_DATA.datheader是什么意思文件?

1231人阅读
Windows 系统编程(20)
Windows系统中会存在三个index.dat文件。它们分别用来保存IE上网的cookies、临时文件和上网历史的索引信息。根据Windows系统版本不同,这些文件在系统中的位置也是不尽相同的。
在Windows&95/98/Me/&NT中,index.dat一般会存放在下面的位置中:
C:\Windows\Cookies\index.dat
C:\Windows\History\History.IE5\index.dat
C:\Windows\Temporary&Internet&Files\Content.IE5\index.dat
而在Window2000/XP系统中,index.dat一般会存在于下面的位置中: C:\Documents&and&Settings\&username&\Cookies\index.dat
C:\Documents&and&Settings\&username&\Local&Settings\History\History.IE5\index.dat
C:\Documents&and&Settings\&username&\Local&Settings
\Temporary&Internet&Files\Content.IE5\index.dat
在win7\vista系统中,index.dat一般会存在于下面的位置中:
C:\Users\Toshiba\AppData\Local\Microsoft\Windows\
History\History.IE5\index.dat;
这些index.dat文件是系统、隐藏的文件,它们不随IE浏览器中的cookies值、临时文件和历史记录的清除而删除——这就是它的可怕之处。下面来详细描述index.dat文件的结构。
二.Index.dat文件结构
Index.dat文件分为两部分,头部分和条目(Entry)部分。
所谓头部分,顾名思义就是文件开始部分。它记录着这个文件的总的信息,如文件文件格式版本、大小、子文件夹等等。每个index.dat文件仅有一个头部分。
其余的部分都是条目部分。Index.dat中的各种类型的条目数据结构不同,不过每个条目的前8个字节结构相同,系统就是用这两个DWORD字段来区分条目类型的。
下面我们来具体分析一下各个部分:
index.dat的头部大小是固定的,为16K。其开始592个字节(0x250)为小(SMALL)的头部分。紧接着的空间是3948个DWORD,它用来作为分配MAP。数据结构如下:
struct&CacheDir
&&&DWORD&nFileC
&&&CHAR&sDirName[8];
typedef&struct&_MEMMAP_HEADER_SMALL&
TCHAR&&&&FileSignature[28];&//”Client&UrlCache&MMF&Ver&5.2”
&&&&DWORD&&&&FileS&&&&&&&&&//index.dat文件的大小
&&&&DWORD&&&&dwHashTableO&&//第一个哈希表的偏移
&&&&DWORD&&&&NumUrlInternalE
&&&&DWORD&&&&NumUrlEntriesA
&&//&DWORD&&&&dwG&//&无效数据,只在/Zp8编译使用
&&&&LONGLONG&CacheL
&&&&LONGLONG&CacheS
&&&&LONGLONG&ExemptU
&&&&DWORD&&&&nDirC&&&&&//子目录个数
&&&&CacheDir&DirArray[32];&&&&&//子目录名称
&&&&DWORD&&&&dwHeaderData[33];
}&MEMMAP_HEADER_SMALL;
typedef&struct&_MEMMAP_HEADER&:&_MEMMAP_HEADER_SMALL&
&&&&DWORD&AllocationBitMap[3948];
}&MEMMAP_HEADER,&*LPMEMMAP_HEADER;
2.各种条目结构
上文说过每个条目都是以同样结构的2个DWORD开始的,这个结构如下:
typedef&struct&FILEMAP_ENTRY
&&&&DWORD&dwS&&//条目标识
&&&&DWORD&nB&//条目占用多少个快(128字节)
}&*LPFILEMAP_ENTRY;
dwSig用来标识各种类型的标识。
本条目空闲,只有此类条目没有nBlocks成员。
0xdeadbeef
URL值
关于各种条目的结构我们下面会详细说明。
nBlocks用来描述此条目所占用的块数。注意index.dat中的块大小为128字节。
2.1哈希表条目
现在开始说明各种类型的条目。为什么先要说哈希表呢?这是因为index.dat使用一个哈希表链来作为目录,从而能够快速找到指定名称的条目。
Index.dat文件中每个哈希表大小都不能超过一个内存分页,即不能超过4K大小。每个哈希表部分是由下面的结构开始的,同时系统也是利用了这个结构,将index.dat中所有的哈希表部分链接起来的。
struct&HASH_FILEMAP_ENTRY&:&FILEMAP_ENTRY
&&&&DWORD&dwN&//&下一个哈希表偏移(0表示为最后一个)
&&&&&&&&&&&&&&&&&&//偏移以index.dat文件第0字节为基地址。
&&&&DWORD&nB&//&本哈希表的序列号。从0,1,2…….
紧接着这个结构就是一个哈希表,每个哈希表的关键是哈希函数,下面是这个哈希表的哈希函数:
PRIVATE&DWORD&HashKey&(LPCSTR&lpsz)
&&&&&&&&DWORD&
&&&&&&&&BYTE&c[4];
&&&&Hash,&Hash2;
&&&&const&static&BYTE&bTranslate[256]&=
&&&&&&&&1,&14,110,&25,&97,174,132,119,138,170,125,118,&27,233,140,&51,
&&&&&&&&87,197,177,107,234,169,&56,&68,&30,&&7,173,&73,188,&40,&36,&65,
&&&&&&&&49,213,104,190,&57,211,148,223,&48,115,&15,&&2,&67,186,210,&28,
&&&&&&&&12,181,103,&70,&22,&58,&75,&78,183,167,238,157,124,147,172,144,
&&&&&&&&176,161,141,&86,&60,&66,128,&83,156,241,&79,&46,168,198,&41,254,
&&&&&&&&178,&85,253,237,250,154,133,&88,&35,206,&95,116,252,192,&54,221,
&&&&&&&&102,218,255,240,&82,106,158,201,&61,&&3,&89,&&9,&42,155,159,&93,
&&&&&&&&166,&80,&50,&34,175,195,100,&99,&26,150,&16,145,&&4,&33,&&8,189,
&&&&&&&&121,&64,&77,&72,208,245,130,122,143,&55,105,134,&29,164,185,194,
&&&&&&&&193,239,101,242,&&5,171,126,&11,&74,&59,137,228,108,191,232,139,
&&&&&&&&6,&24,&81,&20,127,&17,&91,&92,251,151,225,207,&21,&98,113,112,
&&&&&&&&84,226,&18,214,199,187,&13,&32,&94,220,224,212,247,204,196,&43,
&&&&&&&&249,236,&45,244,111,182,153,136,129,&90,217,202,&19,165,231,&71,
&&&&&&&&230,142,&96,227,&62,179,246,114,162,&53,160,215,205,180,&47,109,
&&&&&&&&44,&38,&31,149,135,&&0,216,&52,&63,&23,&37,&69,&39,117,146,184,
&&&&&&&&163,200,222,235,248,243,219,&10,152,131,123,229,203,&76,120,209
&&&&//&Seed&the&hash&values&based&on&the&first&character.
&&&&Hash.c[0]&=&bTranslate[&*lpsz];
&&&&Hash.c[1]&=&bTranslate[(*lpsz+1)&&&255];
&&&&Hash.c[2]&=&bTranslate[(*lpsz+2)&&&255];
&&&&Hash.c[3]&=&bTranslate[(*lpsz+3)&&&255];
&&&&while&(*++lpsz)
&&&&&&&&//&Allow&URLs&differing&only&by&trailing&slash&to&collide.
&&&&&&&&if&(lpsz[0]&==&'/'&&&&lpsz[1]&==&0)
&&&&&&&&&&&&
&&&&&&&&Hash2.c[0]&=&Hash.c[0]&^&*
&&&&&&&&Hash2.c[1]&=&Hash.c[1]&^&*
&&&&&&&&Hash2.c[2]&=&Hash.c[2]&^&*
&&&&&&&&Hash2.c[3]&=&Hash.c[3]&^&*
&&&&&&&&&&&&
&&&&&&&&Hash.c[0]&=&bTranslate[Hash2.c[0]];
&&&&&&&&Hash.c[1]&=&bTranslate[Hash2.c[1]];
&&&&&&&&Hash.c[2]&=&bTranslate[Hash2.c[2]];
&&&&&&&&Hash.c[3]&=&bTranslate[Hash2.c[3]];
&&&&return&Hash.
经过这个函数产生的值,根据其低6位就是最终的数组行号(即相当于模64)。
由于解决冲突的方法是:对同一个哈希地址提供7个位置空间。于是呈现在我们眼前是实际上就是一个横向7列、纵向64行的表结构:
从这样的表结构中,我们知道这个哈希表以64为模。每个表允许7个相同值,它们按顺序排列在一起。所以每个哈希表结构可以索引448(64×7)个条目。
下面就是每个元素的结构:
struct&HASH_ITEM
&&&&DWORD&dwH&&//哈希值,注意最后6位为0
&&&&DWORD&dwO&//指向的实体中的记录部分的偏移
&&&&&&&&&&&&&&&&&//偏移以index.dat文件第0字节为基地址。
我们注意到了:数组元素的哈希值的低6为0。于是系统也是利用了这个特征,将这6位数用作了每个元素的格式表示:
#define&HASH_BIT_NOTURL&&&0x0001&&//&位0
#define&HASH_BIT_LOCK&&&&&&0x0002&&//位1
#define&HASH_BIT_REDIR&&&&&0x0004&&//位2
#define&HASH_BIT_HASGRP&&&0x0008&&//位3
#define&HASH_BIT_MULTGRP&&0x0010&&//位4
#define&HASH_BIT_RESERVED&0x0020&&//位5
//&上面的哈希值组合
#define&HASH_UNLOCKED&&&&&&0&&//&URL条目,没被锁定
#define&HASH_FREE&&&&&&&&&&&&1&&//&空闲项,以前曾被使用过
#define&HASH_LOCKED&&&&&&&&&2&&//&URL条目,&已锁定
#define&HASH_END&&&&&&&&&&&&&3&&//&空闲项,没被使用过
#define&HASH_UNLOCKED_SLASH&&4&&//&URL&entry,&not&locked,&trailing&slash&redir
#define&HASH_REDIR&&&&&&&&&&&5&&//&redirect&entry
#define&HASH_LOCKED_SLASH&&&6&&//&URL&entry,&locked,&trailing&slash&redir
#define&HASH_FLAG_MASK&&&&&&&7&&//&illegal,&used&to&mask&out&hash&flags
2.2&URL条目
URL条目是使用的最多的条目。它的结构和LEAK条目的结构相同,如下:
struct&IE5_URL_FILEMAP_ENTRY&:&FILEMAP_ENTRY
&&&&LONGLONG&LastModifiedT&&&&&&&//最后修改时间
&&&&LONGLONG&LastAccessedT&&&&&&//最后访问时间
&&&&DWORD&&&&dostExpireT&&&&&&&&&//到期时间
&&&&DWORD&&&&dostPostCheckT
&&&&DWORD&&&&dwFileS&&&&&&&&&&&&&&//硬盘缓存中的文件的大小
&&&&DWORD&&&&dwRedirHashItemO&&//&ask&DanpoZ
&&&&DWORD&&&&dwGroupO
&&&&&&&&DWORD&&dwExemptD&&&//&for&SIG_URL
&&&&&&&&DWORD&&dwNextL&&&&&&//&for&SIG_LEAK
&&&&DWORD&&&&CopyS&&&&&&&&&//&好像总是0x60
&&&&DWORD&&&&UrlNameO&&&//&URL名称偏移。基地址是本URL条目的开始地址
&&&&BYTE&&&&&DirI&&&&&&&&&&&//&属于的子文件夹索引
&&&&BYTE&&&&&bSyncS&&&&&&&&//&automatic&sync&mode&state
&&&&BYTE&&&&&bVerC&&&&&&&&//&建立本ENTRY的CACHE的版本
&&&&BYTE&&&&&bVerU&&&&&&&&//&升级本ENTRY的CACHE的版本
DWORD&&&&InternalFileNameO&//硬盘上文件名(不包括目录)字符串的偏移,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//基地址是本URL条目的开始地址。
&&&&DWORD&&&&CacheEntryT&&&&&&&&//缓存类型
&&&&DWORD&&&&HeaderInfoO&//从WEB服务器中取本文件时的返回的HTTP头部信息
&&&&DWORD&&&&HeaderInfoS&&//和大小(注意包括最后的回车换行的)
&&&&DWORD&&&&FileExtensionO&&&&//&should&be&WORD
&&&&DWORD&&&&dostLastSyncT&&&&&&&
&&&&DWORD&&&&NumA&&&&&&&&&&&&//&存取次数(点击率)
&&&&DWORD&&&&NumR&&&&&&&&&&//&引用次数
&&&&DWORD&&&&dostFileCreationT&&&//&好像是ULONG?
2.4&REDIR结构:
struct&REDIR_FILEMAP_ENTRY&:&FILEMAP_ENTRY
&&&&DWORD&dwItemO&&//&offset&to&hash&table&item&of&destination&URL
&&&&DWORD&dwHashV&&&//&destination&URL&hash&value&(BUGBUG:&collisions?)
&&&&char&&szUrl[4];&&&&&&//&original&URL,&can&occupy&more&bytes
2.5&GLIST结构:
struct&LIST_FILEMAP_ENTRY&:&FILEMAP_ENTRY
&&&&DWORD&dwN&//&offset&to&next&element&in&list
&&&&DWORD&nB&//&sequence&number&for&this&block
三.显示系统缓存信息
上面就是一个完整的index.dat文件的结构,利用这些结构我们就可以写出一个完整显示系统缓存信息的程序。这项非常琐碎的工作,于是微软专门提供了一个函数库——WinInet。利用这个库中的函数,程序员可以相当方便地取出系统中缓存中的信息。
关于WinInet库的使用方法网络上有很多文章,大家可以参阅。
1.&&Exploring&the&URL&Cache&&()
2.&&Reading&the&Internet&Explorer&Cache&()
四.工作原理
上面我们分析了index.dat文件的结构,那么系统在什么时候读写这个文件的信息呢?
1.COOKIES存取
在用户用IE浏览器上网时,当开始输入一个网址后,IE会根据输入的网址、用户名等信息组成一个字符串,将这个字符串作为参数到哈希函数中产生一个哈希值,然后查找具体的URL实体。如果能够找到,那么IE就会具体分析此URL实体指定的COOKIES.TXT文件,看是否已经过期,若已经过期则删除;否则将在IE生成的HTTP请求报文中加上一个cookies:××××××(×××就是.txt文件中的信息)这样的请求头部。
在IE浏览器收到的HTTP响应报文中若响应头部中包含有Set-cookies:×××××信息时,此时IE就会将这个COOKIES值保存在一个.txt文件中,并在index.dat文件中建立一个索引值。
2.临时的缓存文件存取
临时缓存文件是一种客户端缓存技术,它有利于节省网络带宽资源并能加快浏览速度。每次使用IE浏览器上网时,IE会发送一个请求报文要求传输一个文件(比如.htm文件、.jpg文件、.css文件等等)。WEB服务器响应请求,将所要求的文件传输给IE.。IE在显示这个文件的同时,会将它放到缓存目录中,并在Index.dat文件中添加索引。
等下次,IE要求传输相同的文件时,IE便会在index.dat中找到这个文件的记录了(当然,如果根本没有传输下载过,index.dat中是不会找到这个记录的)。IE先检查这个文件是否已经过期了(WEB服务器会在响应某些文件请求时,在HTTP响应报文中添加一个响应头部Age:×××××来明确表示这个文件在客户机上保存的时间)。如果没有过期,IE便会直接利用这个缓冲文件而不会发送HTTP请求报文的。
如果没有明确的过期时间或者已经过期来,IE便会在发送的HTTP请求报文中加上一条请求头部If_modified-since:××××。而WEB服务器发现所要求的文件并没有改变,它便会发送一个304&Not&Modified报文,而不再传输文件了。
3.历史记录
历史记录只是用来保存曾经浏览过的网页的网址。它并不保存其他的一些信息。也不和发送/接受HTTP协议有关。所以比较简单。
五.举例说明
理论说了很多,下面来举一个例子。通过这个例子我们看看系统是这样使用使用index.dat来索引缓存的以及系统是怎样使用缓存的。
一台装有WEB浏览器的客户机,一台IP地址为90.0.0.6的IIS5的WEB服务器。服务器有一个名为test.asp的网页。test.asp包含一张图,并会设置一个cookies。
2.第一次调用网页
过程如下图所示:
具体的HTTP报文如下:
GET /test.asp HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-
powerpoint, application/msword, **
Referer: http://90.0.0.6/test.asp
Accept-Language: en
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 ( MSIE 6.0; Windows NT 5.1; SV1)
Host: 90.0.0.6
Connection: Keep-Alive
Cookie: name= ASPSESSIONIDASARBACA=NOMPFILDEICPMBJBKCDGKGDC
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
X-Powered-By: ASP.NET
Date: Thu, 26 Oct :45 GMT
Content-Type: image/gif
Accept-Ranges: bytes
Last-Modified: Sun, 15 Oct :58 GMT
ETag: &075bc :19f8&
Content-Length: 66806
我们再来看一下,index.dat文件有什么变化呢?
1)临时缓存文件
首先我们计算1.gif文件的HASH值。URL名称为:&,经过上文的HashKey计算得出结果:0x127F5346。于是我们在第一个HASH表的0X5000&+&8&×7&×&(0x127F5346&&&0x3F)=&0x5150&开始查找:
h: 01 00 00 00 00 9F 03 00 01 00 00 00 00 FD 03 00 ; .....?......?.
h:&40 53 7F 12 80 66 00 00&40 E7 8F A7 80 F2 01 00 ; @S.EURf..@鐝?.
h: C0 68 1D 59 80 1B 03 00 01 00 00 00 00 48 03 00 ; 纇.YEUR........H..
h: 01 00 00 00 00 6C 0E 00 01 00 00 00 00 93 03 00 ; .....l.......?.
h: 01 00 00 00 00 B6 03 00 C0 48 BE F4 00 D0 00 ; .....?.繦爵.?
发现5160h处就是我们要找的HASH_ITEM。于是我们在0X6680处找到我们要找的URL条目。
h:&55 52 4C 20 03 00 00 00 00&75 BC 43 72 F0 C6 01 ; URL .....u糃r鹌.
h:&50 AC 0D 1D CC F8 C6 01 00 00 00 00 00 00 00 00&; P?.跳?........
h:&F6 04 01 00 00 00 00 00 00 00 00 00 00 00 00 00&; ?..............
h:&60 00 00 00 68 00 00 00 05 01 10 10 84 00 00 00&; `...h.......?..
h:&41 00 00 00 90 00 00 00 82 00 00 00 00 00 00 00&; A...?..?......
h:&5A 35 49 37 02 00 00 00 00 00 00 00 5A 35 02 35&; Z5I7........Z5.5
h: 00 00 00 00 0D F0 AD 0B 68 74 74 70 3A 2F 2F 39 ; .....瓠.http://9
h: 30 2E 30 2E 30 2E 36 2F 69 6D 67 2F 31 2E 67 69 ; 0.0.0.6/img/1.gi
h: 66 00 AD 0B 31 5B 31 5D 2E 67 69 66 00 F0 AD 0B ; f.?1[1].gif.瓠.
h: 48 54 54 50 2F 31 2E 31 20 32 30 30 20 4F 4B 0D ; HTTP/1.1 200 OK.
h: 0A 58 2D 50 6F 77 65 72 65 64 2D 42 79 3A 20 41 ; .X-Powered-By: A
h: 53 50 2E 4E 45 54 0D 0A 43 6F 6E 74 65 6E 74 2D ; SP.NET..Content-
h: 54 79 70 65 3A 20 69 6D 61 67 65 2F 67 69 66 0D ; Type: image/gif.
h: 0A 45 54 61 67 3A 20 22 30 37 35 62 63 34 33 37 ; .ETag: &075bc437
h: 32 66 30 63 36 31 3A 31 39 66 38 22 0D 0A 43 6F ; 2f0c61:19f8&..Co
h: 6E 74 65 6E 74 2D 4C 65 6E 67 74 68 3A 20 36 36 ; ntent-Length: 66
h: 38 30 36 0D 0A 0D 0A 7E 55 3A 71 67 6D 69 73 0D ; 806....~U:qgmis.
h: 0A 00 AD 0B 0D F0 AD 0B 0D F0 AD 0B 0D F0 AD 0B ; ..?.瓠..瓠..瓠.
h: 0D F0 AD 0B 0D F0 AD 0B 0D F0 AD 0B 0D F0 AD 0B ; .瓠..瓠..瓠..瓠.
h: 0D F0 AD 0B 0D F0 AD 0B 0D F0 AD 0B 0D F0 AD 0B ; .瓠..瓠..瓠..瓠.
h: 0D F0 AD 0B 0D F0 AD 0B 0D F0 AD 0B 0D F0 AD 0B ; .瓠..瓠..瓠..瓠.
h: 0D F0 AD 0B 0D F0 AD 0B 0D F0 AD 0B 0D F0 AD 0B ; .瓠..瓠..瓠..瓠.
h: 0D F0 AD 0B 0D F0 AD 0B 0D F0 AD 0B 0D F0 ; .瓠..瓠..瓠..
分析这个结构,FILEMAP_ENTRY分析如下:
55 52 4C 20
02 00 00 00
此条目占据2×128=256个字节
IE5_URL_FILEMAP_ENTRY分析如下:
LastModifiedTime
75 BC 43 72 F 0 C 6 01
最后修改时间: &11 :54:58 PM
LastAccessedTime
50 AC 0D 1D CC F8 C6 01
最后存取时间: &02 :58:17 PM
dostExpireTime
00 00 00 00
dostPostCheckTime
00 00 00 00
dwFileSize
F6 04 01 00
硬盘缓存的文件大小0x104F6
dwRedirHashItemOffset
00 00 00 00
dwGroupOffset
00 00 00 00
dwExemptDelta
00 00 00 00
60 00 00 00
UrlNameOffset
68 00 00 00
URL 地址保存在偏移为0X68即0X66E8的位置处。 (http://90.0.0.6/img/1.gif)
硬盘文件子目录序号为:05
bSyncState
bVerCreate
bVerUpdate
InternalFileNameOffset
84 00 00 00
硬盘缓存文件名保存在偏移为0X84即0X6704的位置处。 (1[1].gif)
CacheEntryType
41 30 00 00
HeaderInfoOffset
90 00 00 00
HTTP 首部信息保存在偏移为0X90即0X6710的位置处。 (HTTP/1.1 200 OK X-Powered-By: ASP.NET Content-Type: image/gif ETag: &075bc:19f8& Content-Length: 66806 &~U:qgmis )
HeaderInfoSize
82 00 00 00
HTTP 首部信息大小。
FileExtensionOffset
00 00 00 00
dostLastSyncTime
5A 35 49 37
最后同步时间为:
&02 :58:18 PM
NumAccessed
02 00 00 00
NumReferences
00 00 00 00
dostFileCreationTime
5A 35 02 35
文件建立时间
我们用同样的方法分析test.asp在index.dat中保存成test[1].htm的索引信息。同样也可以分析cookies的index.dat的索引信息。
经过了一次访问后,IE会将所有的访问过的文件放入缓存中,并在index.dat作索引。待第二次访问同样的网页时,将会出现什么情况呢?
3.第二此调用网页
当我们再次浏览这个网页的时候。我们来看看发生了什么情况。
下面是它们的HTTP报文信息。
GET /test.asp HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, **
Referer: http://90.0.0.6/test.asp
Accept-Language: en
Accept-Encoding: gzip, deflate
If-Modified-Since: Sun, 15 Oct :58 GMT
If-None-Match: &075bc:19f8&
User-Agent: Mozilla/4.0 ( MSIE 6.0; Windows NT 5.1; SV1)
Host: 90.0.0.6
Connection: Keep-Alive
Cookie: name= ASPSESSIONIDASARBACA=OOMPFILDPDCEKPECJOOCPJEP
HTTP/1.1 304 Not Modified
Server: Microsoft-IIS/5.0
Date: Thu, 26 Oct :33 GMT
X-Powered-By: ASP.NET
ETag: &075bc:19f8&
Content-Length: 0
我们发现第二次访问时,1.gif文件根本不需要再次传输。因为服务器端这个文件根本没有变化过。于是IE就直接从index.dat索引文件中找到1.gif文件保存在硬盘上的位置后,就直接使用它了——这就是系统使用缓存的最终目的了。
说说上面这些报文的一些题外话。
1)&&每次请求一个ASP网页时,WEB服务器都会回应一个有ASPSEEIONID×××的cookies报文,ASP.DLL就是使用这个ASPSESSIONID来管理Session对象的——即使我们在asp文件中根本就没有使用这个对象。
2)&&每次这个ASPSESSSIONID不会保存在硬盘上,它是存在IE浏览器的内存中,并且有时间期限。关闭IE或者过期后,将不会再在下次请求报文中包含这个ASPSESSIONID&cookies值。于是WEB服务器又返回和一个原来不同的新的SESSIONID值。
本文主要剖析了Windows中用来索引缓存文件、cookies文件和上文记录的Index.dat文件,并给了例题。本文主要在分析微软代码的基础的得出的,但是对于index.dat文件中的一些结构中的特殊字段不能正确得出其含义,非常遗憾,希望有爱好者能完成。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:426739次
积分:6183
积分:6183
排名:第2635名
原创:158篇
转载:138篇
评论:89条
(1)(1)(1)(3)(1)(2)(3)(6)(4)(3)(1)(1)(4)(1)(1)(2)(1)(2)(1)(13)(1)(3)(8)(1)(5)(1)(6)(4)(5)(6)(9)(7)(1)(1)(5)(6)(8)(4)(6)(7)(7)(9)(24)(18)(17)(2)(1)(7)(4)(1)(3)(1)(3)(5)(7)(3)(7)(1)(1)(25)(8)(7)
&a href=&/& targetindex.dat文件剖析_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
index.dat文件剖析
上传于||文档简介
&&I​n​d​e​x​.​d​a​t​文​件​结​构​,​显​示​系​统​缓​存​信​息​,​工​作​原​理
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
下载文档到电脑,查找使用更方便
还剩8页未读,继续阅读
你可能喜欢君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
matlab批量生成dat文件
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口二次元同好交流新大陆
扫码下载App
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(1035)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_094074',
blogTitle:'ENVI里打开.DAT文件',
blogAbstract:'一组.dat数据含有若干band*.dat,一个header.dat,称为头文件。\r\n1、主菜单File——Open Image File,选取要打开的文件,如band1.dat,弹出“header”对话框。\r\n2、(1)用自己编辑的方式,用“写字板”打开header.dat\r\n&& 提取信息:& “Header”对话框&&&&&&& “header.dat”\r\n&&&&&&&&&&&&&&&& samples&&&&&&& =&&&&& pixels per line\r\n&&&&&&&&&&&&&&&& lines&&&&&',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:1,
publishTime:5,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}

我要回帖

更多关于 header是什么意思 的文章

 

随机推荐