PdhAddCounter不再在Windows 10中使用新的SDK 10.0.22621.0

gt0wga4j  于 2022-11-18  发布在  Windows
关注(0)|答案(1)|浏览(474)

Visual Studio 2019,Windows 10操作系统,软件开发工具包SDK 10.0.22621.0
作为应用程序日志文件的一部分,我收集了一些关于用户计算机的信息。
我会以下列内容开始查询:

static PDH_HQUERY cpuQuery;
static PDH_HCOUNTER cpuTotal;
PDH_STATUS status;
status = PdhOpenQuery(NULL, NULL, &cpuQuery);

然后获取以下信息:

status = PdhAddCounter(cpuQuery, L"\\Processor(_Total)\\% Processor Time", NULL, &cpuTotal);
if (status != ERROR_SUCCESS) {
    csData += _T("GetCPURAMStatsinThread - status Add Counter Processor Time Error 2 and return *********\n");
    log_write(csData);
    return -1;
}

我刚刚注意到,我现在从PdhAddCounter得到的错误为:
0xC0000BB8(PDH_CSTATUS_NO_OBJECT)在系统上找不到指定的对象。
我能想到的唯一一件事是,我更新到了SDK 10.0.22621.0。我相信它与10.0.17763.0一起工作。
我一直没有注意日志文件中的这些行,但当客户遇到与其CPU的内核数量以及虚拟处理器数量有关的问题时,我意识到这些行出现了错误。
我有一台安装了Windows 7的笔记本电脑,但我把它升级到了Windows 10,并在上面运行了应用程序,它没有出错。那么,这是否意味着Windows 10更新或SDK更新出现了问题?

rkue9o1l

rkue9o1l1#

根据我在@Tony Lee上面的评论,我使用MS sample code浏览我本地计算机上的计数器。有一个Processor Information选项,而我原来的Processor下面有一个Processor Time选项。在下面的选择框中有一个all instances选项和一个**_Total选项。当我选择_在示例代码中,Total choice缓冲区保持为NULL,但如果我选择了all instances**,则缓冲区填充为:
L”\处理器信息()\处理器时间百分比”
将该字符串插入到PdhAddEnglishCounter()中可以正常工作...Edit它也可以与PdhAddCounter()一起工作
使用处理器而不是处理器信息和**(_Total)而不是
)**用于Windows 10中。不知道为什么至少在某些计算机上发生了变化。
艾德

编辑重要提示。首先,上面的新代码也适用于原代码运行的笔记本电脑。其次,我刚刚意识到,原代码运行失败的桌面是Windows 10家庭版,而原代码运行的笔记本电脑是Windows 10专业版。这可能就是区别所在。无论如何,新代码在家庭版和专业版上都适用。
编辑2新代码在Windows 11家庭版上也运行良好。我还看到,我在其日志文件中注意到错误行的客户是在Windows 11家庭版上运行的。这暗示专业版仍然可以与旧版兼容(请参阅Tony Lee的下一条评论)处理器,而家庭版不能与旧版处理器兼容,只能与新的处理器信息兼容

相关问题