.NET System.Management 获取windows系统和硬件信息

news2024/12/26 20:41:15

ManagementObject用于创建WMI类的实例与WINDOWS系统进行交互,通过使用WMI我们可以获取服务器硬件信息、收集服务器性能数据、操作Windows服务,甚至可以远程关机或是重启服务器。

WMI 的全称 Windows Management Instrumentation,即 Windows 管理规范,在 Windows 操作系统中,随着 WMI 技术的引入并在之后随着时间的推移而过时,它作为一项功能强大的技术,从 Windows NT 4.0 和 Windows 95 开始,始终保持其一致性。它出现在所有的 Windows 操作系统中,并由一组强大的工具集合组成,用于管理本地或远程的 Windows 系统。

微软提供了丰富的 WMI 对象用来与操作系统相关的信息进行通信。例如:Win32_Process,Win32_Service,AntiVirusProduct,Win32_StartupCommand等等,所有的WMI对象都使用类似于一个 SQL 查询的语言称为 WMI 查询语言WQL, WQL 能够很好且细微的控制返回给用户的 WMI 对象。下图提供了微软实现 WMI 的一个高级别概述以及微软实现的组件和实现的标准之间的关系

0X02 WMI查询

WMI 提供了一种简单的语法WQL用于查询 WMI 对象实例,有三种类别的 WQL 查询:
名称用途
实例查询用于查询 WMI 类的实例
事件查询用于一个 WMI 事件注册机制,例如 WMI 对象的创建、 删除或修改
元查询用于查询 WMI 类结构

实例查询是最常见的用于获取 WMI 对象实例的 WQL 查询。基本的实例查询采用以下形式:

**SELECT \[Class property name|*\] FROM \[CLASS NAME\] <WHERE \[CONSTRAINT\]>**

以下查询将返回所有正在运行的进程的可执行文件名称中包含"Chrome"的结果。具体的说是,此查询将返回 Win32_Process 类的每个实例的所有属性的名称字段中包含字符串"Chrome"的结果。

**SELECT* FROM Win32\_Process WHERE Name LIKE "%chrome%"**

事件查询提供了报警机制,触发事件的类。在 WMI 类实例被创建时被用于常用的事件查询触发器。事件查询将采取以下形式:

**SELECT \[Class property name|*\] FROM \[INTRINSIC CLASS NAME\] WITHIN \[POLLING INTERVAL\] <WHERE \[CONSTRAINT\]>**

**SELECT \[Class property name|*\] FROM \[EXTRINSIC CLASS NAME\] <WHERE \[CONSTRAINT\]>**

内部和外部的事件将在事件章节中进一步详细解释。

下面是交互式用户登录的事件查询触发器。根据MSDN 文档描述,交互式登录的LogonType值为 2。

**SELECT* FROM \_\_InstanceCreationEvent WITHIN 15 WHERE TargetInstance ISA 'Win32\_LogonSession' AND TargetInstance.LogonType = 2**

下面是在可移动媒体插入时的事件查询触发器:

**SELECT* FROM Win32\_VolumeChangeEvent WHERE EventType = 2**

元查询提供一个 WMI 类架构发现和检查机制。元查询采用以下形式:

**SELECT \[Class property name|*\] FROM \[Meta\_Class<WHERE \[CONSTRAINT\]>**

以下查询将列出所有以字符串 "Win32" 开头的 WMI 类:

**SELECT* FROM Meta\_Class WHERE \_\_Class LIKE "Win32%"**

当执行任何 WMI 查询时,除非显式提供命名空间,否则将隐式使用默认的命名空间 ROOT\CIMV2。

0X03 WMI基本用法

WMI 类的命名空间的层次结构非常类似于传统的,面向对象的编程语言的命名空间。所有的命名空间都派生自根命名空间,在用脚本语言查询对象并未显式指定命名空间时,微软使用 ROOT\CIMV2 作为默认的命名空间,Windows系统提供测试器 wbemtest.exe ,wbemtest.exe 是一个功能强大的带有图形界面的 WMI 诊断工具。它能够枚举对象实例、执行查询、注册事件、修改 WMI 对象和类,并且可以在本地或远程去调用方法。WQL: SELECT * FROM Meta_Class WHERE __Class LIKE "Win32%"

下面的 WMI 类是在攻击的侦察阶段可以收集数据的:

  • 主机/操作系统信息:Win32_OperatingSystem, Win32_ComputerSystem
  • 文件/目录列举: CIM_DataFile
  • 磁盘卷列举: Win32_Volume
  • 注册表操作: StdRegProv
  • 运行进程: Win32_Process
  • 服务列举: Win32_Service
  • 事件日志: Win32_NtLogEvent
  • 登录账户: Win32_LoggedOnUser
  • 共享: Win32_Share
  • 已安装补丁: Win32_QuickFixEngineering

.NET下需引入程序集:Assembly Name="System.Management, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",命名空间:using System.Management,该命名空间提供对一组符合WMI基础结构的系统、设备和应用程序的管理信息和管理事件的访问。

名称用途
ManagementScope连接WMI命名空间
ManagementBaseObject管理对象的基本元素
ManagementObject管理WMI实例
ManagementObjectCollection通过WMI检索到的管理对象的集合
ManagementObjectSearcher查询检索管理对象的集合

ManagementObjectSearcher表示基于指定的查询检索管理对象的集合,笔者通过一段代码获取当前系统账户名,指定WMI的Key = Win32_UserAccount ,遍历出包含的所有系统账户,如下代码

private static string GetHardWareInfo(string item)
    {
        if (item == "" || item == null)
        {
            return null;
        }
        string hardinfo = null;
        string querystr = string.Format("select * from {0}", item);
        ManagementObjectSearcher objvide = new ManagementObjectSearcher(querystr);
        foreach (ManagementObject obj in objvide.Get())
        {
            hardinfo += obj["Name"].ToString() + "\n";
        }
        return hardinfo;
    }

//Main方法中调用
string v = GetHardWareInfo("Win32_UserAccount");
Console.WriteLine(v);

常用的WMI类还有如下列表

WMI类释义适用范围
Win32_StartupCommand系统自动启动程序操作系统
Win32_Service系统安装的服务操作系统
Win32_Group系统管理组操作系统
Win32_GroupUser系统组帐号操作系统
Win32_UserAccount用户帐号操作系统
Win32_Process系统进程操作系统
Win32_Thread系统线程操作系统
Win32_Share共享操作系统
Win32_SystemDriver驱动程序操作系统
Win32_LogicalDisk逻辑磁盘操作系统
Win32_ComputerSystem计算机信息简要操作系统
Win32_OperatingSystem操作系统信息操作系统
Win32_PrintJob打印机任务硬件
Win32_BIOSBIOS 芯片硬件
Win32_DiskDrive硬盘驱动器硬件
Win32_Keyboard键盘硬件
Win32_ProcessorCPU 处理器硬件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/418028.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

音视频八股文(1)--音视频基础

1.1.音视频录制原理 1.2.音视频播放原理 1.3.图像表示RGB-YUV 1.3.1 图像基础概念 ◼ 像素:像素是一个图片的基本单位,pix是英语单词picture的简写,加上英 语单词“元素element”,就得到了“pixel”,简称px&#xff…

使用Mingw64在CLion中搭建Linux开发环境

1.前言: 博主本来一直是在Visual Studio 2017中使用C语言编写程序,但有个问题是Visual Studio 2017默认使用自带的Windows SDK和编译器,我想使用POSIX文件操作就不行(因为Windows中没有Linux SDK),虽然Wind…

【Kafka-架构及基本原理】Kafka生产者、消费者、Broker原理解析 Kafka原理流程图

【Kafka-架构及基本原理】Kafka生产者、消费者、Broker原理解析 & Kafka原理流程图1)Kafka原理1.1.生产者流程细节1.2.Broker 的存储流程细节1.3.消费者流程细节2)Kafka读写流程图1)Kafka原理 1.1.生产者流程细节 1、生产者发送消息到 …

计算机毕业设计源码整合大全_kaic

以下为具体单个列表(单个下载在我主页搜索即可): 1:计算机专业-ASP(499套) ASP学生公寓管理系统的设计与实现(源代码论文).rar 1:计算机专业-ASP(499套) ASP学科建设设计(源代码论文).ra…

Clickhouse 引擎之MergeTree详解

分区详解 数据存储底层分布 # 数据在这个位置 rootfjj001:~# cd /var/lib/clickhouse/data rootfjj001:/var/lib/clickhouse/data# ls # 数据库 default system rootfjj001:/var/lib/clickhouse/data# cd default/ rootfjj001:/var/lib/clickhouse/data/default# ls #表 enu…

ASEMI代理AD8400ARZ10-REEL原装ADI车规级AD8226ARZ-R7

编辑:ll ASEMI代理AD8400ARZ10-REEL原装ADI车规级AD8226ARZ-R7 型号:AD8400ARZ10-REEL 品牌:ADI/亚德诺 封装:SOIC-8 批号:2023 引脚数量:8 安装类型:表面贴装型 AD8400ARZ10-REEL汽车芯…

Zabbix监控系统——附详细步骤和图解

