2008-11-20 4:39:19 阅读44 评论0 202008/11 Nov20
ft !!本来就活多了,每次干一件事快了结的时候,小日本都会叫你中止当前的工作,做个以前不急现在催得死人的活。本来就不熟悉WMI,本来准备留给老大那大牛去解决,最后说个一天之内解决,再次ft !!找老大,直接说他也不会,还说就我懂的最多。。。。明摆着伤害我幼小的心灵~~~~
做这个东西肯定得装上wmiTest,我就日了他了,环境出了问题一直装不上,提示什么windows installer error。网上说了一堆怎么去解决,这他妈的是个无盘驱动,那么操作不累死才怪,能不能行还是个未知数。最后我想了下,wmiTesty带个功能可以网上访问测试机。心里很郁闷,我确实有段时间对VISTA的权限保护头大,保护的那好。共享文件夹后即使知道用户名和密码也访问不了里面的东西。一直没搞懂。也许逼
2008-10-21 17:04:04 阅读30 评论0 212008/10 Oct21
上面说了在QueryWmiRegInfo中,最关键的是怎么产生InstanceName,先设置RegFlag,如果RegFlag是基于PDO,那么还需要对PDO进行赋值,如果是基于一个给定的字符串来命名,那么设置RegFlag为——BASENAME。
我喜欢通过给定的字符串进行命名,但是这个过程中需要注意的是,首先得对InstanceName->Buffer进行分配空间.
这之后的一个就是注册表路径了,在DriverEntry中传入的参数记在了驱动程序在注册表中的路径,可以在DriverEntry中定义一个全局指针,将该路径保存下来,然后在这个时候,将全局指针赋值给*RegPath.这块的代码见源码。
开发WMI的时候需要特定的情况来测试自己的代码的正确性,所以有专门的WMI Tester来进行控制系统发送WMI的IRP包。
2008-10-21 16:51:31 阅读41 评论0 212008/10 Oct21
WDM模型中使用WMI功能的时候,虽然MSDN上说了很多相关的信息,但是VISTA上还是有改变的,例如在MSND上对MinorFunction的枚举中,0A应该是IRP_MN_REGINFO_EX,但是VISTA上0B是IRP_MN_REGINFO_EX,下面枚举一下VISTA上的MinorFunction的代号,虽然可以跟出来,但是还是写出来以便以后能看的直观:
00 == IRP_MN_QUERY_ALL_DATA
06 == IRP_MN_ENABLE_COLLECTION等。。。要发现更多,自己再去调查啦!~
下面说下使用WMI的步骤,在MSND上加入一下个人的经验:
MSND
2008-10-16 18:01:56 阅读40 评论0 162008/10 Oct16
1 在HML下的SYSTEM//CurrentControlSet//Control/Class下的{4D36E972-E325-11CE-BFC1-08002BE10318}
下进行枚举:该键值下面的都是网卡的信息;
2 枚举网卡的时候获取NetCfgInstanceId的内容,这个内容是网卡的一个标识ID
3 通过这个ID,组件IRP包,Irp = IoBuildDeviceIoControlRequest(IOCTL_NDIS_QUERY_SELECTED_STATS,DeviceObject,
2008-9-24 13:48:00 阅读15 评论0 242008/09 Sept24
系统对IRP操作的过程如下:
1. 子系统调用NT的IO系统服务打开命名文件。
2. NT的IO管理器调用对象管理器,查询命名文件,并且帮助解决文件对象的符号连接。同时调用安全参照监视器,检查子系统是否具备打开文件句柄的正确权限。
3. 如果NT文件系统不认识文件对象,IO管理器挂起请求。调用多个文件系统直到识别出文件对象才继续请求。
4. IO管理器负责为打开的请求分配内存和初始化IRP。对于NT驱动,打开请求等同于创建请求。
5. IO管理器调用文件系统驱动,将IRP传递给它们。文件系统存取它们的IRP中本地IO栈,决定必须进行哪一种操作。检查参数,确定请求文件是否在缓存中。如果不是,设置下一个IRP中驱动的IO栈。
2008-9-2 17:48:14 阅读10 评论0 22008/09 Sept2
PNP管理器一直在监测总线上的设备,当有新的设备加入到总线的时候,实际上发生着一个不简单的流程:
我们相应的驱动程序,首先会将它所需要控制的设备加入到设备堆栈,也就是通过驱动程序中的AddDevice,
设备加入到设备堆栈后,PNP状态我们一般在AddDevice中设置的是NOT_START状态。如果驱动控制的是多个设备,那么会一次调用AddDevice将所有设备添加到设备堆栈。
在AddDevice的过程中,PNP管理器会对加入到设备堆栈中的设备获取一些相应的信息,在VISTA中的磁盘的挂载过程中,PNP管理器首先会发送MinorFuction为0x0B的IRP,此IRP为IRP_MN_DEVICE_USAGE_NOTIFICATION,发送该IRP的目的是,系统想知道这个磁盘是否支持页面文件,隐藏文件等
2008-8-28 17:49:24 阅读15 评论0 282008/08 Aug28
sleep把所有的线程保存到内存,关机后只提供微电量给内存,以便快速启动。
休眠则是保存所有线程到硬盘后关机熄电。下次启动的时候,直接读取保存到硬盘的数据,速度大减。
VISTA中,有一个休眠器专门用来保存线程,致使系统硬盘容量剧减内存那么多。
为了节省空间,可以通过删除该文件,禁止休眠功能,节省空间。
VISTA中,休眠这个按钮经常不会出现在关机菜单中,可能有4种原因,微软网上有说明:
目前,我遇到2个情况
2008-7-25 15:09:16 阅读106 评论0 252008/07 July25
首先介绍几个术语:
进程上下文,就是表示进程信息的一系列东西,包括各种变量、寄存器以及进程的运行的环境。这样,当进程被切换后,下次再切换回来继续执行,能够知道原来的状态。
中断上下文,就是中断发生时,原来的进程执行被打断,那么就要把原来的那些变量保存下来,以便中断完成后再恢复。
Windows NT和Windows 98都是运行在支持虚拟地址空间的计算机上,虚拟地址空间或者映射到一段真实的物理内存,或者映射到交换文件中的页帧。
每一个进程有4G的虚拟地址空间空间(因为一般机器是32位),这4G的空间被分为用户模式地址空间以及用户模式地址空间。无论何时我们需要访问计算机内存,都要使用内核模式的虚拟地址。每一个用户模式进程都有自己的地址上下文,记录了
2008-7-25 11:48:03 阅读23 评论0 252008/07 July25
1 总线驱动程序通过枚举设备,并为每个设备创建了PDO
2 然后PnP管理器根据该PDO的注册表项装入它的驱动程序,过程如下
2008-7-18 15:06:56 阅读20 评论0 182008/07 July18
操作系统的引导过程是从计算机通电自检完成之后开始进行的,而这一过程又可以细分为预引导、引导、载入内核、初始化内核,以及登录这五个阶段:
在继续阅读之前,首先请注意图1,这是Windows XP的操作系统结构,其中包括了一些在后台工作的组件以及经常和我们打交道的程序。在了解Windows XP的启动过程之前,对系统结构有一个初步概念是很重要的。
预引导阶段
当我们打开计算机电源后,预引导过程就开始运行了。在这个过程中,计算机硬件首先要完成通电自检(Power-On Self Test,POST),这一步主要会对计算机中安装的处理器、内存等硬件进行检测,如果一切正常,则会继续下面的过程。