同系列文章:
功能描述:
- 实现基于WDK获取网卡原生Mac地址、硬盘序列号、CPU ID
- 实现基于WMI获取网卡原生Mac地址、硬盘序列号、CPU ID
- 实现基于WDK获取系统所有设备的VID和PID
- 判断程序是否在VMware虚拟机中运行
源代码出售:
价格:壹仟元人民币
QQ:36748897
动态库及测试程序下载:
HWiNFO类公开方法:
/* ---------------------------------------------------------- * 文件名称:HWiNFO.cs * * 作者:秦建辉 * * QQ:36748897 * * 博客:http://www.firstsolver.com/wordpress/ * * 开发环境: * Visual Studio V2013 * .NET Framework 4 Client Profile * * 版本历史: * V2.0 2015年12月04日 * 增加对VMware虚拟机的判断。虚拟机可以伪造任意网卡MAC地址 * 在WDK中实现0权限获取硬盘序列号 * * V1.0 2014年04月06日 * 实现基于WMI获取网卡原生MAC地址、硬盘序列号、CPU ID * 实现基于WDK获取网卡原生MAC地址 * 实现结合设备安装类GUID和设备接口类GUID获取设备VIDPID ------------------------------------------------------------ */ using System; using System.Collections.Generic; using System.Management; using System.Runtime.InteropServices; using System.Text; namespace Splash { [StructLayout(LayoutKind.Sequential)] public struct T_VIDPID { public UInt16 VendorID; // 供应商标识 public UInt16 ProductID; // 产品编号 } public static class HWiNFO { /// <summary> /// 基于WMI获取设备属性值 /// </summary> /// <param name="QueryIndex">要查询的属性值索引</param> /// <returns>属性值集合</returns> /// <remarks> /// QueryIndex其值含义如下: /// 0:网卡原生MAC地址(剔除虚拟网卡) /// 1:网卡原生MAC地址(剔除虚拟网卡和USB网卡) /// 2:硬盘序列号 /// 3:主板序列号 /// 4:CPU ID /// 5:BIOS序列号 /// 6:主板型号 /// 7:网卡当前MAC地址(剔除虚拟网卡) /// 8:网卡当前MAC地址(剔除虚拟网卡和USB网卡) /// </remarks> public static String[] WMI_DeviceQuery(Int32 QueryIndex); /// <summary> /// 查看系统中是否存在指定标识的硬件设备 /// </summary> /// <param name="CPUID">处理器标识,可以为空</param> /// <param name="HardDiskSerialNumber">硬盘序列号,可以为空</param> /// <param name="MacAddress">网卡MAC地址(已剔除虚拟网卡和USB网卡),可以为空</param> /// <returns> /// true:匹配成功 /// false:匹配失败 /// </returns> /// <remarks> /// 说明: /// 对设备标识不区分大小写 /// 空项不做判断,非空项必须全部满足 /// </remarks> public static Boolean WMI_DeviceMatch(String CPUID, String HardDiskSerialNumber, String MacAddress); /// <summary> /// 输出硬件信息到指定INI文件 /// </summary> /// <param name="iniFileName">要保存的ini文件名</param> /// <returns> /// true:成功 /// false:失败 /// </returns> public static Boolean WMI_DeviceInfoPrint(String iniFileName); /// <summary> /// 判断程序是否在VMware虚拟机中运行 /// </summary> /// <returns> /// true:程序是在VMware虚拟机中运行 /// false:程序不是在VMware虚拟机中运行 /// </returns> public static bool WMI_IsVMware(); /// <summary> /// 结合设备安装类GUID和设备接口类GUID获取设备VIDPID /// </summary> /// <param name="SetupClassGuid">设备安装类GUID,Empty忽视</param> /// <param name="InterfaceClassGuid">设备接口类GUID,Empty忽视</param> /// <returns>设备VIDPID列表</returns> /// <remarks> /// 优点:直接通过设备实例ID提取VIDPID,从而无需获取设备路径来读写IO /// </remarks> public static T_VIDPID[] WDK_QueryVidPid(Guid SetupClassGuid, Guid InterfaceClassGuid); /// <summary> /// 验证设备的VIDPID /// </summary> /// <param name="VendorID">设备VID</param> /// <param name="ProductID">设备PID</param> /// <param name="SetupClassGuid">设备安装类GUID,Empty忽视</param> /// <param name="InterfaceClassGuid">设备接口类GUID,Empty忽视</param> /// <returns> /// true:匹配成功 /// false:匹配失败 /// </returns> public static Boolean WDK_VIDPIDMatch(UInt16 VendorID, UInt16 ProductID, Guid SetupClassGuid, Guid InterfaceClassGuid); /// <summary> /// 输出VIDPID信息到指定INI文件 /// </summary> /// <param name="iniFileName">要保存的ini文件名</param> /// <returns> /// true:成功 /// false:失败 /// </returns> public static Boolean WDK_VIDPIDPrint(String iniFileName); /// <summary> /// 通过WDK获取网卡原生MAC地址 /// </summary> /// <param name="isIncludeUSB">是否包含USB网卡,默认不包含USB网卡</param> /// <returns>获取到的网卡原生MAC地址集合</returns> public static String[] WDK_QueryMacAddress(Boolean isIncludeUSB = false); /// <summary> /// 获取硬盘序列号 /// </summary> /// <returns>获取到的硬盘序列号集合</returns> public static String[] WDK_QueryDiskDrive(); /// <summary> /// 查看系统中是否存在指定标识的硬件设备 /// </summary> /// <param name="CPUID">处理器标识,可以为空</param> /// <param name="HardDiskSerialNumber">硬盘序列号,可以为空</param> /// <param name="MacAddress">网卡MAC地址(已剔除虚拟网卡和USB网卡),可以为空</param> /// <returns> /// true:匹配成功 /// false:匹配失败 /// </returns> /// <remarks> /// 说明: /// 对设备标识不区分大小写 /// 空项不做判断,非空项必须全部满足 /// </remarks> public static Boolean WDK_DeviceMatch(String CPUID, String HardDiskSerialNumber, String MacAddress); /// <summary> /// 输出硬件信息到指定INI文件 /// </summary> /// <param name="iniFileName">要保存的ini文件名</param> /// <returns> /// true:成功 /// false:失败 /// </returns> public static Boolean WDK_DeviceInfoPrint(String iniFileName); /// <summary> /// 判断程序是否在VMware虚拟机中运行 /// </summary> /// <returns> /// true:程序是在VMware虚拟机中运行 /// false:程序不是在VMware虚拟机中运行 /// </returns> public static bool WDK_IsVMware(); } }