C++获取电脑主板唯一标识

2023-11-18

获取电脑的唯一标识有很多好处,比如注册、授权等,而且电脑中有很多是唯一标识的硬件,比如网卡、CPU、硬盘、主板等。但是如果电脑中有两个网卡的话,就不知道使用哪个网卡作为唯一的了。可以通过获取主板的ID,作为唯一的标识。

通常情况下,可以通过命令行来获取主板ID:

wmic csproduct get uuid

获取CPU的标识符:

wmic cpu get processorid

获取硬盘序列号:

wmic diskdrive get serialnumber

具体操作如下:
在这里插入图片描述
如何通过C++代码来获取BOIS的标识符呢?

#include <string>
#include <windows.h>

BOOL getBoisIDByCmd(char *lpszBaseBoard) {
	const long MAX_COMMAND_SIZE = 10000; // 命令行输出缓冲大小	

	WCHAR szFetCmd[] = L"wmic csproduct get UUID"; // 获取BOIS命令行	
	const string strEnSearch = "UUID"; // 主板序列号的前导信息

	BOOL   bret = FALSE;
	HANDLE hReadPipe = NULL; //读取管道
	HANDLE hWritePipe = NULL; //写入管道	
	PROCESS_INFORMATION pi; //进程信息	
	memset(&pi, 0, sizeof(pi));
	STARTUPINFO	si;	//控制命令行窗口信息
	memset(&si, 0, sizeof(si));
	SECURITY_ATTRIBUTES sa; //安全属性
	memset(&sa, 0, sizeof(sa));

	char szBuffer[MAX_COMMAND_SIZE + 1] = { 0 }; // 放置命令行结果的输出缓冲区
	string	strBuffer;
	unsigned long count = 0;
	long ipos = 0;

	pi.hProcess = NULL;
	pi.hThread = NULL;
	si.cb = sizeof(STARTUPINFO);
	sa.nLength = sizeof(SECURITY_ATTRIBUTES);
	sa.lpSecurityDescriptor = NULL;
	sa.bInheritHandle = TRUE;

	//1.创建管道
	bret = CreatePipe(&hReadPipe, &hWritePipe, &sa, 0);
	if (!bret) {
		CloseHandle(hWritePipe);
		CloseHandle(hReadPipe);
	
		return bret;
	}

	//2.设置命令行窗口的信息为指定的读写管道
	GetStartupInfo(&si);
	si.hStdError = hWritePipe;
	si.hStdOutput = hWritePipe;
	si.wShowWindow = SW_HIDE; //隐藏命令行窗口
	si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;

	//3.创建获取命令行的进程
	bret = CreateProcess(NULL, szFetCmd, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi);
	if (!bret) {
		CloseHandle(hWritePipe);
		CloseHandle(hReadPipe);
		CloseHandle(pi.hProcess);
		CloseHandle(pi.hThread);

		return bret;
	}

	//4.读取返回的数据
	WaitForSingleObject(pi.hProcess, 200);
	bret = ReadFile(hReadPipe, szBuffer, MAX_COMMAND_SIZE, &count, 0);
	if (!bret) {
		CloseHandle(hWritePipe);
		CloseHandle(hReadPipe);
		CloseHandle(pi.hProcess);
		CloseHandle(pi.hThread);

		return bret;
	}

	//5.查找主板ID
	bret = FALSE;
	strBuffer = szBuffer;
	ipos = strBuffer.find(strEnSearch);

	if (ipos < 0){ // 没有找到
		CloseHandle(hWritePipe);
		CloseHandle(hReadPipe);
		CloseHandle(pi.hProcess);
		CloseHandle(pi.hThread);

		return bret;
	} else {
		strBuffer = strBuffer.substr(ipos + strEnSearch.length());
	}

	memset(szBuffer, 0x00, sizeof(szBuffer));
	strcpy_s(szBuffer, strBuffer.c_str());

	//去掉中间的空格 \r \n
	int j = 0;
	for (int i = 0; i < strlen(szBuffer); i++) {
		if (szBuffer[i] != ' ' && szBuffer[i] != '\n' && szBuffer[i] != '\r') {
			lpszBaseBoard[j] = szBuffer[i];
			j++;
		}
	}

	CloseHandle(hWritePipe);
	CloseHandle(hReadPipe);
	CloseHandle(pi.hProcess);
	CloseHandle(pi.hThread);

	return TRUE;
}

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++获取电脑主板唯一标识 的相关文章

  • 高级 Win32 图像文件 I/O?

    我想在 Windows C 应用程序中将图像文件读入内存 什么是一个相当简单的解决方案 也许类似于 IOS 提供的UIImage 我希望支持合理数量的文件格式 我需要为图像处理的位图提供一些低级访问权限 我在互联网上阅读了很多内容 看起来
  • 测试 hdf5/c++ 中的组是否存在

    我正在打开一个现有的 HDF5 文件来附加数据 我想向那个叫做的小组保证 A存在以供后续访问 我正在寻找一种简单的方法来创建 A有条件地 如果不存在则创建并返回新组 或者返回现有组 一种方法是测试 A存在 我怎样才能高效地做到这一点 根据
  • 如何在 C# 事件中区分更改是由代码还是由用户进行?

    我有一个简单的TextBox一开始是空的 我有一个简单的事件 TextChanged 可以知道用户何时更改了其中的任何内容TextBox 但是 如果我自己在代码中对其执行任何操作 该事件就会触发 喜欢设置textbox Text Test
  • .NET 可移植类库中的 .ToShortDateString 发生了什么

    我想知道为什么没有 ToShortDateString在 NET 可移植类库中 我有 2 个项目 Silverlight 和常规 NET 类库 使用相同的代码 并且代码涉及调用 ToShortDateString on a DateTime
  • 使用 C# 使用应用程序密码登录 Office 365 SMTP

    在我们的 Office 365 公司帐户中实施两步身份验证之前 我的 C WPF 程序已成功进行身份验证并发送邮件 我使用了 SmtpClient 库 但现在我必须找到另一个解决方案 因为它不再起作用 我找不到任何使用 O365 应用程序密
  • 当我单击 GridView 项时返回 ImageView 实例

    当我点击GridView项时如何返回ImageView实例 我为 ItemClick 创建自定义绑定事件 public class ItemClickSquareBinding MvxBaseAndroidTargetBinding pri
  • 字节到二进制字符串 C# - 显示所有 8 位数字

    我想在文本框中显示一个字节 现在我正在使用 Convert ToString MyVeryOwnByte 2 但是 当字节开头有 0 时 这些 0 就会被删除 例子 MyVeryOwnByte 00001110 Texbox shows g
  • C++ 在 Vector 中使用不可分配的对象

    我想将对象列表存储在std vector 但对象包含引用且无法分配给 但是 我可以复制构造该对象 我能想到的唯一选择是使用指针来包装对象并在需要分配指针时重新设置指针 但这样做的语法会显着降低可读性 特别是在使用迭代器时 我更喜欢另一种选择
  • 如何检测斑点并将其裁剪成 png 文件?

    我一直在开发一个网络应用程序 我陷入了一个有问题的问题 我会尝试解释我想要做什么 在这里您看到第一个大图像 其中有绿色形状 我想要做的是将这些形状裁剪成不同的 png 文件 并使它们的背景透明 就像大图像下面的示例裁剪图像一样 第一张图像将
  • C#:使用 System.Text 和 System.Text.RegularExpressions 之间的区别

    在 ASP NET C 应用程序中 我注意到为了使用 Regex 和 StringBuilder 我必须将两者都放在 using System Text using System Text RegularExpressions 从简单的角度
  • 为什么以下代码不允许我使用 fgets 获取用户输入但可以使用 scanf?

    这是一个更大程序的简短摘录 但该程序的其余部分无关紧要 因为我认为我能够隔离该问题 我怀疑这与我使用 fgets 的方式有关 我读过 最好使用 fgets 而不是 scanf 但我似乎无法让它在这里正常工作 当我使用以下代码时 程序不会给我
  • C++ Primer 5th Edition 错误 bool 值没有指定最小大小?

    bool 的最小大小不应该是 1 个字节吗 这有点学术性的东西 尽管它们会转换为数字 并且 与其他所有事物一样 它们最终将基本上由计算机内存中的数字表示 但布尔值不是数字 你的bool可以取值true 或值false 即使您确实需要至少 1
  • 在可观察项目生成时对其进行处理

    我有一个IObservable它会生成一次性物品 并且在其生命周期内可能会生成无限数量的物品 因此 我想在每次生成新项目时处理最后一个项目 因此Using http reactivex io documentation operators
  • 用 C# 编写的带有点击移动的 WPF 游戏

    我试图将标签网格移动到鼠标的位置 就像冒险游戏中的移动一样 理想情况下 我会在途中删除并重新绘制它们 但是 现在我只想弄清楚如何将 int 转换为厚度或 pointtoscreen 到目前为止我有 player XMove int Mous
  • 通过 MSBuild 调用 cl.exe 时无限期挂起

    我正在尝试在我的 主要是 C 项目上运行 MSBuild 想象一下一个非常庞大的代码库 Visual Studio 2015 是有问题的工具集 Windows 7 SP1 和 VS 2015 更新 2 即使使用 m 1 从而迫使它仅使用一个
  • SSBO 是更大的 UBO?

    我目前正在 OpenGL 4 3 中使用 UBO 进行渲染 以将所有常量数据存储在 GPU 上 诸如材料描述 矩阵等内容 它可以工作 但是 UBO 的小尺寸 我的实现为 64kB 迫使我多次切换缓冲区 减慢渲染速度 我正在寻找类似的方法来存
  • 在 unix 中编译 dhrystone 时出错

    我是使用基准测试和 makefile 的新手 我已经从下面的链接下载了 Dhrystone 基准测试 我正在尝试编译它 但我遇到了奇怪的错误 我尝试解决它 但没有成功 有人可以帮助我运行 dhrystone 基准测试吗 以下是我尝试编译的两
  • 局部静态变量初始化是线程安全的[重复]

    这个问题在这里已经有答案了 假设我有一个包含三个静态函数的类 如下所示 include
  • 从 C# 中的 .NET SecureString 读取单个字符?

    WPF 的PasswordBox 返回一个SecureString 它对窥探者隐藏密码 问题是你最终必须获得密码的值 而我在网上找到的建议都涉及将值复制到字符串中 这会让你回到窥探者的问题 IntPtr bstr Marshal Secur
  • Windows 上 libcurl 的静态库[重复]

    这个问题在这里已经有答案了 如何将此库 libcurl 静态链接到 exe 我努力了 disable share enable static 没有帮助 我使用的是MingW32 有没有一种简单的方法来静态链接这个库 这样我的应用程序就不再有