文章目录一、Zabbix概述1、使用zabbix的原因2、zabbix的概念和构成3、zabbix 监控原理:4、zabbix的程序组件二、安装 zabbix 5.01、部署 zabbix 服务端的操作步骤2、实例操作:部署 zabbix 服务端3、部署 zabbix 客户端4、实例操作:部署 zabbi…

【Linux】揭开套接字编程的神秘面纱(下)

​🌠 作者:阿亮joy. 🎆专栏:《学会Linux》 🎇 座右铭:每个优秀的人都有一段沉默的时光,那段时光是付出了很多努力却得不到结果的日子,我们把它叫做扎根 目录👉前言&…

(二十三)槽函数的书写规则导致槽函数触发2次的问题

在创建QT的信号和槽时,经常无意间保留着QT书写槽函数的习惯,或者在QT设计界面直接右键【转到槽】去创建槽函数,但是后期需要用到disconnect时,又重新写了一遍connect函数,那么你会发现实际槽函数执行了2遍。 首先来看…

要在Ubuntu中查找进程的PID,可以使用pgrep或pidof命令。

一 查找进程 1.pgrep命令 pgrep命令可以根据进程名或其他属性查找进程的PID。例如,要查找名为"firefox"的进程的PID,可以在终端中输入以下命令: pgrep firefox如果有多个名为"firefox"的进程,pgrep命令将返…

互联网一个赛道只剩下几家,真要爆品

互联网一个赛道剩下几家,真要爆品 2017年的书,案例基本上是马后炮总结 趣讲大白话:说起来容易,做起来难 【趣讲信息科技136期】 **************************** 书中讲的范冰冰翻车了 书中不看好的线下渠道,现在成香饽饽…

面试篇-Java并发之CAS:掌握原理、优缺点和应用场景分析,避免竞态问题

1、CAS介绍及原理 多线程中的CAS(Compare-and-Swap)操作是一种常见的并发控制方法,用于实现原子性更新共享变量的值。其核心思想是通过比较内存地址上的值和期望值是否相等来确定是否可以进行更新操作,从而避免多线程条件下的竞态…

HMI实时显示网络摄像机监控画面——以海康威视网络摄像机为例

随着IOT技术的快速发展,网络摄像机快速应用于工业领域,结合其他智能设备建立一个智能系统,提高用户与机器设备之间的交互体验,帮助企业优化人员配置。 作为重要的可视化设备,HMI不仅可以采集现场设备数据,…

uniapp系列-使用uniapp携带收件人信息调用手机邮件应用发邮件的2种方案

背景描述 我们使用uniapp打包之后,某些情况下,需要使用uniapp打开手机其他应用去发邮件,携带对方email 信息以及主题信息等,那我们应该怎么处理呢? 方案一:使用uniapp标签-uni-link,注意这种方…

BGP实验(一)

实验要求: 1、As1存在两个环回,一个地址为192.168.1.0/24,该地址不能在任何协议中宣告, As3存在两个环回,.一个地址为192.168.2.0/24,该地址不能在任何协议中宣告, As1还有一个环回地址为10.1.1.0/24&…

研读Rust圣经解析——Rust learn-8(match,if-let简洁控制流,包管理)

研读Rust圣经解析——Rust learn-8(match,if-let简洁控制流,包管理)matchother和占位符_区别easy matchenum matchno valuematch innerOption matchmore better wayif-let整洁控制包管理模块(mod)拆分声明modpub公开use展开引用拆解模块结构m…

docker cmd

sudo docker run --gpus all --name uavrl1 themvs/uav_swarm_reinforcement_learning sudo docker p s-a 86850d5a9dc3 sudo docker run --gpus all --name uavrl12 uavrl:v1.2 ---------- 共享屏幕输入类似指令,实测可行 sudo docker run -it --nethost --ipc…

Leetcode每日一题——“轮转数组”

各位CSDN的uu们你们好呀,今天,小雅兰的内容是轮转数组,下面,让我们进入轮转数组的世界吧 小雅兰之前其实就已经写过了字符串旋转的问题了: C语言刷题(7)(字符串旋转问题&#xff09…

优化 Kafka 的生产者和消费者

背景 如今,分布式架构已经成为事实上的架构模范,这使得通过 REST API 和 消息中间件来降低微服务之间的耦合变得必然。就消息中间件而言,Apache Kafka 已经普遍存在于如今的分布式系统中。Apache Kafka 是一个强大的、分布式的、备份的消息服…

HBase高手之路5—HBase的JavaAPI编程

文章目录Hbase高手之路5—Hbase的JavaAPI编程一、需求与数据集二、准备工作1.下载安装Java2.下载安装Idea3.下载安装maven4.Maven配置国内的镜像库5.Idea使用自定义的maven配置6.创建一个maven测试项目7.创建所需要的包8.创建类文件,输入代码9.运行项目三、创建HBas…