C#-获取U盘序列号

之前有程序加密的需求,但机器码加密程序的方式太过单一,只能通过机器码和授权码在一台机器上进行加密,在淘宝上看到用硬件加密的加密狗,于是有了想法(游戏开始时读取U盘序列号,匹配通过后即可进入游戏),但无奈在C#实现功能后生成在类库,在Unity中居然用不了,这就很坑了,不过在此和大家分享一下C#读取U盘序列号的方法!

直接上代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management;

namespace USBFlashDriveOperation
{
    public class GetData
    {
        private static void Main()
        {
            Console.WriteLine(CompareID("000000000272"));
        }

        public static bool CompareID(string inputID)
        {
            bool compareResult = false;
            MatchDriveLetterWithSerial();
            string[] idArray = _serialNumber.ToArray();
            foreach (string id in idArray)
            {
                if(id.Equals(inputID))
                {
                    compareResult = true;
                }
                else
                {
                    compareResult = false;
                }
            }
            return compareResult;
        }

        private static List<string> _serialNumber = new List<string>();

        private static void MatchDriveLetterWithSerial()
        {
            string[] diskArray;
            string driveNumber;
            var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_LogicalDiskToPartition");
            foreach (ManagementObject dm in searcher.Get())
            {
                GetValueInQuotes(dm["Dependent"].ToString());
                diskArray = GetValueInQuotes(dm["Antecedent"].ToString()).Split(',');
                driveNumber = diskArray[0].Remove(0, 6).Trim();
                var disks = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");
                foreach (ManagementObject disk in disks.Get())
                {
                    if (disk["Name"].ToString() == ("\\\\.\\PHYSICALDRIVE" + driveNumber) & disk["InterfaceType"].ToString() == "USB")
                    {
                        _serialNumber.Add(ParseSerialFromDeviceID(disk["PNPDeviceID"].ToString()));
                    }
                }
            }

            foreach (string id in _serialNumber)
            {
                Console.WriteLine(id);
            }
        }

        private static string ParseSerialFromDeviceID(string deviceId)
        {
            string[] splitDeviceId = deviceId.Split('\\');
            int arrayLen = splitDeviceId.Length - 1;
            string[] serialArray = splitDeviceId[arrayLen].Split('&');
            string serial = serialArray[0];
            return serial;
        }

        private static string GetValueInQuotes(string inValue)
        {
            int posFoundStart = inValue.IndexOf("\"");
            int posFoundEnd = inValue.IndexOf("\"", posFoundStart + 1);
            string parsedValue = inValue.Substring(posFoundStart + 1, (posFoundEnd - posFoundStart) - 1);
            return parsedValue;
        }
    }
}

在这里编译器可能会报错哦,需要添加System.Management的引用,按照1-4流程走一遍添加就行了。
在这里插入图片描述
在这里插入图片描述

OK了,可以看到我在方法里面将_serialNumber链表内容打印出来了,在插入U盘的情况下,控制台会出现一串数字(下面就出来了),在插入U盘的情况下控制台打印了U盘的序列号,通过CompareID方法可进行ID的匹配。

好了,C#获取U盘序列号就分享到这里!

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
获取U盘ID序列号 VS2005编译通过,源码源自CSDN。已经测试好用。 可以获得U盘名称,制造商ID号 版本号 U盘序列号及容量 Form1.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO; using System.Management; namespace UDiskTest { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button2_Click(object sender, EventArgs e) { DriveInfo[] s = DriveInfo.GetDrives(); foreach (DriveInfo drive in s) { if (drive.DriveType == DriveType.Removable) { pf.Text = drive.Name.ToString(); break; } } ManagementClass cimobject = new ManagementClass("Win32_DiskDrive"); ManagementObjectCollection moc = cimobject.GetInstances(); foreach (ManagementObject mo in moc) { if (mo.Properties["InterfaceType"].Value.ToString() == "USB") { try { //产品名称 Caption.Text = mo.Properties["Caption"].Value.ToString(); //总容量 Size.Text = mo.Properties["Size"].Value.ToString(); string[] info = mo.Properties["PNPDeviceID"].Value.ToString().Split('&'); string[] xx = info[3].Split('\\'); //序列号 MessageBox.Show("U盘序列号:" + xx[1]); PNPDeviceID.Text = xx[1]; xx = xx[0].Split('_'); //版本号 REV.Text = xx[1]; //制造商ID xx = info[1].Split('_'); VID.Text = xx[1]; } catch (Exception ex) { MessageBox.Show(ex.Message); } } } } } } 如果编译遇到问题是using System.Management;无法找到引用找到, 项目(p)->添加引用(R)->找到.NET标签页 列表中下部位找到System.Management 双击点确定

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

StubbrnStar

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值