IDebugFailureAnalysis::GetNext 方法 (extsfns.h)

GetNext 方法在给定的 FA 条目后搜索 DebugFailureAnalysis 对象以获取下一个 FA 条目,该条目满足 标记TagMask 参数指定的条件。

语法

PFA_ENTRY GetNext(
  [in] PFA_ENTRY Entry,
  [in] FA_TAG    Tag,
  [in] FA_TAG    TagMask
);

参数

[in] Entry

指向 FA_ENTRY 结构的指针。 搜索从此 FA 条目开始。 如果此参数 NULL,则从 FA 条目集合的开头开始。

[in] Tag

FA_TAG 枚举中的值。

[in] TagMask

一个掩码,用于将搜索限制为所有可能标记的子集。 请参阅“备注”。 若要搜索所有可能的标记,请将此参数设置为 DEBUG_FLR_MASK_ALL

返回值

如果 DebugFailureAnalysis 对象具有符合条件的 FA 条目,此方法将返回指向 FA_ENTRY 结构的指针。 否则,此方法返回 NULL

言论

此方法搜索满足此条件的 FA_ENTRY 结构:

entry->Tag & TagMask == Tag

标记在 extsfns.h 中定义为 DEBUG_FLR_PARAM_TYPE 枚举的值,也称为 FA_TAG 枚举。 标记按组排列,以便可以使用 TagMask 在特定组中搜索。 例如,有一组与池错误相关的标记。 分配给此组中标记的数值位于范围0x400,0x401 ...0x406。 此组中具有标记的每个 FA_ENTRY 都满足以下条件:

entry->Tag & 0xFFFFFF00 == 0x400

以下代码片段显示了 FA_TAG 枚举的一部分。

...
// Pool
DEBUG_FLR_POOL_ADDRESS = 0x400,
DEBUG_FLR_SPECIAL_POOL_CORRUPTION_TYPE,
DEBUG_FLR_CORRUPTING_POOL_ADDRESS,
DEBUG_FLR_CORRUPTING_POOL_TAG,
DEBUG_FLR_FREED_POOL_TAG,
DEBUG_FLR_LEAKED_SESSION_POOL_TAG,
DEBUG_FLR_CLIENT_DRIVER,

// Filesystem
DEBUG_FLR_FILE_ID = 0x500,
DEBUG_FLR_FILE_LINE,
...

例子

示例 1

以下示例演示如何查找标记等于 DEBUG_FLR_MANAGED_EXCEPTION_OBJECT的所有故障分析条目。 假设 pAnalysis 是指向 IDebugFailureAnalysis2 接口的指针。

FA_ENTRY entry = pAnalysis->Get(DEBUG_FLR_MANAGED_EXCEPTION_OBJECT);

while(NULL != entry)
{
   // Do something with the entry.

   entry = pAnalysis->GetNext(DEBUG_FLR_MANAGED_EXCEPTION_OBJECT, DEBUG_FLR_MASK_ALL);
}

示例 2

以下示例演示如何查找池组中具有标记的所有 FA 条目。 回想一下,池组中的标记在0x400、0x401、...0x406。 假设 pAnalysis 是指向 IDebugFailureAnalysis2 接口的指针。

FA_ENTRY entry = pAnalysis->GetNext(NULL, (FA_TAG)0x400, (FA_TAG)0xFFFFFF00);

while(NULL != entry)
{
   // Do something with the entry.

   entry = pAnalysis->GetNext(entry, (FA_TAG)0x400, (FA_TAG)0xFFFFFF00);
}

示例 3

可以通过0xAFFFFFFF在范围中创建自己的自定义标记0xA0000001。

以下示例演示如何查找具有自定义标记的所有故障分析条目。 换句话说,代码查找具有满足此条件的标记的所有条目:

entry->Tag & 0xF0000000 == 0xA0000000

具有标记的条目0xA0000001、0xA0000002...0xAFFFFFF满足条件。


FA_ENTRY entry = pAnalysis->GetNext(NULL, (FA_TAG)0xA0000000, (FA_TAG)0xF0000000);

while(NULL != entry)
{
   // Do something with the Entry

   entry = pAnalysis->GetNext(entry, (FA_TAG)0xA0000000, (FA_TAG)0xF0000000);
}

要求

要求 价值
目标平台 桌面
标头 extsfns.h

另请参阅

获取

IDebugFailureAnalysis2

NextEntry

编写分析扩展插件以扩展 !analyze

_EFN_Analyze