亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? chmformat.html

?? CHM的文件格式
?? HTML
字號:
<html><head><title>Microsoft's HTML Help (.chm) format</title>

<meta name="author" content="Matthew T. Russotto"></head>
<body bgcolor=black text=lightgreen>
<h1> Microsoft's HTML Help (.chm) format</h1>
<h2 id="preface"> Preface</h2>
<p>
This is documentation on the .chm format used by Microsoft HTML Help.
This format has been reverse engineered in the past, but as far as I
know this is the first freely available documentation on it.  One
Usenet message indicates that these .chm files are actually IStorage
files documented in the Microsoft Platform SDK.  However, I have not
been able to locate such documentation.
</p>
<h3>Note</h3>

<p>
The word "section" is badly overloaded in this document.  Sorry about
that.</p>

<p>
All numbers are in hexadecimal unless otherwise indicated in the
text.  Except in tabular listings, this will be indicated by
$ or 0x as appropriate.  All values within the file are Intel byte
order (little endian) unless indicated otherwise.
</p>

<h2 id="overview"> The overall format of a .chm file</h2>

<p>
The .chm file begins with a short ($38 byte) initial header.  This is
followed by the header section table and the offset to the
content. Collectively, this is the "header".
</p>

<p>
The header is followed by the header sections.  There are two header
sections.  One header section is the file directory, the other
contains the file length and some unknown data. Immediately following
the header sections is the content. 
</p>

<h2 id="header"> The Header</h2>
<p>
The header starts with the initial header, which has the following format
</p>
<pre>0000: char[4]  'ITSF'
0004: DWORD    3 (Version number)
0008: DWORD    Total header length, including header section table and
               following data.
000C: DWORD    1 (unknown)
0010: DWORD    a timestamp.
               Considered as a big-endian DWORD, it appears to contain
               seconds (MSB) and fractional seconds (second byte).
	       The third and fourth bytes may contain even more fractional
               bits.  The 4 least significant bits in the last byte are
               constant.
0014: DWORD    Windows Language ID.  The two I've seen
               $0409 = LANG_ENGLISH/SUBLANG_ENGLISH_US
               $0407 = LANG_GERMAN/SUBLANG_GERMAN
0018: GUID     {7C01FD10-7BAA-11D0-9E0C-00A0-C922-E6EC}
0028: GUID     {7C01FD11-7BAA-11D0-9E0C-00A0-C922-E6EC}
</pre>
<p>Note: a GUID is $10 bytes, arranged as 1 DWORD, 2 WORDs, and 8 BYTEs.</p>

<p>
It is followed by the header section table, which is 2 entries, where
each entry is $10 bytes long and has this format:
</p>

<pre>0000: QWORD    Offset of section from beginning of file
0008: QWORD    Length of section
</pre>

<p>

Following the header section table is 8 bytes of additional header
data.  In Version 2 files, this data is not there and the content
section starts immediately after the directory.
</p>
<pre>0000: QWORD    Offset within file of content section 0
</pre>

<h2 id="headersections">The Header Sections</h2>
<h3>Header Section 0</h3>
<p>
This section contains the total size of the file, and not much else
</p>
<pre>0000: DWORD    $01FE (unknown)
0004: DWORD    0 (unknown)
0008: QWORD    File Size
0010: DWORD    0 (unknown)
0014: DWORD    0 (unknown)
</pre>

<h3>Header Section 1: The Directory Listing</h3>
<p>
The central part of the .chm file: A directory of the files and information it
contains.  
</p>
<h4>Directory header</h4>
<p>
The directory starts with a header; its format is as follows:
</p>
<pre>0000: char[4]  'ITSP'
0004: DWORD    Version number 1
0008: DWORD    Length of the directory header
000C: DWORD    $0a (unknown)
0010: DWORD    $1000    Directory chunk size
0014: DWORD    "Density" of quickref section, usually 2.
0018: DWORD    Depth of the index tree
               1 there is no index, 2 if there is one level of PMGI
	       chunks.
001C: DWORD    Chunk number of root index chunk, -1 if there is none
               (though at least one file has 0 despite there being no
	       index chunk, probably a bug.) 
