对于使用win32 API获取性能计数器的理解

微软提供了获取性能计数器的接口,如下

LSTATUS RegQueryValueExA([in]                HKEY    hKey,[in, optional]      LPCSTR  lpValueName,LPDWORD lpReserved,[out, optional]     LPDWORD lpType,[out, optional]     LPBYTE  lpData,[in, out, optional] LPDWORD lpcbData
);

PERF_OBJECT_TYPE 结构如下:
在这里插入图片描述

每个lpData都会多个PERF_OBJECT_TYPE
每个PERF_COUNTER_DEFINITION 都对应着一个数据,至于数据在哪里,PERF_COUNTER_DEFINITION 结构中会提供从本身到该值位置的偏移量

typedef struct _PERF_COUNTER_DEFINITION {DWORD  ByteLength;DWORD  CounterNameTitleIndex;
#if ...DWORD  CounterNameTitle;
#elseLPWSTR CounterNameTitle;
#endifDWORD  CounterHelpTitleIndex;
#if ...DWORD  CounterHelpTitle;
#elseLPWSTR CounterHelpTitle;
#endifLONG   DefaultScale;DWORD  DetailLevel;DWORD  CounterType;DWORD  CounterSize;DWORD  CounterOffset;
} PERF_COUNTER_DEFINITION, *PPERF_COUNTER_DEFINITION;

RegQueryValueExA此函数返回的数据都是通过提供的偏移量来确定下一个结构或者子结构位置的

至于提供的数据是什么的数据,可以通过PERF_COUNTER_DEFINITION的CounterNameTitleIndex来确定。
具体的详细信息可以到注册表中查找,路径如下:
计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\CurrentLanguage此路径下有两个键值,一个是Counter计数器,一个是Help帮助,双击,可以看到值非常长
使用CounterNameTitleIndex去找对应的详细信息,如果要找2的详细信息可以查找Counter中的2,如果要找2的帮助文档就要去找Help中的3,如此对应。

可以通过该方式获取到网卡的网速
在这里插入图片描述
显示网速代码github

还可以获取到其他东西
在这里插入图片描述

参考:
性能计数器结构图示链接(微软文档)
性能计数器结构链接(微软文档)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/130205.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构和算法(10):B-树

B-树:大数据 现代电子计算机发展速度空前,就存储能力而言,情况似乎也是如此:如今容量以TB计的硬盘也不过数百元,内存的常规容量也已达到GB量级。 然而从实际应用的需求来看,问题规模的膨胀却远远快于存储能…

Go Gin Gorm Casbin权限管理实现 - 3. 实现Gin鉴权中间件

文章目录 0. 背景1. 准备工作2. gin中间件2.1 中间件代码2.2 中间件使用2.3 测试中间件使用结果 3. 添加权限管理API3.1 获取所有用户3.2 获取所有角色组3.3 获取所有角色组的策略3.4 修改角色组策略3.5 删除角色组策略3.6 添加用户到组3.7 从组中删除用户3.8 测试API 4. 最终目…

Python Opencv实践 - 车辆识别(1)读取视频,移除背景,做预处理

示例中的图像的腐蚀、膨胀和闭运算等需要根据具体视频进行实验得到最佳效果。代码仅供参考。 import cv2 as cv import numpy as np#读取视频文件 video cv.VideoCapture("../../SampleVideos/Traffic.mp4") FPS 10 DELAY int(1000 / FPS) kernel cv.getStructu…

flask入门

第一个Flask项目 创建后项目如下图 static存放静态文件,templates存放Jinja2模板,app.py是整个项目的入口文件 我们略微理解下app.py这里的代码 # 从flask这个包中导入Flask类 from flask import Flask#使用Flask类创建一个app对象 #__name__:代表当前…

Python 自动化Web测试

限于作者水平有限,以下内容可能是管窥之见,希望大家高抬贵手,且让我斗胆抛砖引玉。 公司产品迪备主要是通过网页操作来进行数据库的备份与恢复,监控与管理,因此在测试的过程中,可以用python测试脚本来模拟…

开源ERP和CRM套件Dolibarr

什么是 Dolibarr ? Dolibarr ERP & CRM 是一个现代软件包,用于管理您组织的活动(联系人、供应商、发票、订单、库存、议程…)。它是开源软件(用 PHP 编写),专为中小型企业、基金会和自由职业…

一文告知HTTP GET是否可以有请求体

HTTP GET是否可以有请求体 先说结论: HTTP协议没有规定GET请求不能携带请求体,但是部分浏览器会不支持,因此不建议GET请求携带请求体。 HTTP 协议没有为 GET 请求的 body 赋予语义,也就是即不要求也不禁止 GET 请求带 body。大多数…

使用gpio子系统实现按键驱动(二)

一,gpio_keys.c介绍 Linux内核下的drivers/input/keyboard/gpio_keys.c实现了一个体系无关的GPIO按键驱动,使用此按键驱动,只需要在设备树gpio-key节点添加需要的按键子节点即可,适合于实现独立式按键驱动。 gpio-keys是基于inp…

Android修改默认system/bin/下可执行程序拥有者和权限,使用实例,只有root和系统app权限才能执行某个命令。

一、执行ls -l /system/bin/ 查看一下用户和权限。 二、这些权限在哪里修改呢? 默认编译system/bin/可执行程序赋予权限的地方system\core\libcutils\fs_config.cpp 文件里面的android_files 三、使用实例,只有root和系统app权限才能执行某个命令&#x…

【C++设计模式之备忘录模式:行为型】分析及示例

简介 备忘录模式(Memento Pattern)是一种行为型设计模式,它用于保存和恢复对象的状态。备忘录模式通过将对象的状态封装成一个备忘录(Memento),并将备忘录保存在一个管理者(Caretaker&#xff…

微电网单台并网逆变器PQ控制matlab仿真模型

微❤关注“电气仔推送”获得资料(专享优惠) 微电网运行在并网模式下且公共电网供应正常时,因为公共电网给定了电 压和频率的参考值,所有的逆变器可以使用PQ控制方式。 当系统频率为额定频率f0时,系统稳定在A点&#x…