安装软件提示;SWbemObjectSet:无效类

可以通过调用以下任一方法或它們的异步等效项来获取 SWbemObjectSet 对象:

由于在客户端要求回拨到接收器的身份验证级别上可能未返回因此建议使用半同步,而不是异步通信 有關详细信息,请参阅



用于读取或更改安全设置。

可以代表以下两个内容之一:

  • WMI 管理的资源的实例

此类在 WMI 中的最常见用途是作为 或 调用嘚返回值,如下面的代码示例中所述:

在大多数情况下只会对 SWbemObjectSet 中包含的所有对象进行枚举。 但是 SWbemObjectSet 确实包含一个在系统管理脚本中可能囿用的属性计数。 顾名思义Count 会告诉您集合中的项目数。 例如此脚本检索计算机上安装的所有服务的集合,然后回显找到的服务总数:

囿关如何使用此类的详细信息请参阅 。


为了成功运行清单 13将脚本复制並粘贴到您最常用的文本编辑器中,保存脚本(扩展名为 .vbs例如:GetXML.vbs),然后使用下面列出的命令行运行脚本

如果对 WMI 有任何疑惑、困难或鈈知所措,那可能是在处理由 WMI 公布的大量数据我们愿意认为,我们已经为您装备了有效地寻找并解释 WMI 托管资源类定义所必需的知识和工具当然,对于这一点您是最好的裁判所以请尽量让我们知道我们是否以及有哪些不足。枯燥的内容结束了准备在我们投入到 WMI 脚本库嘚详细信息时在第三部分玩得开心点吧。哦不管怎么样,随意打发剩下的时间吧

等一下!在您打包走人之前,还有最后一个要注意的哋方:WMI 开发小组让我们告诉您以前只能随 WMI SDK 使用的 ,现在已经进行了更新更新的工具(包括 WMI CIM Studio、WMI 事件注册、WMI 事件查看器 和 WMI 对象浏览器),現在都与 Windows XP 和 Windows Server 2003 以及 Windows 2000 兼容此外,更新的工具不包含 WMI SDK这意味着现在您可以安装这些工具而不必安装整个 WMI SDK。这难道不是非常酷么

清单 A :列出茬 root/cimv2 命名空间中定义的抽象类类型

清单 B:列出在 root/cimv2 命名空间中定义的动态类类型

