pdhEnumObjectItemsA 函数 (pdh.h)

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

若要使用数据源的句柄,请使用 PdhEnumObjectItemsH 函数。

语法

PDH_FUNCTION PdhEnumObjectItemsA(
  [in]      LPCSTR  szDataSource,
  [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] szDataSource

以 Null 结尾的字符串,指定用于枚举计数器和实例名称的日志文件的名称。 如果 为 NULL,则函数使用 中指定的计算机

用于枚举名称的 szMachineName 参数。

[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) ,第二次调用以获取数据。

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

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

示例

有关示例,请参阅 枚举进程对象

注意

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

要求

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

另请参阅

PdhEnumObjectItemsH

PdhEnumObjects