0020: DWORD    Chunk number of first PMGL (listing) chunk
0024: DWORD    Chunk number of last PMGL (listing) chunk
0028: DWORD    -1 (unknown)
002C: DWORD    Number of directory chunks (total)
0030: DWORD    Windows language ID
0034: GUID     {5D02926A-212E-11D0-9DF9-00A0C922E6EC}
0044: DWORD    $54 (This is the length again)
0048: DWORD    -1 (unknown)
004C: DWORD    -1 (unknown)
0050: DWORD    -1 (unknown)
</pre>
<h4>The Listing Chunks</h4>
<p>
The header is directly followed by the directory chunks.  There are two
types of directory chunks -- index chunks, and listing chunks.  The
index chunk will be omitted if there is only one listing chunk.  A
listing chunk has the following format:
</p>
<pre>0000: char[4]  'PMGL'
0004: DWORD    Length of free space and/or quickref area at end of
               directory chunk 
0008: DWORD    Always 0. 
000C: DWORD    Chunk number of previous listing chunk when reading
               directory in sequence (-1 if this is the first listing chunk)
0010: DWORD    Chunk number of next listing chunk when reading
               directory in sequence (-1 if this is the last listing chunk)
0014: Directory listing entries (to quickref area)  Sorted by
      filename; the sort is case-insensitive.
</pre>
<p>
The quickref area is written backwards from the end of the chunk.  One
quickref entry exists for every n entries in the file, where n is
calculated as 1 + (1 &lt;&lt; quickref density).  So for density = 2, n = 5.
</p>
<pre>Chunklen-0002: WORD     Number of entries in the chunk
Chunklen-0004: WORD     Offset of entry n from entry 0
Chunklen-0008: WORD     Offset of entry 2n from entry 0
Chunklen-000C: WORD     Offset of entry 3n from entry 0
...
</pre>
<p>
The format of a directory listing entry is as follows
</p>
<pre>      ENCINT: length of name
      BYTEs: name  (UTF-8 encoded)
      ENCINT: content section
      ENCINT: offset
      ENCINT: length
</pre>

<p>
The offset is from the beginning of the content section the file is
in, after the section has been decompressed (if appropriate).  The
length also refers to length of the file in the section after decompression.
</p>
<p>
There are two kinds of file represented in the directory: user data and
format related files.  The files which are format-related have names which begin
with '::', the user data files have names which begin with "/".
</p>

<h4>The Index Chunk</h4>
<p>
An index chunk has the following format
</p>
<pre>0000: char[4]  'PMGI'
0004: DWORD    Length of quickref/free area at end of directory chunk
0008: Directory index entries (to quickref/free area)
</pre>
<p>
The quickref area in an PMGI is the same as in an PMGL
</p>
<p>
The format of a directory index entry is as follows
</p>
<pre>      ENCINT: length of name
      BYTEs: name  (UTF-8 encoded)
      ENCINT: directory listing chunk which starts with name
</pre>
<p>
When higher-level indexes exist (when the depth of the index tree is 3 or
higher), presumably the upper-level indexes will contain the numbers
of lower-level index chunks rather than listing chunks
</p>

<h4>Encoded Integers</h4>
<p>
An ENCINT is a variable-length integer.  The high bit of each byte
indicates "continued to the next byte".  Bytes are stored most
significant to least significant.  So, for example, $EA $15 is 
(((0xEA&amp;0x7F)&lt;&lt;7)|0x15) = 0x3515.
</p>

<h2 id="content">The Content</h2>
<p>
In Version 3, the content typically immediately follows the header
sections, and is at the location indicated by the DWORD following the
header section table. In Version 2, the content immediately follows
the header.

All content section 0 locations in the directory are relative to that
point.  The other content sections are stored WITHIN content section
0.
</p>
<h3>The Namelist file</h3>
<p>
There exists in content section 0 and in the directory a file called
"::DataSpace/NameList".  This file contains the names of all the
content sections.  The format is as follows:
</p>
<pre>0000: WORD     Length of file, in words
0002: WORD     Number of entries in file

