代码编织梦想

一、网络安全至关重要

没有网络安全就没有国家安全。

当下正值2023年国家网络安全宣传周(9月11日至17日)在全国范围举行,而第20届中国—东盟博览会也在9月16日至19日在广西南宁举行,网络安全检测和保障至关重要。

二、编写sysInfo的目的

单位电脑比较多,电脑专业技术人员少,逐台上机检测花费时间多,效率又低,比较理想的方法 是编写一个系统信息采集程序,发给单位员工在自己的电脑上运行,并把采集的信息文件发回来。所以,不管是以前写的pe_xscan,还是如今写的sysInfo,都是为了收集使用Windows系统的电脑信息,进而分析电脑系统是否安全。

三、WMI简介

最近断断续续在更新sysInfo,主要是通过wmi来进行。

Windows Management Instrumentation (WMI) 是 Microsoft 对基于 Web 的企业管理 (WBEM) 的实现,WBEM 是一项业界倡议,用于为访问企业环境中的管理信息开发一项标准技术。 WMI 使用通用信息模型 (CIM) 行业标准来表示系统、应用程序、网络、设备和其他托管组件。 CIM 由分布式管理任务组 (DMTF) 开发和维护。

从Windows 2000开始,直到最新的Windows 11,WMI一直内置于Windows操作系统中,并且成为了Windows系统管理的重要组成部分。通过WMI,不仅可以获取想要的计算机数据,而且还可以用于远程操作。

因而,在sysInfo中尽量使用wmi获取信息,这样可以避免直接调用 API函数时可能遇到的Windows 版本的差异。

四、WMI的不足

但在实际编写代码过程中,还是感到 WMI存在一些不如意的地方:

(一)WMI提供的命名空间因Windows版本而异

比如通过安全中心(root/Security/Center)可以获取系统中安装的杀毒软件信息,但安全中心是从Windows XP SP2 的WMI开始提供的,对于Windows XP SP2 之前的Windows系统,获取系统中安装的杀毒软件信息需要通过其它的渠道。

(二)WMI提供的信息内容因Windows版本而异

比如对于Win32_Product的信息类:

[Provider("MSIProv"), Dynamic]
class Win32_Product : CIM_Product
{
  uint16   AssignmentType;
  string   Caption;
  string   Description;
  string   IdentifyingNumber;
  string   InstallDate;
  datetime InstallDate2;
  string   InstallLocation;
  sint16   InstallState;
  string   HelpLink;
  string   HelpTelephone;
  string   InstallSource;
  string   Language;
  string   LocalPackage;
  string   Name;
  string   PackageCache;
  string   PackageCode;
  string   PackageName;
  string   ProductID;
  string   RegOwner;
  string   RegCompany;
  string   SKUNumber;
  string   Transforms;
  string   URLInfoAbout;
  string   URLUpdateInfo;
  string   Vendor;
  uint32   WordCount;
  string   Version;
};

其中有些成员只对某些Windows版本有意义。比如AssignmentType、HelpLink、InstallSource等,对于Windows 2003无效。

五、参考资料

关于 WMI - Win32 apps | Microsoft Learn

Win32_Product class (Windows) | Microsoft Learn

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Purpleendurer/article/details/132919795

stream流-爱代码爱编程

Stream操作流 在Java 8中,得益于Lambda所带来的函数式编程,引入了一个全新的Stream概念,用于解决已有集合类库既有的弊端。 1.1 集合的迭代 几乎所有的集合(如 Collection 接口或 Ma

qt模块依赖-爱代码爱编程

//1 if (containsHowOften(deploymentInfo.deployedLibraries, "libQt5Gui")     || containsHowOften(deploymentInfo.deployedLibraries, "libQt6Gui")) {     LogDebug() << "libQt5Gu

游戏中排行榜算法研究-爱代码爱编程

package org.example.testBinary; import com.google.common.collect.Lists; import java.util.List; public class Main { public static void main(String[] args) { List<Integer&g

文件服务器-爱代码爱编程

#ftpserver.py from socket import * from threading import Thread import os,time #全局变量 HOST = '0.0.0.0' PORT=808

算法通关村18关 | 回溯模板如何解决分割回文串问题-爱代码爱编程

1. 分割回文串 题目 LeetCode131 分割回文串,给你一个字符串s,请你将s分割成一些字串,使每个字串都是回文串,返回s所有可能的分割方案。 回文串是正着和反着读都是一样的字符串。 思路 知道回溯的模板,用回溯的角度思考就清晰很多: 切割线就是图中红线切割到字符串的结尾位置, 图中的第一次截取’a',第二次截取’

list知识总结-爱代码爱编程

ArrayList: 1 ArrayList扩容底层用到的是;System.arraycopy. 2 扩容的长度计算;int newCapacity = oldCapacity + (oldCapacity >&

java 泛型 t,e,k,v,?-爱代码爱编程

泛型带来的好处 在没有泛型的情况的下,通过对类型 Object 的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的

代码随想录--链表-反转链表-爱代码爱编程

题意:反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL  双指针 public class Main { public static class ListNode { int val;

springboot集成excel导入导出-爱代码爱编程

1、引入依赖 <dependency> <groupId>com.pig4cloud.excel</groupId> <artifactId>excel-spring-boot-starter</artifactId> <version>1.2.7</v

【学习总结】easyexcel合并同列不同行,表格数据相同的行-爱代码爱编程

实体类 @Data @HeadRowHeight(50) @ContentStyle(horizontalAlignment = HorizontalAlignmentEnum.CENTER, verticalAlignm

【c++从0到王者】第三十一站:map与set-爱代码爱编程

文章目录 一、关联式容器二、pair键值对三、set1. set的介绍2. set的部分接口以及应用3. count4. lower_bound和upper_bound5. equal_range6. mult

dede织梦标签名称:{/dede:arclist} 详解-爱代码爱编程

DEDE织梦标签名称:{/dede:arclist} 详解 arclist简介使用实例日期的各种格式底层字段底层模板字段: DEDE织梦标签名称:{/dede:arclist} 详解 arcl

java内存分页工具类-爱代码爱编程

hutool 依赖: <dependency> <groupId>cn.hutool</groupId> <a

数额结构(6.1~6.8)-爱代码爱编程

6-1链表的插入算法 题目: 代码 int InsertPost_link(LinkList llist,DataType x,DataType y) { LinkList m=llist->next

list接口(集合)-爱代码爱编程

ArrayList<UnitManagementsEntity> unitManagementsEntities = new ArrayList<>(); List<UnitManagementsEntity> unitManagementsEntitie; 假设你开始时使用了