随机推荐

  • Docker客户端连接Docker Daemon的方式

    Docker为C S架构 服务端为docker daemon 客户端为docker service 支持本地unix socket域套接字通信与远程socket通信 默认为本地unix socket通信 要支持远程客户端访问需要做如下设置
  • Linux下DM644x设备驱动I2C之总线驱动(一)详解

    本文均属自己阅读源码的点滴总结 转账请注明出处谢谢 欢迎和大家交流 qq 1037701636 email 200803090209 zjut com gzzaigcn2012 gmail com linux DM6441下I2C设备驱动的
  • 融云深度参与「新加坡 GTLC 大会」,连接亚太机遇、开拓国际市场

    8 月 18 日 由 TGO 鲲鹏会主办的新加坡 GTLC Global Tech Leadership Conference 全球技术领导力大会 圆满收官 融云作为共创伙伴深度参与了大会 关注 融云全球互联网通信云 了解更多 本次大会以
  • centos7.9安装postgresql12

    目录 1 下载安装包 2 安装 首先登陆官方网站下载 PostgreSQL Downloads 1 下载安装包 按照官方的命令安装 下载PGSQL的rpm包 sudo yum install y https download postgre
  • 社会经济学中的因果分析思想初探

    社会经济学中的因果分析思想初探 目录 1 因果是什么 2 因果关系和相关关系 3 因果推断的三个层级 4 经典因果推断模型 5 社会经济学中的因果实证分析 5 1随机控制实验 5 2自然实验 5 3准实验 5 3 1准实验 双重差分法 5
  • 基于STC8G1K08A的可调节占空比和频率的PWM应用案例

    基于STC8G的可调节占空比和频率的PWM应用案例 CSDN的小白分享 前言 一 STC8G系列的介绍 二 使用记录 1 建立工程 2 打开工程所需的芯片功能 及本人的函数 总结 CSDN的小白分享 前言 学习单片机以来 都是写了就算的态度
  • 如何在Rich Edit Control中管理超链接

    如何在Rich Edit Control中管理超链接 一 在Rich Edit Control 中显示超链接 在Rich Edit Control 中显示超链接的格式 也就是给选择的文本添加CFE LINK属性 可以通过以下两种方法实现 1
  • 详解MNIST数据集下载、解析及显示的Python实现

    Content MNIST数据集基本介绍 下载MNIST数据集到本地 解析MNIST数据集 显示MNIST数据集中训练集的前9张图片和标签 随着图像处理 计算机视觉 机器学习 甚至深度学习的蓬勃发展 一个良好的数据集作为学习和测试相关算法非
  • python编程基础-task4-FOR、IF以及while

    一 IF语句 avg 90 math 95 Chinese 85 if math lt Chinese print 语文更好 if math gt Chinese print 数学更好 Chinese 5 if avg Chinese pr
  • 实战:实现缓存和数据库一致性方案

    原创 微信公众号 阿Q说代码 欢迎分享 转载请保留出处 哈喽大家好 我是阿Q 最近不是正好在研究 canal 嘛 刚巧前两天看了一篇关于解决缓存与数据库一致性问题的文章 里边提到了一种解决方案是结合 canal 来操作的 所以阿Q就想趁热打
  • 中达优控触摸屏编程视频教程_触摸屏组态编程软件

    YKBuilder是一个中达优控触摸屏编程软件 触摸屏组态编程软件在电脑的开始菜单 打开运行对话框 输入 dcslic gt 确定启动 Licenses 管理工具 触摸屏组态编程软件 YKBuilder是中达优控YKHMI系列人机界面的集成
  • curl在windows的安装和使用

    经常看到别人在用curl命令可以请求各种网络请求在命令行里 看起来挺炫酷的 curl作为一个请求web服务器的命令行工具 玩得好甚至可以代替postman 这里我就是讲一下关于如何安装curl在windows上 毕竟很多时候用的电脑都是公司
  • LDAP未授权漏洞验证

    因为工作需要 这里验证了下LDAP未授权 以下是收集到的资料 最后是具体使用 更新 2 连接ad域有两个地址 ldap http XXXXX com 389 和 ldap http XXXXX com 636 SSL 3 端口389用于一般
  • 根据接口数据返回的不同字段显示不同背景颜色

    结构 div span item hldj substr 0 2 span substr 0 2 要抽取的子串的起始下标 从0开始截取2位 如南一公园只会显示南一 div 交互 methods toHldj item if item hld
  • 制作镜像并上传到阿里云

    run一个ubuntu容器 然后自动进入容器 ucsmy QKTEST21191 docker run it name node daocloud io ubuntu root 3ac09729dadb 安装geth sudo apt ge
  • 使用Bootstrap样式的死的简单Vue分页组件

    网页 vue pages A Dead Simple Vue Pagination Component Using Bootstrap Style 使用Bootstrap样式的死的简单Vue分页组件 support vue 2 0 支持vu
  • Unity的C#编程教程_52_类 Class 详解及应用练习(一)

    文章目录 C Classes for Behaviours Custom Classes 1 Custom Classes 2 Serialized Custom Class RPG Item Database Example 3 When
  • C++的tuple

    一 介绍 tuple是一个固定大小的不同类型值的集合 是泛化的std pair 我们也可以把它当做一个通用的结构体来用 不需要创建结构体又获取结构体的特征 在某些情况下可以取代结构体使程序更简洁 直观 std tuple理论上可以有无数个任
  • react项目配置@指向src文件夹

    react项目配置 指向src文件夹 react项目没有和vue一样有 指向src文件夹 需要手动配置 配置了之后 就代表 src 目录 就不用自己 暴露项目配置项 任选一种 npm方式 npm run eject cnpm方式 cnpm
  • C++获取电脑主板唯一标识

    获取电脑的唯一标识有很多好处 比如注册 授权等 而且电脑中有很多是唯一标识的硬件 比如网卡 CPU 硬盘 主板等 但是如果电脑中有两个网卡的话 就不知道使用哪个网卡作为唯一的了 可以通过获取主板的ID 作为唯一的标识 通常情况下 可以通过命