Greg Stemp 长期以来被公认为美国国内的脚本编写权威之一,并且被大家廣泛誉为世界级……哈哈!嗯他们 的履历表中怎么都当过足球教练?真的吗他被解雇 了?哦好吧。Greg Stemp 工作在……哦好了,难道我连這都不能说吗好吧!Greg Stemp 从 Microsoft 领薪水,在那儿他拥有并不显赫的首席作家(System

Dean Tsaltas 是一个生活在 Redmond 的 Nova Scotian 人他已经开始说一口流利的美语了,甚至会笑他嘚滨海省的朋友和家人们的发音他的计算机生涯开始于他很小的时候,那时他的祖母和父母资助他为他买了他心爱的 C-64,并为他订阅了 Compute! 嘚学报现在,他已经在 Microsoft 工作了若干年他有句话要告诉在家乡和温哥华的朋友和家人:“没有,我还没见过比尔!”

Bob Wells 漫无目的地四处游赱向每个听他说话的人大赞脚本编写的好处。有传言说Bob 的两只达克思猎犬对脚本编写比大多数人类知道的都多。业余时间里Bob 向 System Administration Scripting Guide 投稿。

Ethan Wilansky把他的很多的工作时间花在了写作和咨询方面他狂热于脚本编写、瑜伽、园艺和他的家庭(不一定按此顺序)。他目前正致力于一种創建能倒垃圾和洗餐盘的脚本的方法

CE内核能够运行在多种处理器上,如x86、ARM、SHX、MIPS等优点是授权费低,最低Core版标价¥30元缺点是需要单独开发应用软件、 定制内核,甚至开发BSP、Driver  

WINCE下内核模式和用户模式有什麼区别?

为了使读者能够详细了解WINCE的地址映射原理还有两种模式在这里我分几个部分说明: 1、WINCE内核nk.exe的任务是管理操作系统核心功能。按照OEMAddressTable的映射要求所有物理地址都映射到 0x以上,所以对于内核程序nk.exe和内核模式下的线程来说只要访问0x以上的有效虚拟地址经MMU就能够访问物 悝地址,无需再映射是内核模式的一个特点内核模式的第二个特点是没有地址访问限制,内核模式线程可以访问任何有效虚拟地址所謂有效虚拟地址是指有实际 事物对应。 2、用户模式线程只能访问0x以下的虚拟地址空间WINCE6.0之前版本的内核为每个进程划分32MB的地址空间,在不調用特殊函数 的情况下不能相互访问这样的设计使得WINCE系统更安全、更稳定,限制访问地址是用户模式的第一个特点第二个特点就是需偠多一层映射,如果线程要访 问物理内存的话需要先映射到0x以上再经MMU访问物理内存地址。 WINCE的线程具有转移性(参考API GetCallerProcess的说明有一个很好嘚例子),当应用程序的线程调用API或者调用驱动程序接口函数时该线程会转移到 gwes.exe、device.exe、filesys.exe等进程中执行,转移是由WINCE内核操作的它会修改线程的上下文,记录线程的当前进 程、调用者进程、拥有者进程三个值 3、如果在定制内核的时候选择了“Full Kernel Mode”,那么在这个内核上运行的所囿线程都处于内核模式即使调用SetKMode(FALSE)后线程仍然具有内核模式的特点,能够访问任何有效的 虚拟地址假设现有一个64MB RAM的WINCE产品,RAM映射从0x到0x如果线程处于内核模式,它就直接可以访问这个范围的虚拟地址: 在OnButton1()中编写 代码: DWORD oldMode = 可以直接访问0x以上的有效虚拟地址;我们写到RAM中的数据没有丟失说明虚拟地址有效。 如果在定制内核的时候没有选择“Full Kernel Mode”那么在这个内核上运行的所有线程都处于用户模式。可以调用SetKMode(TRUE)使调用线程暂时处于内核模式还是原来的假设环境,我 再举个例子: 在OnButton1()中编写 DWORD oldMode = 12345一定会弹出对话框提示地址访问非法,如果调用SetKMode(TRUE)就不会提示地址訪问非法而且在OnButton2()中仍然能得 到12345这个值。 通过这两个例子我相信读者能够完全了解两种模式的区别了 (0xFFFFFFFF)能让调用线程访问所有进程空间,泹是调用线程仍然处于用户模式SetKMode和SetProcPermissions函数使 得用户模式的特点不那么明晰。 如上所说一个应用程序的线程可能转移到其它两个进程地址空間中读写数据而每一个线程在被创建的时候只有访问创建它的进程地址空间的权限,所以驱动程序开 发者必须在驱动程序读写数据前调鼡SetKMode或者SetProcPermissions增加调用此函数的线程访问其它进程空间的权限如果一个应用 程序的线程只转移到一个进程地址空间,一般为设备管理器进程device.exe這种情况下不必增加线程访问其它进程空间的权限,但如果驱动程序本身创 建了一个线程那还是要调用SetKMode或者SetProcPermissions增加新的线程访问其它进程嘚权限的,因为驱动程序创建线程时当前 进程为设备管理器,所以新线程只具有访问设备管理器进程空间的权限而不具备访问应用程序进程空间的权限。 5、可能一个编写过简单的流驱动的初学者会很疑惑因为开发一个简单的流驱动程序根本不需要调用这些函数,也没囿调用过MapPtrToProcess 那是因为如果标准流驱动接口函数的参数为指针(ReadFile、WriteFile、DeviceIoControl参数都有指针),WINCE内核会 自动映射指针包含的地址但仅此而已,其余任何情况都要求开发者自行处理比如流接口函数的参数是一个指向结构体的指针PA,而结构体中包括指针 PBPB指针就必须在流接口函数中映射,映射后才能访问否则就会造成地址访问非法。所以结构体中每个指针都要映射 为了让读者能了解其中的原因,我举个例子: 假设設备管理器被加载到Slot4应用程序A被加载到Slot 8,A只有一个主线程TT开始执行,按照WINCE的规定正获得CPU的进程必须映射到Slot0,那么在执行代码的时候A嘚所有虚拟地址都被减去一 个偏移值也就是8×0x,A调用DeviceIoControl传递一个指向一个结构体的指针B,而这个结构体中包含一个指针C指 针C包含的地址假设为0x,当执行DeviceIoControl时WINCE把设备管理器的进程地址空间映射到Slot0因为放在注 册表[HKLM//Drivers//BuiltIn]下的驱动程序是由设备管理器加载的,自然驱动程序的代码段被加载到设备管理器进程空间但是线程仍 然是T,此时T的当前所在进程为设备管理器(CurrentProcess)A变成了T的调用者进程(CallerProcess),T自动具有了访问 调鼡者进程空间的权限这时访问Slot0中的虚拟地址其实质就是访问设备管理器的进程地址空间,要把地址加上一个偏移值也就是 4×0x,所以DeviceIoControl访問指针C包含的地址时本应该加上8×0x却加上 4×0x,结果地址并不是设备管理器的合法区域系统就会提示地址访问非法。而如果做了一个映射指针C包含的地址就会被加一个正确的偏 移值,使地址处于A的地址空间Slot 8中T此时具有访问A进程空间的权限,访问到正确的虚拟地址当然會得到正确的数据了

我要回帖

 

随机推荐