当前位置: 首页 > news >正文

go采集注册表

package mainimport ("fmt""golang.org/x/sys/windows/registry""log""os""strconv""strings"
)func USBSTOR_Enum() {// 打开注册表键keyPath := `SYSTEM\CurrentControlSet\Services\USBSTOR\Enum`k, err := registry.OpenKey(registry.LOCAL_MACHINE, keyPath, registry.QUERY_VALUE)if err != nil {log.Fatalf("无法打开注册表键 %s: %v", keyPath, err)}defer k.Close()// 获取 U 盘数量count, _, err := k.GetIntegerValue("Count")if err != nil {log.Fatalf("无法获取 U 盘数量: %v", err)}if count < 1 {fmt.Println("没有检测到 U 盘!")os.Exit(0)}// 遍历每个 U 盘的信息fmt.Printf("\n检测到 %d 个 U 盘,按插入顺序输出信息:\n\n", count)for i := 0; i < int(count); i++ {valueName := strconv.Itoa(i)info, _, err := k.GetStringValue(valueName)if err != nil {log.Printf("无法获取键值 %s 的信息: %v", valueName, err)continue}// 提取 SN、VID 和 PIDparts := strings.Split(info, "\\")if len(parts) < 3 {log.Printf("无法解析设备信息: %s", info)continue}sn := parts[2]pvid := parts[1]vid := strings.Split(strings.Split(pvid, "&")[0], "_")[1]pid := strings.Split(strings.Split(pvid, "&")[1], "_")[1]// 打印信息fmt.Printf("U 盘 %d:\n", i+1)fmt.Printf("  SN 码: %s\n", sn)fmt.Printf("  VID:   %s\n", vid)fmt.Printf("  PID:   %s\n\n", pid)}
}// 采集计算机名称
func getComputerName() {keyPath := `SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName`k, err := registry.OpenKey(registry.LOCAL_MACHINE, keyPath, registry.QUERY_VALUE)if err != nil {log.Printf("无法获取计算机名称: %v", err)return}defer k.Close()name, _, err := k.GetStringValue("ComputerName")if err != nil {log.Printf("无法读取 ComputerName 值: %v", err)return}fmt.Printf("计算机名称: %s\n", name)
}// 采集已安装软件信息
func getInstalledSoftware() {keyPath := `SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall`k, err := registry.OpenKey(registry.LOCAL_MACHINE, keyPath, registry.ENUMERATE_SUB_KEYS)if err != nil {log.Printf("无法打开已安装软件注册表路径: %v", err)return}defer k.Close()subKeys, err := k.ReadSubKeyNames(-1)if err != nil {log.Printf("无法读取子键名称: %v", err)return}fmt.Println("已安装的软件列表:")for _, subKey := range subKeys {subKeyPath := keyPath + `\` + subKeysubK, err := registry.OpenKey(registry.LOCAL_MACHINE, subKeyPath, registry.QUERY_VALUE)if err != nil {continue}name, _, _ := subK.GetStringValue("DisplayName")version, _, _ := subK.GetStringValue("DisplayVersion")if name != "" {fmt.Printf("  软件名称: %s, 版本: %s\n", name, version)}subK.Close()}
}// 采集 USB 设备信息
func getUSBDevices() {keyPath := `SYSTEM\CurrentControlSet\Enum\USB`k, err := registry.OpenKey(registry.LOCAL_MACHINE, keyPath, registry.ENUMERATE_SUB_KEYS)if err != nil {log.Printf("无法打开 USB 设备注册表路径: %v", err)return}defer k.Close()subKeys, err := k.ReadSubKeyNames(-1)if err != nil {log.Printf("无法读取 USB 设备子键: %v", err)return}fmt.Println("USB 设备信息:")for _, subKey := range subKeys {subKeyPath := keyPath + `\` + subKeydeviceK, err := registry.OpenKey(registry.LOCAL_MACHINE, subKeyPath, registry.ENUMERATE_SUB_KEYS)if err != nil {continue}deviceSubKeys, _ := deviceK.ReadSubKeyNames(-1)for _, deviceSubKey := range deviceSubKeys {deviceInfoPath := subKeyPath + `\` + deviceSubKeyinfoK, err := registry.OpenKey(registry.LOCAL_MACHINE, deviceInfoPath, registry.QUERY_VALUE)if err != nil {continue}deviceDesc, _, _ := infoK.GetStringValue("DeviceDesc")friendlyName, _, _ := infoK.GetStringValue("FriendlyName")if friendlyName == "" {friendlyName = deviceDesc}if friendlyName != "" {fmt.Printf("  设备名称: %s\n", friendlyName)}infoK.Close()}deviceK.Close()}
}// 采集网络信息
func getNetworkInfo() {keyPath := `SYSTEM\CurrentControlSet\Services\Tcpip\Parameters`k, err := registry.OpenKey(registry.LOCAL_MACHINE, keyPath, registry.QUERY_VALUE)if err != nil {log.Printf("无法获取网络信息: %v", err)return}defer k.Close()hostName, _, _ := k.GetStringValue("Hostname")domain, _, _ := k.GetStringValue("Domain")fmt.Printf("网络信息:\n  主机名: %s\n  域名: %s\n", hostName, domain)
}// 采集硬件信息
func getHardwareInfo() {keyPath := `HARDWARE\DESCRIPTION\System`k, err := registry.OpenKey(registry.LOCAL_MACHINE, keyPath, registry.QUERY_VALUE)if err != nil {log.Printf("无法获取硬件信息: %v", err)return}defer k.Close()systemBiosDate, _, _ := k.GetStringValue("SystemBiosDate")systemBiosVersion, _, _ := k.GetStringValue("SystemBiosVersion")fmt.Printf("硬件信息:\n  BIOS 日期: %s\n  BIOS 版本: %s\n", systemBiosDate, systemBiosVersion)
}// 主函数:逐一采集信息
func main() {fmt.Println("正在采集系统信息...\n")// 采集各类信息getComputerName()getInstalledSoftware()getUSBDevices()getNetworkInfo()getHardwareInfo()USBSTOR_Enum()fmt.Println("\n信息采集完成。")
}

Windows 注册表是一个分层的配置数据库,存储了系统配置、用户偏好、设备信息等数据。以下是一些常见的注册表路径和对应的信息类别,供你参考和扩展:

1. 系统信息

  • 路径: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control

    • 描述: 包含系统配置相关的信息。
    • 示例:
      • ComputerName\ActiveComputerName: 当前计算机名称。
      • TimeZoneInformation: 系统时区信息。
  • 路径: HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System

    • 描述: 存储硬件信息。
    • 示例:
      • SystemBiosDate: BIOS 日期。
      • SystemBiosVersion: BIOS 版本信息。

Windows 注册表是一个分层的配置数据库,存储了系统配置、用户偏好、设备信息等数据。以下是一些常见的注册表路径和对应的信息类别,供你参考和扩展:


1. 系统信息

  • 路径: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control

    • 描述: 包含系统配置相关的信息。
    • 示例:
      • ComputerName\ActiveComputerName: 当前计算机名称。
      • TimeZoneInformation: 系统时区信息。
  • 路径: HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System

    • 描述: 存储硬件信息。
    • 示例:
      • SystemBiosDate: BIOS 日期。
      • SystemBiosVersion: BIOS 版本信息。

2. 软件安装信息

  • 路径: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
    • 描述: 存储当前计算机安装的软件信息。
    • 示例:
      • 每个子键对应一个已安装的软件,其下包含:
        • DisplayName: 软件名称。
        • DisplayVersion: 软件版本。
        • InstallLocation: 软件安装路径。

3. 开机自启动项

  • 路径: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

    • 描述: 开机启动的全局程序。
    • 示例:
      • 每个值表示一个自启动程序:
        • 键名:程序名称。
        • 键值:程序路径。
  • 路径: HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

    • 描述: 当前用户的开机启动项。

4. USB 设备历史

  • 路径: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB
    • 描述: 记录历史插入的 USB 设备信息。
    • 示例:
      • 子键名称包含设备 VID 和 PID。
      • FriendlyName: 设备友好名称。
      • DeviceDesc: 设备描述。

5. 网络信息

  • 路径: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

    • 描述: 存储网络配置信息。
    • 示例:
      • Hostname: 主机名。
      • Domain: 域名。
      • DhcpIPAddress: DHCP 分配的 IP 地址。
  • 路径: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT\Parameters

    • 描述: NetBIOS 网络信息。

6. 电源设置

  • 路径: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power
    • 描述: 电源管理设置。
    • 示例:
      • HibernateEnabled: 是否启用休眠。
      • CsEnabled: 是否启用连接待机。

7. 用户登录信息

  • 路径: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI
    • 描述: 存储用户登录界面相关设置。
    • 示例:
      • LastLoggedOnUser: 最近登录的用户名。

8. 计划任务

  • 路径: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree
    • 描述: 存储计划任务的基本信息。
    • 示例:
      • 子键名对应任务名称,包含任务的触发条件和配置。

9. 安全与防火墙

  • 路径: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy
    • 描述: Windows 防火墙相关配置。
    • 示例:
      • StandardProfile: 默认防火墙规则。
      • DomainProfile: 域环境防火墙规则。

10. 硬件信息

  • 路径: HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP
    • 描述: 映射设备与资源的信息。
    • 示例:
      • Scsi: 存储设备的配置信息。
      • VIDEO: 显卡设备信息。

11. 事件日志

  • 路径: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog
    • 描述: 系统和应用程序事件日志的配置。
    • 示例:
      • 子键表示不同日志类型(如 Application、System 等)。

注意事项

  1. 权限问题:

    • 某些注册表键需要管理员权限才能访问。如果权限不足,程序会报错。
  2. 兼容性问题:

    • 不同版本的 Windows 系统中,注册表结构可能略有不同。
  3. 修改注册表的风险:

    • 读取注册表通常是安全的,但写入操作可能会对系统稳定性产生影响,请小心使用。

相关文章:

go采集注册表

package mainimport ("fmt""golang.org/x/sys/windows/registry""log""os""strconv""strings" )func USBSTOR_Enum() {// 打开注册表键keyPath : SYSTEM\CurrentControlSet\Services\USBSTOR\Enumk, err : regist…...

软件工程师欧以宁:引领无人机导航与物联网安全的技术革新

在科技日新月异的今天,软件工程师欧以宁凭借卓越的技术能力和前瞻性的创新思维,成为了无人机自主导航和物联网安全领域的佼佼者。作为一名深耕技术前沿的专家,欧以宁不仅推动了无人机导航技术的突破性进展,还为智能家居和物联网的安全架构提供了全新的解决方案。她的研究成果,以…...

从零开始:Gitee 仓库创建与 Git 配置指南

引言 Git 是一款广泛使用的版本控制工具&#xff0c;它能够帮助开发者在开发过程中高效地管理代码的版本。而 Gitee&#xff08;码云&#xff09;是国内知名的 Git 托管平台&#xff0c;它提供了强大的代码托管、团队协作和项目管理功能。如果你是 Git 和 Gitee 的新手&#x…...

浅谈计算机网络02 | SDN控制平面

计算机网络控制平面 一、现代计算机网络控制平面概述1.1 与数据平面、管理平面的关系1.2 控制平面的发展历程 二、控制平面的关键技术剖析2.1 网络层协议2.1.1 OSPF协议2.1.2 BGP协议 2.2 SDN控制平面技术2.2.1 SDN架构与原理2.2.2 OpenFlow协议2.2.3 SDN控制器 一、现代计算机…...

在 QNAP NAS中使用 Container Station 运行 Docker 的完整指南

QNAP 为用户提供了一个名为 Container Station 的应用&#xff0c;它在 QNAP NAS 上将 Docker 和 LXC 结合在一起&#xff0c;通过图形化界面&#xff0c;让用户更轻松地在 NAS 上管理容器。本文将带你一步步了解如何在 QNAP NAS 上安装和使用 Container Station&#xff0c;以…...

XML在线格式化 - 加菲工具

XML在线格式化 打开网站 加菲工具 选择“XML 在线格式化” 输入XML&#xff0c;点击左上角的“格式化”按钮 得到格式化后的结果...

大数据学习(34)-mapreduce详解

&&大数据学习&& &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 承认自己的无知&#xff0c;乃是开启智慧的大门 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一下博主哦&#x1f91…...

代码合并冲突解决push不上去的问题

环境&#xff1a;【IntelliJ IDEA】 【Gerrit】 1、错误信息 代码合并&#xff0c;迭代1合并到迭代2&#xff0c;解决冲突后&#xff0c;依然push不上去&#xff0c;报错信息如下&#xff1a; remote: Processing changes: refs: 1 remote: Processing changes: refs…...

万字长文介绍ARINC 653,以及在综合模块化航空电子设备(IMA)中的作用

文章目录 一、引言二、ARINC 653背景三、整体系统架构四、应用/执行&#xff08;APEX&#xff09;接口五、ARINC 653 RTOS内部机制六、健康监测功能七、软件应用八、ARINC 653现状九、总结 一、引言 在现代航空领域&#xff0c;综合模块化航空电子设备&#xff08;IMA&#xf…...

MySQL 与 Redis 数据一致性 2

1. 强一致还是最终一致?2. 先写 MySQL 还是先写Redis?case 1 3. 缓存(Redis)更新还是清除?更新策略更新策略会有数据不一致问题?数据不一致的概率与影响如果使用监听binlog更新数据还会出现数据不一致问题?binlog的消费问题 使用消息队列行不行?其他方案总结: 数据不一致…...

MySQL程序之:使用类似URI的字符串或键值对连接到服务器

本节介绍使用类似URI的连接字符串或键值对来指定如何为MySQLShell等客户端建立到MySQL服务器的连接。 以下MySQL客户端支持使用类似URI的连接字符串或键值对连接到MySQL服务器&#xff1a; MySQL Shell实现X DevAPI的MySQL连接器 本节记录了所有有效的类似URI的字符串和键值…...

Docker私有仓库管理工具Registry

Docker私有仓库管理工具Registry 1 介绍 Registry是私有Docker仓库管理工具&#xff0c;Registry没有可视化管理页面和完备的管理策略。可借助Harbor、docker-registry-browser完成可视化和管理。Harbor是由VMware开发的企业级Docker registry服务。docker-registry-browser是…...

若依前后端分离项目部署(使用docker)

文章目录 一、搭建后端1.1 搭建流程&#xff1a;1.2 后端零件:1.2.1 mysql容器创建&#xff1a;1.2.2 redis容器创建&#xff1a;1.2.3 Dockerfile内容&#xff1a;1.2.4 构建项目镜像&#xff1a;1.2.5 创建后端容器&#xff1a; 二、前端搭建&#xff1a;2.1 搭建流程&#x…...

Unity2021.3.13崩溃的一种情况

如果出现如下的报错&#xff0c;可能是软件冲突的原因。自己的原因是使用f.lux这款软件似乎和Unity相互冲突&#xff0c;出现下面报错。 错误信息如上图...

Temp123

MapDB&#xff1a;的持久化机制&#xff0c;以及源码分析和摘取 1、spark streaming--struct streaming 基于 时间间隔 攒批 2、kafka-connect-hdfs 控制 flush.size 和 interval.ms控制 攒批 - 完全自研 攒批机制 - 使用 embeded 版 https://lxblog.com/qianwen/share?shar…...

春秋杯-WEB

SSTI 可以看到主页那里有个登录测试之后为ssti {{4*4}} fenjing梭哈即可得到payload {{((g.pop.__globals__.__builtins__.__import__(os)).popen(cat flag)).read()}}file_copy 看到题目名字为file_copy&#xff0c; 当输入路径时会返回目标文件的大小&#xff0c; 通…...

JavaEE:多线程初阶

JavaEE&#xff1a;多线程初阶 一、线程的原理和进程与线程之间的关系1. 线程的原理线程的基本概念线程的生命周期线程的调度线程的并发与并行 2. 进程与线程的关系进程&#xff08;Process&#xff09;线程与进程的关系进程和线程的对比线程的优势线程的缺点 3. 总结 二、多线…...

Linux之文件系统前世今生(一)

Linux在线1 Linux在线2 一、 基本概念 1.1 块&#xff08;Block&#xff09; 在计算机存储之图解机械硬盘这篇文章中我们提到过&#xff0c;磁盘读写的最小单位是扇区&#xff0c;也就是 512 Byte&#xff1b;很明显&#xff0c;每次读写的效率非常低。 为了提高IO效率&…...

当设置dialog中有el-table时,并设置el-table区域的滚动,看到el-table中多了一条横线

问题&#xff1a;当设置dialog中有el-table时&#xff0c;并设置el-table区域的滚动&#xff0c;看到el-table中多了一条横线&#xff1b; 原因&#xff1a;el-table有一个before的伪元素作为表格的下边框下&#xff0c;初始的时候已设置&#xff0c;在滚动的时候并没有重新设置…...

Windows远程桌面网关出现重大漏洞

微软披露了其Windows远程桌面网关&#xff08;RD Gateway&#xff09;中的一个重大漏洞&#xff0c;该漏洞可能允许攻击者利用竞争条件&#xff0c;导致拒绝服务&#xff08;DoS&#xff09;攻击。该漏洞被标识为CVE-2025-21225&#xff0c;已在2025年1月的补丁星期二更新中得到…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...

(一)单例模式

一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

深入浅出Diffusion模型:从原理到实践的全方位教程

I. 引言&#xff1a;生成式AI的黎明 – Diffusion模型是什么&#xff1f; 近年来&#xff0c;生成式人工智能&#xff08;Generative AI&#xff09;领域取得了爆炸性的进展&#xff0c;模型能够根据简单的文本提示创作出逼真的图像、连贯的文本&#xff0c;乃至更多令人惊叹的…...

Java详解LeetCode 热题 100(26):LeetCode 142. 环形链表 II(Linked List Cycle II)详解

文章目录 1. 题目描述1.1 链表节点定义 2. 理解题目2.1 问题可视化2.2 核心挑战 3. 解法一&#xff1a;HashSet 标记访问法3.1 算法思路3.2 Java代码实现3.3 详细执行过程演示3.4 执行结果示例3.5 复杂度分析3.6 优缺点分析 4. 解法二&#xff1a;Floyd 快慢指针法&#xff08;…...

【实施指南】Android客户端HTTPS双向认证实施指南

&#x1f510; 一、所需准备材料 证书文件&#xff08;6类核心文件&#xff09; 类型 格式 作用 Android端要求 CA根证书 .crt/.pem 验证服务器/客户端证书合法性 需预置到Android信任库 服务器证书 .crt 服务器身份证明 客户端需持有以验证服务器 客户端证书 .crt 客户端身份…...

数据库正常,但后端收不到数据原因及解决

从代码和日志来看&#xff0c;后端SQL查询确实返回了数据&#xff0c;但最终user对象却为null。这表明查询结果没有正确映射到User对象上。 在前后端分离&#xff0c;并且ai辅助开发的时候&#xff0c;很容易出现前后端变量名不一致情况&#xff0c;还不报错&#xff0c;只是单…...

电脑桌面太单调,用Python写一个桌面小宠物应用。

下面是一个使用Python创建的简单桌面小宠物应用。这个小宠物会在桌面上游荡&#xff0c;可以响应鼠标点击&#xff0c;并且有简单的动画效果。 import tkinter as tk import random import time from PIL import Image, ImageTk import os import sysclass DesktopPet:def __i…...

CppCon 2015 学习:Reactive Stream Processing in Industrial IoT using DDS and Rx

“Reactive Stream Processing in Industrial IoT using DDS and Rx” 是指在工业物联网&#xff08;IIoT&#xff09;场景中&#xff0c;结合 DDS&#xff08;Data Distribution Service&#xff09; 和 Rx&#xff08;Reactive Extensions&#xff09; 技术&#xff0c;实现 …...

算法刷题-回溯

今天给大家分享的还是一道关于dfs回溯的问题&#xff0c;对于这类问题大家还是要多刷和总结&#xff0c;总体难度还是偏大。 对于回溯问题有几个关键点&#xff1a; 1.首先对于这类回溯可以节点可以随机选择的问题&#xff0c;要做mian函数中循环调用dfs&#xff08;i&#x…...