Each entry:
0000: WORD     Length of name in words, excluding terminating null
0002: WORD     Double-byte characters
xxxx: WORD     0
</pre>
<p>
Yes, the names have a length word AND are null terminated; sort of a
belt-and-suspenders approach.  The coding system is likely UTF-16 (little endian).
</p>
<p>
The section names seen so far are
</p>
<ul>
<li>Uncompressed</li>
<li>MSCompressed</li>
</ul>
<p>
"Uncompressed" is self-explanatory.  The section "MSCompressed" is
compressed with Microsoft's LZX algorithm.
</p>
<h3>The Section Data</h3>
<p>
For each section other than 0, there exists a file called
'::DataSpace/Storage/&lt;Section Name&gt;/Content'.  This file contains the
compressed data for the section.  So, conceptually,
getting a file from a nonzero section is a multi-step process.  First
you must get the content file from section 0.  Then you decompress (if
appropriate) the section.  Then you get the desired file from your decompressed section. 
</p>
<h3>Other section format-related files</h3>
<p>
There are several other files associated with the sections
</p>
<ul>
<li>
::DataSpace/Storage/&lt;SectionName&gt;/ControlData
<p>
This file contains $20 bytes of information on the compression.

The information is partially known:
</p>
<pre>0000: DWORD    Number of DWORDs following 'LZXC', must be 6 if version is 2
0004: ASCII    'LZXC'  Compression type identifier
0008: DWORD    Version (Must be &lt;=2)
000C: DWORD    The LZX reset interval
0010: DWORD    The window size
0014: DWORD    The cache size
0018: DWORD    0 (unknown)
</pre>
<p>
Reset interval, window size, and cache size are in bytes if version is
1, $8000-byte blocks if version is 2.
</p>
</li>
<li>::DataSpace/Storage/&lt;SectionName&gt;/SpanInfo
<p>
This file contains a quadword containing the uncompressed length of
the section.
</p>
</li>
<li>::DataSpace/Storage/&lt;SectionName&gt;/Transform/List
<p>
It appears this file was intended to contain a list of GUIDs belonging
to methods of decompressing (or otherwise transforming) the section.
However, it actually contains only half of the string representation
of a GUID, apparently because it was sized for characters but contains
wide characters.
</p>
</li>
</ul>

