我在理解某些Microsoft PST file format specification时遇到了问题。
我的理解:
在NDB层中,我们的条目是NID。给定NID,我们可以在BTree中找到叶节点。从那里,我们有bidData和bidSub。
bidData指向外部数据节点或数据树。
bidSub指向子节点树。
我的问题:
答案 0 :(得分:3)
你有5个问题。
根据位于here的标准,问题1的答案是
节点是一个由字节流和a组成的抽象 子节点的集合。它由NDB层实现为数据 块(第2.2.2.8.3.1节)和子节点BTree(第2.2.2.8.3.3节)。 存在节点BTree(第2.2.2.7.7.4节)中的NBTENTRY结构 定义哪些块组合形成节点。
根据图表here,根据您的理解,您会看到节点具有NID,bidData和bidSub。
摘要是由数据块或数据BTree组成的节点,可以指向数据块和子节点BTree。
子节点BTree包含SIBLOCK和SLBLOCK结构,包含SIENTRY和SLENTRY结构。
回答问题2,是的,您可以拥有没有数据BTree的子节点Btree。因为数据树只是指定bidData的一种形式,另一种是指定数据块目录。
更具体地说,为了按照2.6.1.2.2创建子节点,您需要有一个数据块才能将SLENTRY与它相关联。该数据块可以直接指定,也可以是包含一个或多个外部或内部数据块引用的数据树。
如果你的问题是,我们可以有一个子节点Btree,例如bidSub,没有设置相关的bidData,答案是否如上所述。如果您根据here将bidData初始化为0x0,以表示尚未拥有数据块的占位符节点,则在设置有效的bidData之前,SLENTRY将不会与占位符节点关联。
回答问题3,子节点用于将数据划分为逻辑/分层部分。我不知道你的情况,所以除了以下答案之外我无法回答这个问题。
当您需要在PST中存储数据时,您将拥有子节点树,从而很好地实现逻辑分离。子节点的现有使用示例在Message对象中按here存储消息传递层中的附件,并按照here在LTP层中存储表上下文,并按属性上下文中的其他存储按照here
回答问题4,我不明白你的术语结果是什么意思。据我所知,数据树和子节点树的信息组合发生在LTP或消息传递层。
回答问题5,这真的取决于你在做什么? PST SDK提供了一种机制来迭代节点数据库中的节点,这是一种从节点读取流的机制,而不是直接地,它还提供了一种根据here迭代第一级子节点的方法和here。
引用(已链接除外)