1、什么是WMI事件
看了一下微软MSDN上对WMI事件的解释,但是没怎么看懂,不过也大概明白了。WMI事件是系统内部在执行一些动作时触发的事件,比如:打开(或关闭)某一个进程、打印、插入USB检测、打开某一个文件。
2、WMI事件查询
SELECT * FROM __InstanceCreationEvent WITHIN 0.001 WHERE TargetInstance ISA \"Win32_PrintJob\"
这条看似SQL语句的查询语句就是查询WMI事件的,我们来分析一下这条语句。
__InstanceCreationEvent这个对象翻译成中文就是:实例创建事件,就是添加或创建类的事件都是从这个对象中查询,比如我们创建一个进程或一个文件。我们不止可以查询创建事件,增、删、改这几种类型的事件都可以查询到,修改是:__InstanceModificationEvent,删除是:__InstanceDeletionEvent。查询好像没有。
within 0.001,这个参数指的是查询的轮询时间,隔多长时间去查询一次这个事件,单位是秒,这里的轮询时间是1毫秒
TargetInstance,目标实例的名称;ISA,就是is a 的缩写,连起来就是目标实例是什么
Win32_PrintJob,目标实例的名称,这里的例子是windows系统的打印任务。
整个查询的意思就是:每隔1毫秒去查询windows系统中的新建的打印任务
如果我们要查询具体实例的名称,比如我们要查询系统创建一个什么进程,那查询语句应该是这样的:
Select * From __InstanceCreationEvent WITHIN 60 Where TargetInstance ISA 'Win32_Process' and TargetInstance.Name = 'notepad.exe'
3、代码实现
引用程序集:System.Ma