<h2 id="compression">Appendix: The Compression</h2>
<p>
The compressed sections are compressed using LZX, a compression
method Microsoft also uses for its cabinet files.  To ensure this, check the
second DWORD of compression info in the ControlData file for the
section 鈥

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产综合久久久久久鬼色 | 午夜不卡av在线| 欧美精品一区二区三区在线| 91丨九色丨国产丨porny| 久久99精品一区二区三区三区| 最新欧美精品一区二区三区| 精品国产凹凸成av人导航| 欧美中文字幕一二三区视频| 成人亚洲精品久久久久软件| 麻豆精品新av中文字幕| 亚洲午夜羞羞片| 中文字幕在线观看不卡视频| 精品国产亚洲在线| 9191国产精品| 欧美综合久久久| 97久久精品人人做人人爽50路| 国产一区在线精品| 看国产成人h片视频| 亚洲成人精品影院| 亚洲精选在线视频| **性色生活片久久毛片| 国产三级一区二区| www激情久久| 日韩精品一区二区三区中文不卡 | 一区二区在线观看免费 | 国产精品国产自产拍高清av王其| 日韩免费看网站| 欧美一级午夜免费电影| 欧美日本一区二区在线观看| 在线日韩av片| 欧美性大战xxxxx久久久| 91麻豆国产香蕉久久精品| 成人av第一页| 成人av在线资源| 99久精品国产| 色综合久久中文字幕| 91色在线porny| 日本久久一区二区| 欧美在线小视频| 欧美在线|欧美| 精品视频在线免费| 欧美视频一二三区| 欧美久久久久中文字幕| 欧美日本在线一区| 精品国产一区二区三区四区四| 欧美大片顶级少妇| 久久色中文字幕| 国产精品久线在线观看| 亚洲欧洲日产国产综合网| 综合久久久久久| 一区二区久久久久久| 亚洲第一精品在线| 免费av成人在线| 国产一区二区不卡在线| 成人免费看视频| 色综合欧美在线| 欧美片在线播放| 日韩欧美一级精品久久| 国产亚洲精品bt天堂精选| 国产精品久久夜| 一区二区欧美精品| 日韩中文字幕不卡| 国产一区三区三区| 91在线你懂得| 日韩欧美黄色影院| 国产精品人妖ts系列视频| 亚洲伊人色欲综合网| 精品中文字幕一区二区| 成人精品在线视频观看| 欧美图区在线视频| 精品国产一区二区国模嫣然| 亚洲欧洲日韩在线| 老色鬼精品视频在线观看播放| 成人午夜激情视频| 欧美精品久久久久久久多人混战| 久久这里只精品最新地址| 亚洲色欲色欲www| 日韩av中文字幕一区二区三区 | 91丨九色丨蝌蚪丨老版| 日韩一级成人av| 国产精品视频一二| 亚洲成人tv网| 岛国精品一区二区| 欧美久久一二区| 国产精品乱人伦一区二区| 日日夜夜精品免费视频| av在线播放不卡| 日韩片之四级片| 亚洲精品欧美在线| 国产伦精品一区二区三区免费 | 日韩一区二区三区观看| 亚洲欧美激情一区二区| 久久99精品久久久| 在线免费亚洲电影| 国产日韩欧美不卡在线| 日本vs亚洲vs韩国一区三区二区| 成人av先锋影音| 日韩丝袜美女视频| 亚洲午夜免费福利视频| 成人av在线资源| 久久久久久久久久久99999| 亚洲电影第三页| 91在线精品一区二区| 日本一区二区视频在线观看| 麻豆91在线看| 制服丝袜亚洲色图| 亚洲一区在线观看免费| www.亚洲国产| 国产精品久久久久aaaa| 国产毛片一区二区| www激情久久| 久久国产精品99久久人人澡| 欧美日韩激情一区二区三区| 一区二区三区中文字幕电影| www.日韩大片| 中文字幕在线播放不卡一区| 国产福利一区二区| 欧美xxxx老人做受| 美女www一区二区| 91精品国产免费| 天堂va蜜桃一区二区三区| 欧美午夜精品久久久| 一区二区在线电影| 在线欧美日韩国产| 亚洲一线二线三线视频| 色婷婷综合久色| 亚洲日韩欧美一区二区在线| 不卡视频在线看| 亚洲欧洲色图综合| 99久久久国产精品| 亚洲欧美日韩在线不卡| 91在线云播放| 亚洲一级二级在线| 欧美无砖砖区免费| 亚洲动漫第一页| 欧美日韩电影在线| 美国十次综合导航| 欧美成人精品高清在线播放 | 国产精品1区二区.| 久久久天堂av| 国产成人日日夜夜| 中文字幕精品三区| av成人免费在线| 亚洲乱码国产乱码精品精的特点| 日本高清不卡aⅴ免费网站| 一区二区三区在线免费播放| 欧美日韩国产小视频| 日韩成人午夜精品| 欧美一区二视频| 国产一区二区三区最好精华液| 日韩精品一区二区三区老鸭窝| 精品一区二区三区久久久| 国产欧美日韩视频在线观看| thepron国产精品| 亚洲一区二区综合| 在线综合+亚洲+欧美中文字幕| 久久99精品国产麻豆婷婷| 国产三级精品三级在线专区| 91丝袜呻吟高潮美腿白嫩在线观看| 一区二区三区精品| 欧美裸体一区二区三区| 国产在线视频精品一区| 亚洲欧洲在线观看av| 5月丁香婷婷综合| 国产高清无密码一区二区三区| 国产精品久久久久国产精品日日| 欧美系列日韩一区| 精品亚洲aⅴ乱码一区二区三区| 国产精品伦一区二区三级视频| 色婷婷综合久久| 久久精品国产一区二区三| 亚洲欧洲日韩女同| 日韩亚洲欧美成人一区| 99re6这里只有精品视频在线观看| 天堂成人免费av电影一区| xnxx国产精品| 欧美日韩一区二区不卡| 国产精品一区二区三区四区| 一区二区三区四区乱视频| 精品国产精品网麻豆系列| 色视频成人在线观看免| 狠狠色丁香婷婷综合| 亚洲一区二区三区爽爽爽爽爽| 久久久国产午夜精品| 欧美午夜在线一二页| 懂色av一区二区在线播放| 五月综合激情网| 亚洲欧美综合网| 精品国产一区二区三区av性色| 欧洲av在线精品| www.色精品| 国产美女一区二区| 日韩综合在线视频| 亚洲免费在线观看| 国产欧美一二三区| 日韩美一区二区三区| 欧美日韩中文字幕一区二区| av中文字幕不卡| 国产美女在线观看一区| 美女一区二区三区在线观看|