PdhEnumObjectItemsHA 函数 (pdh.h)

返回存在于指定计算机或指定日志文件中的指定对象的计数器和实例名称。

此函数与 PdhEnumObjectItems 函数相同,只不过它支持对数据源使用句柄。

语法

PDH_FUNCTION PdhEnumObjectItemsHA(
  [in]      PDH_HLOG hDataSource,
  [in]      LPCSTR   szMachineName,
  [in]      LPCSTR   szObjectName,
  [out]     PZZSTR   mszCounterList,
  [in, out] LPDWORD  pcchCounterListLength,
  [out]     PZZSTR   mszInstanceList,
  [in, out] LPDWORD  pcchInstanceListLength,
  [in]      DWORD    dwDetailLevel,
  [in]      DWORD    dwFlags
);

参数

[in] hDataSource

PdhBindInputDataSource 函数返回的数据源的句柄。

[in] szMachineName

以 Null 结尾的字符串,指定包含要枚举的计数器和实例名称的计算机的名称。

在计算机名称中包含前导斜杠,例如 \computername。

如果 szDataSource 参数为 NULL,可以将 szMachineName 设置为 NULL 以指定本地计算机。

[in] szObjectName

以 Null 结尾的字符串,指定要枚举其计数器和实例名称的对象的名称。

[out] mszCounterList

调用方分配的缓冲区,接收指定对象提供的 以 null 结尾的计数器名称的列表。 该列表包含唯一的计数器名称。 列表以两个 NULL 字符结尾。 如果 pcchCounterListLength 参数为零,则设置为 NULL

[in, out] pcchCounterListLength

mszCounterList 缓冲区的大小(以 TCHAR 为单位)。 如果输入为零且对象存在,则函数将返回PDH_MORE_DATA并将此参数设置为所需的缓冲区大小。 如果缓冲区大于所需大小,则函数会将此参数设置为使用的实际缓冲区大小。 如果输入上的指定大小大于零但小于所需大小,则不应依赖返回的大小来重新分配缓冲区。

[out] mszInstanceList

调用方分配的缓冲区,接收指定对象提供的 以 null 结尾的实例名称列表。 该列表包含唯一的实例名称。 列表以两个 NULL 字符结尾。 如果 pcchInstanceListLength 参数为零,则设置为 NULL

[in, out] pcchInstanceListLength

mszInstanceList 缓冲区的大小(以 TCHAR 为单位)。 如果输入为零且对象存在,则函数将返回PDH_MORE_DATA并将此参数设置为所需的缓冲区大小。 如果缓冲区大于所需大小,则函数会将此参数设置为使用的实际缓冲区大小。 如果输入上的指定大小大于零但小于所需大小,则不应依赖返回的大小来重新分配缓冲区。

如果指定的对象不支持变量实例,则返回的值将为零。 如果指定的对象确实支持变量实例,但当前没有任何实例,则返回的值为 2,即空MULTI_SZ列表字符串的大小。

[in] dwDetailLevel

要返回的性能项的详细信息级别。 在按) 递增顺序列出级别 (,将返回指定详细级别或更低级别的所有项。 此参数的取值可为下列值之一:

含义
PERF_DETAIL_NOVICE
新手用户详细级别。
PERF_DETAIL_ADVANCED
高级用户级别的详细信息。
PERF_DETAIL_EXPERT
专家用户详细级别。
PERF_DETAIL_WIZARD
系统设计器详细级别。

[in] dwFlags

此参数必须为零。

返回值

如果函数成功,则返回ERROR_SUCCESS。

如果函数失败,则返回值为 系统错误代码PDH 错误代码。 下面是可能的值。

返回代码 说明
PDH_MORE_DATA
其中一个缓冲区太小,无法包含名称列表。 如果 pcchCounterListLengthpcchInstanceListLength 在输入时为零,则此返回值应为预期值。 如果输入上的指定大小大于零但小于所需大小,则不应依赖返回的大小来重新分配缓冲区。
PDH_INVALID_ARGUMENT
参数无效。 例如,在某些版本中,如果输入上的指定大小大于零但小于所需大小,则可能会收到此错误。
PDH_MEMORY_ALLOCATION_FAILURE
无法分配内存以支持此函数。
PDH_CSTATUS_NO_MACHINE
指定的计算机处于脱机状态或不可用。
PDH_CSTATUS_NO_OBJECT
在指定的计算机或指定的日志文件中找不到指定的对象。

注解

应调用此函数两次,第一次获取所需的缓冲区大小 (将缓冲区设置为 NULL ,将大小设置为 0) ,第二次获取数据。

连续调用此函数将返回相同的计数器和实例列表,因为 PdhEnumObjectItemsH 将始终查询最后一次调用 PdhEnumObjectsHPdhEnumObjectItemsH 定义的性能对象列表。 若要刷新性能对象列表,请在再次调用 PdhEnumObjectItemsH 之前,使用 bRefresh 标志值为 TRUE 调用 PdhEnumObjectsH

实例和计数器名称的顺序不确定。

注意

pdh.h 标头将 PdhEnumObjectItemsH 定义为别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将非特定编码别名的使用与非非特定编码的代码混合使用可能会导致不匹配,从而导致编译或运行时错误。 有关详细信息,请参阅 函数原型的约定

要求

要求
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 pdh.h
Library Pdh.lib
DLL Pdh.dll

另请参阅

PdhBindInputDataSource

PdhEnumObjectsH