使用C#语言实现通过VMI(虚拟机监控器)接口来获取硬件ID的过程。VMI是一种用于虚拟化环境的接口,用于管理虚拟机和宿主机之间的通信和资源共享。具体实现中,需要通过添加System.Management命名空间的引用来访问VMI接口,然后使用其中的类和方法来获取硬件ID。此外,需要借助一些系统API来处理数据,如使用ManagementObjectSearcher类和ManagementObjectCollection类获取系统信息并对其进行过滤。

实现代码:

class HardWareInfo
{
/// <summary>
/// 获取 CPUID , 更多 cpu 信息参考
/// </summary>
/// <returns> cpuid </returns>
public static string GetCpuId()
{
string cpuid = ""; try
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select * From Win32_Processor");
foreach (ManagementObject mo in searcher.Get())
{
cpuid = mo.Properties["ProcessorId"].Value.ToString(); break;
}
}
catch
{ } return cpuid;
} /// <summary>
/// 获取硬盘序列号
/// </summary>
/// <returns> 硬盘序列号 </returns>
public static string GetDiskSerialNumber()
{
string HDid = ""; try
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select * From Win32_DiskDrive");
foreach (ManagementObject mo in searcher.Get())
{
HDid = (string)mo.Properties["SerialNumber"].Value; break;
}
}
catch
{ } return HDid;
} /// <summary>
/// 获取硬盘产品型号
/// </summary>
/// <returns>硬盘产品型号</returns>
public static string GetDiskModelNumber()
{
string HDid = ""; try
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select * From Win32_DiskDrive");
foreach (ManagementObject mo in searcher.Get())
{
HDid = (string)mo.Properties["Model"].Value; break;
}
}
catch
{ } return HDid;
} /// <summary>
/// 获取 Mac 地址 ,更多网卡信息参考 :
/// </summary>
/// <returns> Mac 地址 </returns>
public static string GetMacAddress()
{
string mac = ""; try
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select * From Win32_NetworkAdapterConfiguration");
foreach (ManagementObject mo in searcher.Get())
{
if ((bool)mo["IPEnabled"] == true)
{
mac = mo["MacAddress"].ToString(); break;
}
}
}
catch
{ } return mac;
} /// <summary>
/// 获取 ip 地址
/// </summary>
/// <returns> ip 地址 </returns>
public static string GetIpAddress()
{
string st = ""; try
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select * From Win32_NetworkAdapterConfiguration");
foreach (ManagementObject mo in searcher.Get())
{
if ((bool)mo["IPEnabled"] == true)
{
System.Array ar;
ar = (System.Array)(mo.Properties["IpAddress"].Value);
st = ar.GetValue(0).ToString(); break;
}
}
}
catch
{ } return st;
} /// <summary>
/// 获取主板序列号
/// </summary>
/// <returns> 主板序列号 </returns>
public static string GetBIOSSerialNumber()
{
string sBIOSSerialNumber = ""; try
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select * From Win32_BIOS");
foreach (ManagementObject mo in searcher.Get())
{
sBIOSSerialNumber = mo.GetPropertyValue("SerialNumber").ToString().Trim(); break;
}
}
catch
{ } return sBIOSSerialNumber;
} }

