IDebugFailureAnalysis::GetNext 方法 (extsfns.h)

GetNext 方法在 DebugFailureAnalysis 对象中搜索给定 FA 条目后满足 TagTagMask 参数指定条件的下一个 FA 条目。

语法

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 == 标记

标记在 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

可以在0xA0000001到0xAFFFFFFF的范围内创建自己的自定义标记。

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

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

另请参阅

Get

IDebugFailureAnalysis2

NextEntry

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

_EFN_Analyze