C#:基于WDK和WMI获取机器指纹

同系列文章:
  • VC:基于WDK和WMI获取机器指纹
  • C#:基于WDK和WMI获取机器指纹
功能描述:
  1. 实现基于WDK获取网卡原生Mac地址
  2. 实现基于WMI获取网卡原生Mac地址、硬盘序列号、CPU ID
  3. 实现基于WDK获取系统所有设备的VID和PID
源代码出售:
C#:基于WDK和WMI获取机器指纹_第1张图片
价格:壹仟元人民币
QQ:36748897
动态库及测试程序下载:
HWiNFO CS 2014-04-07.zip

HWiNFO类公开方法

/* ----------------------------------------------------------
 * 文件名称:HWiNFO.cs
 * 
 * 作者:秦建辉
 * 
 * QQ:36748897
 * 
 * 博客:http://www.firstsolver.com/wordpress/
 * 
 * 开发环境:
 *      Visual Studio V2013
 *      .NET Framework 4 Client Profile
 *      
 * 版本历史:
 *      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>
        /// 结合设备安装类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>
        /// <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);
    }
}

测试软件界面:

C#:基于WDK和WMI获取机器指纹_第2张图片C#:基于WDK和WMI获取机器指纹_第3张图片

你可能感兴趣的:(C#:基于WDK和WMI获取机器指纹)