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 mapperName(_HID, "PNP0C14")Name(_UID, "WMIDEMO")    // Description of data and events supportedName(_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,     // GUID0xAC, 0,       // Event Notification ID1,             // Instance Count0x08,          // 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 Count0x02,          // Flags (WMIACPI_REGFLAG_METHOD)//// This GUID for returning the MOF data// 05901221-D566-11D1-B2F0-00A0C90629100x21, 0x12, 0x90, 0x05, 0x66, 0xd5, 0xd1, 0x11, 0xb2, 0xf0, 0x00, 0xa0, 0xc9, 0x06, 0x29, 0x10,66, 68,        // Object ID (BD)1,             // Instance Count0x00,          // 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 passedMethod(WMDE, 3){//MethodId 1if(LEqual(Arg1, 1)){Store(Arg2, FEAC)Notify(AMW1, 0xAC)Return(0)}}// More info about an event// Arg0 is the event id that was firedMethod(_WED, 1, NotSerialized){If(LEqual(Arg0, 0xAC)){Return(EVAC())}}// -------- Compiled version of "Associated MOF File" below --------// Memo: generated by mofcomp.exeName(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接口设计

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

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

相关文章

ideaSSM 财务凭证管理系统bootstrap开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 idea 开发 SSM 财务凭证管理系统是一套完善的信息管理系统&#xff0c;结合SSM框架和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和数据库&#xff…

【史上最全面arduino esp32教程】ESP32Time时间库

文章目录 前言一、安装ESP32Time库二、ESP32Time使用2.1 基础使用构造ESP32Time对象设置当前时间获取当前时间结构体 2.2 其他函数 总结 前言 欢迎来到这篇Arduino ESP32教程&#xff01;在本教程中&#xff0c;我们将介绍ESP32Time时间库的使用。时间在许多项目中起着重要的作…

基于SSM的手机商城管理系统+数据库+论文+免费远程调试

项目介绍: 基于SSM的手机商城管理系统。Javaee项目&#xff0c;采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring SpringMvc Mybatis JspBootstrapLayui来实现。MySQL数据库作为系统…

html第一次作业

常用标签 0, 骨架&#xff08;&#xff01;tap&#xff09; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><t…

两款新春烟花代码-烟花模拟器网站源码

安装教程 1下载源码 2上传主机 3解析域名到主机 4绑定域名 5解压源码 6打开域名 源码免费下载地址 抄笔记 chaobiji.cn

04 创建Mapper.xml和mybatis-config.xml模板

Settings->File and Code Templates <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace…

GTC AI 2024:人工智能的未来展望

在2024年GTC AI大会上&#xff0c;NVIDIA推出了多项创新技术和产品&#xff0c;涵盖了从新一代GPU平台到AI超级计算和量子计算云服务等多个领域。 新一代GPU平台 Blackwell Blackwell是为生成式AI时代设计的新一代GPU平台&#xff0c;与前代相比&#xff0c;在FP8训练性能上提…

Python之Web开发中级教程----ubuntu安装MySQL

Python之Web开发中级教程----ubuntu安装MySQL 进入/opt目录 cd /opt 更新软件源 sudo apt-get upgrade sudo apt-get update 3、安装Mysql server sudo apt-get install mysql-server 4、启动Mysql service mysql start 5、确认Mysql的状态 service mysql status 6、安全设…

Python——删除加密excel文件的密码

文章目录 前言一、msoffcrypto库二、使用Python删除加密Excel密码1.load_key():准备密码2.decrypt():通过删除密码解锁文件,然后将文件保存到磁盘总结前言 在python解析excel文件时,碰到文件加密报错的问题,刚开始每次解析使用手动打开表格,取消密码的方式,但客户每次释…

硬核分享|AI语音识别转文字与自动生成字幕