C# 通过VMI接口获取硬件ID的更多相关文章

  1. 【Azure Developer】Python 获取Micrisoft Graph API资源的Access Token, 并调用Microsoft Graph API servicePrincipals接口获取应用ID

    问题描述 在Azure开发中,我们时常面临获取Authorization问题,需要使用代码获取到Access Token后,在调用对应的API,如servicePrincipals接口. 如果是直接调 ...

  2. C#获取CPU等硬件ID(转载)

    System.Management命名空间提供对大量管理信息和管理事件集合的访问,这些信息和事件是与根据 Windows 管理规范 (WMI) 结构对系统.设备和应用程序设置检测点有关的.应用程序和服 ...

  3. Atitit.获取主板与bios序列号获取硬件设备信息  Wmi wmic 的作用

    Atitit.获取主板与bios序列号获取硬件设备信息  Wmi wmic 的作用 1 获取硬件核心基础核心基础Wmi1 2 其他资料2 3 Wmic WMI 命令行接口2 4 Atitit.获取主板 ...

  4. linux系统从pci.ids文件获取硬件设备详细厂商信息

    机器采样: [root@ht24 hwdata]# cat /etc/redhat-release ; uname -r CentOS Linux release 7.9.2009 (Core) 3. ...

  5. 通过Zabbix API实现对主机的增加(无主机资产的添加和带主机资产的添加)、删除、获取主机id、获取模板id、获取组id

    config.yaml存储zabbix的信息(主要包括zabbix server的url .请求头部.登陆的用户名密码) Zabbix_Config: zabbix_url: http://192.1 ...

  6. Fortran一个获取硬件系统信息的函数库

    此函数库提供了 Visual Fortran 上获取硬盘ID,CPU编号,windows安装时间及文件头部校验的四个函数.可用于简单的程序加密.(但切勿用于商业性很强的地方)              ...

  7. WebElement接口获取值

    通过WebElement接口获取值 size 获取元素的尺寸 text 获取元素的文本 get_attribute(name) 获取属性值 location 获取元素坐标,先找到要获取的元素,再调用该 ...

  8. 使用HD/IDE层的ioctl接口获取磁盘容量get_hdd_max_sector

    利用HD/IDE layer的ioctl函数接口获取HD/IDE的磁盘容量.HDIO_DRIVE_TASK  能发出訪问LBA地址的命令.但不能读写数据. #include <stdio.h&g ...

  9. Vue学习笔记十三:Vue+Bootstrap+vue-resource从接口获取数据库数据

    目录 前言 SpringBoot提供后端接口 Entity类 JPA操作接口 配置文件 数据库表自动映射,添加数据 写提供数据的接口 跨域问题 前端修改 效果图 待续 前言 Vue学习笔记九的列表案例 ...

  10. linux下dmidecode命令获取硬件信息

    linux下dmidecode命令获取硬件信息 2 A+ 所属分类:Linux 运维工具 dmidecode在 Linux 系统下获取有关硬件方面的信息.dmidecode 遵循 SMBIOS/DMI ...

随机推荐

  1. 用 three.js 绘制三维带箭头线 (线内箭头)

    在LineMaterial.js基础上修改的ArrowLineMaterial.js代码: /** * @author WestLangley / http://github.com/WestLang ...

  2. 【C++库函数】stringstream-类型转换&&字符分割

    继续填坑٩(•̤̀ᵕ•̤́๑),这次是 stringstream的内容,最初是看到它可以把字符串直接输出成int类型,惊了,但是一直不是很懂.在网上查了很多资料,才终于差不多理解.stringstre ...

  3. OS | 透过 inode 来理解硬链接和软链接

    什么是inode? 每个文件都对应一个唯一的inode,inode用来存储文件的元信息,包括: 对应的文件 文件字节数 文件数据块的位置 文件的inode号码 文件的硬链接数 文件的读写权限 文件的时 ...

  4. C++正则表达式的初步使用

    正则表达式(Regular Expressions),又被称为regex.regexp 或 RE,是一种十分简便.灵活的文本处理工具.它可以用来精确地找出某文本中匹配某种指定规则的内容.从C++11开 ...

  5. 素数算法补充之"筛法"

    国庆中秋双节,就不写太长的文章了. 补充和复习一下以前没写的素数区间筛法算法吧 部分证明过程来自OI wiki 素数筛法 如果我们想要知道小于等于 \(n\) 有多少个素数呢? 一个自然的想法是我们对 ...

  6. L3-008 喊山 (30 分) (BFS)

    喊山,是人双手围在嘴边成喇叭状,对着远方高山发出"喂-喂喂-喂喂喂--"的呼唤.呼唤声通过空气的传递,回荡于深谷之间,传送到人们耳中,发出约定俗成的"讯号",达 ...

  7. webgl创建一个点

  8. elementUI表格单选

    html代码 <el-table :data="gkbmList" max-height="264" border @selection-change=& ...

  9. mysql 复制表结构创建表及复制表结构与数据创建表

    本文为博主原创,未经允许不得转载: 在开发过程或项目维护发布过程中,经常需要复制建表及复制表数据建表等,整理了以下四种常用的 mysql 命令. 1.  create like 复制表结构(包含索引, ...

  10. ASIC 功能验证VTB

    目标 设计流程 验证设计文档和RTL code之间的关系 RTL code(DUT) - 可以当作是一个黑盒,DUT内部是完全不可见的 白盒验证 - DUT内部RTL完全可见 灰盒验证 - DUT内部 ...