golang读取u盘序列号(通过读取序列号实现)

Posted sherlock-merlin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang读取u盘序列号(通过读取序列号实现)相关的知识,希望对你有一定的参考价值。

仅供参考
package main

import (
	"fmt"
	"log"
	"os"
	"strconv"
	"strings"

	registry "github.com/golang/sys/windows/registry"
)

func main() {
	//查询插入的u盘个数
	k, err := registry.OpenKey(registry.LOCAL_MACHINE, `SYSTEMCurrentControlSetServicesUSBSTOREnum`, registry.QUERY_VALUE)
	if err != nil {
		log.Fatal(err)
	}
	defer k.Close()

	n, _, err := k.GetIntegerValue("Count")
	if err != nil {
		log.Fatal(err)
	}
	if n < 1 {
		fmt.Println("没有检测到u盘!")
		os.Exit(-1)
	}

	//查询u盘序列号
	var sn, pvid, vid, pid string
	information, _, err := k.GetStringValue(strconv.Itoa(0))
	strn := strconv.FormatUint(n, 10) //n是uint64类型,先转成string
	nInt, _ := strconv.Atoi(strn)     //再转成int类型
	if n > 1 {
		fmt.Printf("
检测到多个u盘,按插入顺序输出u盘信息

")
	}
	for i := 0; i < nInt; i++ {
		information, _, err = k.GetStringValue(strconv.Itoa(i))
		if err != nil {
			log.Fatal(err)
		}
		sn = strings.Split(information, "\")[2]
		pvid = strings.Split(information, "\")[1]
		vid = strings.Split(pvid, "&")[0]
		vid = strings.Split(vid, "_")[1]
		pid = strings.Split(pvid, "&")[1]
		pid = strings.Split(pid, "_")[1]
		fmt.Println("当前u盘sn码:", sn)
		fmt.Println("当前u盘vid: ", vid)
		fmt.Println("当前u盘pid: ", pid)
		fmt.Println("")
	}
}


参考链接: https://godoc.org/golang.org/x/sys/windows/registry

以上是关于golang读取u盘序列号(通过读取序列号实现)的主要内容,如果未能解决你的问题,请参考以下文章

U盘序列号怎么获取?怎么清楚U盘插拔痕迹?

硬盘序列号读取工具-硬盘序列号查询软件推荐

GoLang -- json文件操作

联想Thinkpad申请系统恢复U盘,通过UltraISO提取ISO镜像

Golang内存模型

电脑里怎么查询使用过的u盘序列号?