硬核分享|AI语音识别转文字与自动生成字幕_哔哩哔哩_bilibili 在现代快节奏的生活中&#xff0c;语音转文字工具成为了我们工作和学习中的得力助手。它能够将我们说出的话语迅速转化为文字或者将语音视频自动生成字幕&#xff0c;提供便捷和高效。 语音转文字转字幕工具是一种…

Linux信号处理

Linux信号处理 什么是linux信号 本质是一种通知机制&#xff0c;用户 or 操作系统通过发送一定的信号&#xff0c;通知进程&#xff0c;某些事情已经发生&#xff0c;你可以在后续进行处理。 信号产生是随机的&#xff0c;进程可能正在忙自己的事情&#xff0c;所以&#xf…

30V转5V 1A 30降压12V 1A DCDC低电压恒压IC 车充芯片-H4110

30V转5V和30V转12V的DCDC低电压恒压IC&#xff08;也称为降压恒压芯片或车充芯片&#xff09;工作原理如下&#xff1a; 输入电压识别&#xff1a;芯片首先识别输入的30V电压&#xff0c;并准备进行转换。 PWM控制&#xff1a;芯片内部的控制逻辑生成PWM信号。这个信号用于控制…

如何使用 Elasticsearch 作为向量数据库

在今天的文章中&#xff0c;我们将很快地通过 Docker 来快速地设置 Elasticsearch 及 Kibana&#xff0c;并设置 Elasticsearch 为向量搜索。 拉取 Docker 镜像 docker pull docker.elastic.co/elasticsearch/elasticsearch:8.12.2 docker pull docker.elastic.co/kibana/kiba…

Docker构建多平台(x86,arm64)构架镜像

这里写自定义目录标题 背景配置buildx开启experimental重启检查 打包 背景 docker镜像需要支持不同平台架构 配置buildx 开启experimental vi /etc/docker/daemon.json {"experimental": true }或者 重启检查 # 验证buildx版本 docker buildx version# 重启do…

基于Spring Boot+Vue的高校办公室行政事务管理系统

末尾获取源码作者介绍&#xff1a;大家好&#xff0c;我是墨韵&#xff0c;本人4年开发经验&#xff0c;专注定制项目开发 更多项目&#xff1a;CSDN主页YAML墨韵 学如逆水行舟&#xff0c;不进则退。学习如赶路&#xff0c;不能慢一步。 目录 一、项目简介 二、开发技术与环…

OpenCV 介绍使用

返回&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇:OpenCV4.9.0开源计算机视觉库使用简要说明 下一篇: OpenCV&#xff08;开源计算机视觉库&#xff1a;http://opencv.org&#xff09;是一个开源库&#xff0c;包含数百种计算机视觉算法。…

vCenter 6.5为虚拟机添加GPU直通

参考&#xff1a;Dell文档 如何为GPU直通启用VMware虚拟机。 | Dell 中国

lvs+keepalived+nginx实现高可用

主机&#xff1a;192.168.199.132 备机&#xff1a;192.168.199.133 真实服务器1&#xff1a;192.168.199.134 真实服务器2&#xff1a;192.168.199.135 问题&#xff1a; 防火墙没关 132配置ipvsadm进行dr模式 132配置keepalived.conf 133配置ipvsadm进行dr模式 133配置ke…

pytorch 训练实时checkpoint保存;训练中断恢复

1、训练实时checkpoint保存 一般是torch save保存相关权重及训练参数 # 训练和测试循环 for epoch in range(start_epoch, epochs + 1):train(model, device, train_loader, optimizer, criterion, epoch)test(model, device

手机网页关键词视频爬虫采集软件可导出视频分享链接|视频无水印批量下载工具

全新音视频批量下载工具&#xff0c;为您解放视频管理烦恼&#xff01; 现如今&#xff0c;音上涌现出大量精彩的视频内容&#xff0c;但是要想高效地获取、管理和分享这些视频却是一件颇具挑战的事情。针对这一难题&#xff0c;我们自主研发了全新的音视频批量下载工具&#x…