MS-PST:节点,子节点和块之间的关系是什么?

时间:2014-03-04 19:18:00

标签: language-agnostic file-format pst

我在理解某些Microsoft PST file format specification时遇到了问题。

我的理解:

在NDB层中,我们的条目是NID。给定NID,我们可以在BTree中找到叶节点。从那里,我们有bidData和bidSub。

bidData指向外部数据节点或数据树。

bidSub指向子节点树。

我的问题:

  1. 我们可以拥有没有数据树的子节点树吗?
  2. 我们在什么情况下会有子节点树?
  3. 子节点树的结果是否与数据树的结果连接?

1 个答案:

答案 0 :(得分:3)

你有5个问题。

  1. 节点,子节点和块之间的关系是什么?
  2. 我们可以拥有没有数据树的子节点树吗?
  3. 我们在什么情况下会有子节点树?
  4. 子节点树的结果是否与数据树的结果连接?
  5. 我应该首先遍历数据块/树,然后是子节点树,还是有其他方法来组织我读取的数据?
  6. 根据位于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

    引用(已链接除外)