WMI接口设计实现

WMI是Windows操作系统管理数据和操作的基础设施,系统管理员可以使用VB Script、PowerShell及Windows API(C++、C#等)管理本地或远程计算机。
使用WMI框架应用程序可以直接访问EC RAM、 I/O端口、Memory地址、寄存器、Setup NV设定值,以及其他的系统设备资源。

一、Asl code设计

OemWMIDemo.asl

Scope(\_SB)
{
    Device(AMW1)//WMI
    {
        // pnp0c14 is Plug and Play ID assigned to WMI mapper
        Name(_HID, "PNP0C14")
        Name(_UID, "WMIDEMO")    
        // Description of data and events supported
        Name(_WDG, Buffer() {
            //
            // Event
            // GUID 93B56635-6D54-42D7-BB7D-DF77D452CCE4
            // BIOS can generator WMI event by Notify (<<WMI device name>>, 0xAC)
			//
            0x35, 0x66, 0xB5, 0x93, 0x54, 0x6D, 0xD7, 0x42, 0xBB, 0x7D, 0xDF, 0x77, 0xD4, 0x52, 0xCC, 0xE4,     // GUID
            0xAC, 0,       // Event Notification ID
            1,             // Instance Count
            0x08,          // Flags (WMIACPI_REGFLAG_EVENT)
			//
			// Method
            // GUID ABBC0FB8-8EA1-11D1-A000-C90629100000
            //
            0xB8, 0x0F, 0xBC, 0xAB, 0xA1, 0x8E, 0xD1, 0x11, 0xA0, 0x00, 0xC9, 0x06, 0x29, 0x10, 0, 0,
			0x44, 0x45,    // Object Id (DE)
			1,             // Instance Count
			0x02,          // Flags (WMIACPI_REGFLAG_METHOD)
            //
            // This GUID for returning the MOF data
            // 05901221-D566-11D1-B2F0-00A0C9062910
            0x21, 0x12, 0x90, 0x05, 0x66, 0xd5, 0xd1, 0x11, 0xb2, 0xf0, 0x00, 0xa0, 0xc9, 0x06, 0x29, 0x10,
            66, 68,        // Object ID (BD)
            1,             // Instance Count
            0x00,          // Flags(none)
        })

        Name(FEAC, Buffer(0x04)
        {
            0x00, 0x00, 0x00, 0x00
        })
        Method (EVAC, 0)
        {  
            Return (FEAC)               
        } // End of Method EVAC
		
		//
		// EcRAM Method data block
		// Arg0 has the instance being queried
		// Arg1 has the method id
		// Arg2 has the data passed
		Method(WMDE, 3)
		{
			//MethodId 1
			if(LEqual(Arg1, 1))
			{
				Store(Arg2, FEAC)
				Notify(AMW1, 0xAC)
				Return(0)
			}
		}
        
		// More info about an event
		// Arg0 is the event id that was fired
        Method(_WED, 1, NotSerialized)
        {
            If(LEqual(Arg0, 0xAC))
            {
                Return(EVAC())
            }
        }

        // -------- Compiled version of "Associated MOF File" below --------
        // Memo: generated by mofcomp.exe
        Name(WQBD, Buffer()
        {

        })
    }
}//end scope _SB

其中Mof GUID(0x21, 0x12, 0x90, 0x05, 0x66, 0xd5, 0xd1, 0x11, 0xb2, 0xf0, 0x00, 0xa0, 0xc9, 0x06, 0x29, 0x10)为固定值。

二、Mof code设计

OemWMIDemo.mof

[WMI, Dynamic, provider("WMIProv"),
 locale("MS\\0x409"), 
 GUID("{ABBC0FB8-8EA1-11D1-A000-C90629100000}"), 
 Description("Call BIOS Function through WMI")
]
class WmiDemo
{
	[key, read] 
	string InstanceName;
	
	[read] 
	Boolean Active;
	
	[WmiMethodId(1), 
	 Implemented, 
	 read, write, 
	 Description("My method 1")
	] void MyMethod1([inout, Description("My method 1")] uint32 Data);
	
};

[WMI, Dynamic, provider("WMIProv"),
 locale("MS\\0x409"), 
 GUID("{93B56635-6D54-42D7-BB7D-DF77D452CCE4}"), 
 Description("Event generated when machine is hit") 
]
class DemoWmiEvent : WMIEvent
{
	[key, read] 
	string InstanceName;
	
	[read] 
	Boolean Active;
	
	[WmiDataId(1),
	 read, write,
	 Description("Force with which the machine was hit")
	] uint32 Force;
};

三、编译Mof文件

工具:
mofcomp.exe为系统自带
wmimofck.exe可以从Windows WDK拷贝

将mof文件编译成bmf二进制文件

D:\WMI_Demo>mofcomp.exe -B:OemWMIDemo.bmf OemWMIDemo.mof
分析 MOF 文件: OemWMIDemo.mof
已成功分析 MOF 文件
将二进制 MOF 数据存储在 OemWMIDemo.bmf 中

Binary mof file OemWMIDemo.bmf expanded to 3126 bytes

使用wmimofck.exe可生成VBS脚本

D:\WMI_Demo>wmimofck.exe -tOemWMIDemo.vbs OemWMIDemo.bmf
Microsoft (R) WDM Extensions To WMI MOF Checking Utility  Version 1.50.0000
Copyright (c) Microsoft Corp. 1997-2000. All rights reserved.

Binary mof file OemWMIDemo.bmf expanded to 3126 bytes

使用wmimofck.exe将bmf二进制文件转成文本

D:\WMI_Demo>wmimofck.exe -x"WIMDemo.txt" OemWMIDemo.bmf
Microsoft (R) WDM Extensions To WMI MOF Checking Utility  Version 1.50.0000
Copyright (c) Microsoft Corp. 1997-2000. All rights reserved.

将文本中的内容填入asl文件中Name(WQBD, Buffer() { })的Buffer里。
在这里插入图片描述

四、测试

使用WMICodeCreator.exe工具进行测试。可支持生成VBScript, C#, and VB .NET代码。
管理员身份打开WMICodeCreator.exe。

  1. 首先设置event,并执行
    在VBS脚本中,添加Wscript.Echo objReceivedEvent.Force语句可输出Event的返回值
    请添加图片描述

  2. 设置Method,并执行
    注意instance要出来,并且选中,如果没出来可能是GUID没填对,没选中的话执行会报错。
    请添加图片描述

参考
创建一个WMI ACPI device
基于Windows Management Instrumentation(WMI)的BIOS接口设计

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

unicloud 云函数 介绍及使用

普通云函数 callFunction方式云函数&#xff0c;也称之为普通云函数。 uni-app的前端代码&#xff0c;不再执行uni.request联网&#xff0c;而是通过uniCloud.callFunction调用云函数。 callFunction方式避免了服务器提供域名&#xff0c;不暴露固定ip&#xff0c;减少被攻击…

京东商品详情页数据抓取:探索背后的技术与合法途径

京东的商品详情页面数据通常是通过其API进行获取的&#xff0c;但是京东的API并不是公开的&#xff0c;需要注册京东开放平台并获取相应的API密钥。此外&#xff0c;直接爬取京东网站的数据可能违反了京东的服务条款&#xff0c;并且可能涉及到法律问题。 如果你确实有合法的需…

提升商品销量必备!淘宝商品评论电商API接口全解析

评论是电商销售中至关重要的一环&#xff0c;它能直接影响到商品销量。淘宝商品评论电商API接口的全面了解和合理的应用&#xff0c;将成为提升销量的利器。联讯数据将从不同角度详细解析淘宝商品评论电商API接口&#xff0c;为您揭示成功提升商品销量的关键。 淘宝商品评论电…

手写简易操作系统(十四)--内存管理系统

前情提要 前面我们实现了一个简单的C库&#xff0c;现在我们将实现一个内存池。 之前我们的内存都是自己规划的&#xff0c;我们需要 0xc0001500 这个地址&#xff0c;就将程序放在哪儿。但是程序多了怎么办&#xff1f;还需要我们自己去一个一个安排位置吗&#xff0c;有一块…

四、分布式锁之自定义分布式锁

1、基本原理和实现方式对比 分布式锁&#xff1a;满足分布式系统或集群模式下多个进程可见并且互斥的锁。分布式锁的核心思想就是多线程都使用同一把锁&#xff0c;实现程序串行执行。 分布式锁需要具备的条件&#xff1a; 特性含义可见性多个线程都能感知到变化互斥性分布…

Orange3数据预处理(行选择组件)

选择行 根据数据特征的条件选择数据实例。 输入 数据&#xff1a;输入数据集 输出 匹配数据&#xff1a;满足条件的实例 不匹配数据&#xff1a;不满足条件的实例 数据&#xff1a;带有额外列的数据&#xff0c;显示实例是否被选中 这个小部件根据用户…

数据库系统概论-第16章 数据仓库与联机分析处理技术

概念性的介绍&#xff0c;一略而过&#xff0c;不重要。 16.1 数据仓库技术 16.2 联机分析处理技术 16.3 数据挖掘技术 16.4 大数据时代的新型数据仓库 16.5 小结

jetson nano torch1.6 torchvision0.7.0 yolov5

pytorch版本对应关系查看网址&#xff1a; pytorch torchvision pytorch安装方式 点击pytorch链接&#xff1a;pytorch torchvision安装方式 sudo apt-get install libjpeg-dev zlib1g-dev libavcodec-dev libavformat-dev libswscale-dev git clone --branch v0.7.0 https…

第113讲:Mycat实践指南:按照单位为天的日期实现水平分表

文章目录 1.按天分片的概念1.按天分片的概念 2.按照天数对某张表进行水平拆分2.1.在所有的分片节点中创建表结构2.2.配置Mycat实现字符串按天分片的水平分表2.2.1.配置Schema配置文件2.2.2.配置Rule分片规则配置文件2.2.3.配置Server配置文件2.2.4.重启Mycat 2.3.写入数据观察分…

[每周一练][NewStarCTF 2023 公开赛道]EasyLogin

一打开是个登录界面&#xff0c;注册账号进去看了一下似乎没有什么提示。按照经验这种登录系统的一般就是sql或者爆破。先试试简单的爆破。 猜测管理员账号&#xff1a;admin,密码&#xff1a;123456。抓包看到传入的密码是被加密了的。应该是MD5加密。 爆破的话就必须用MD5的密…

短视频矩阵系统/短视频矩阵系统/自研独立框架

短视频矩阵系统/短视频矩阵系统/自研独立框架&#xff0c; 短视频综合矩阵营销管理系统,一键分发多个平台,帮助企业管理海量视频账号&#xff0c;包含抖音视频、AI混剪、矩阵导流&#xff0c;客户获取等功能。通过将视频分发、到各账号&#xff0c;提高品牌曝光率、且可以同时管…

系列直播预告:Apache Doris 2.1 新版本特性解读来袭,惊喜周边等你拿!

不久之前&#xff0c;Apache Doris 2.1.0 版本迎来正式发布&#xff0c;在盲测性能提升 100% 的同时&#xff0c;更在数据湖分析、半结构化数据分析、数据写入与更新、数据存储与负载隔离等方面推出众多核心特性&#xff0c;实时性和易用性的到全面提升。 为了让更多关注和喜爱…

transformer的学习:Attention is all you need

目录 整体概述&#xff1a;​编辑​编辑 encoder&#xff1a; embedding&#xff1a; ​编辑 self-attention&#xff1a; 向量的相似度计算&#xff1a; qkv怎么来的​编辑 softmax&#xff1a; code multi-head-attention 位置编码&#xff1a; 残差&&FFN&…

leetcode 2617. 网格图中最少访问的格子数【单调栈优化dp+二分】

原题链接&#xff1a;2617. 网格图中最少访问的格子数 题目描述&#xff1a; 给你一个下标从 0 开始的 m x n 整数矩阵 grid 。你一开始的位置在 左上角 格子 (0, 0) 。 当你在格子 (i, j) 的时候&#xff0c;你可以移动到以下格子之一&#xff1a; 满足 j < k < gri…

嵌入式开发--STM32G431RBTx-定时器中断流水灯

嵌入式开发–STM32G431RBTx-定时器中断流水灯 定时器工作原理 如图有反映stm32g431的定时器资源。 共10个定时器 定时器定时器类型个数TIM6&#xff0c;7基本定时器2TIM2&#xff0c;3&#xff0c;4全功能通用定时器3TIM15&#xff0c;16&#xff0c;17通用定时器(只有1或2个…

Linux_开发工具_yum_vim_gcc/g++_gdb_make/makefile_进度条_git_2

文章目录 一、Linux软件包管理器yum1. centos7 中安装软件方式2.安装&#xff0c;卸载&#xff0c;查看3.yum源4.安装lrzsz5.安装扩展源 二、Linux编辑器-vim1.安装vim2.vim的三种模式3.命令模式-文本批量化操作4.vim配置 三、Linux编译器-gcc/g使用1.安装2.gcc如何完成1、 预处…

SpringBoot3使用响应Result类返回的响应状态码为406

Resolved [org.springframework.web.HttpMediaTypeNotAcceptableException: No acceptable representation] 解决方法&#xff1a;Result类上加上Data注解

【算法刷题】Day33

文章目录 1. 最长湍流子数组题干&#xff1a;算法原理&#xff1a;1. 状态表示&#xff1a;2. 状态转移方程3. 初始化4. 填表顺序5. 返回值 代码&#xff1a; 2. 最长递增子序列题干&#xff1a;算法原理&#xff1a;1. 状态表示&#xff1a;2. 状态转移方程3. 初始化4. 填表顺…

链表递归-leetcode两两交换相邻链表中的结点

两两交换相邻链表中的结点 题目&#xff1a; 给定一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后的链表。 你不能只是单纯的改变节点内部的值&#xff0c;而是需要实际的进行节点交换。 示例1 输入&#xff1a;head [1,2,3,4] 输出&#xff1a;[2,1…

文件怎么做扫码预览?创建文件活码的步骤有哪些?

现在文件可以通过扫描二维码的方式来获取&#xff0c;与传统的通过聊天软件来传输相比&#xff0c;二维码方式的应用更加的方便&#xff0c;其他人只需要通过扫描一张二维码就可以在手机上浏览或者下载文件&#xff0c;通过手机就可以预览、存储。 文件二维码的制作方法也很简…