- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
WUA API学习笔记
WUA API学习笔记
2009-07-25 10:48 1082人阅读 评论(0) 收藏 举报
Widnows补丁检测最基本的方法还是通过微软自己提供的相关接口来实现比较好。这里用到得也就是Windows Update Agent API了,Windows Update Agent API其实属于COM接口,不过可以通过VB,VC,.net等来调用,这里我选择用C调用。当然是用VB比较简单微软也给出了范例,也就几十行代码就搞定的事情。不过c++实现的范例国内的资料基本没有, 以下只是我参考MSDN的一些学习笔记,当然对于这个你们也可以自己参考MSDN的得到,不足之处还请指出。并附上一段简单的调用代码。
1 WUA API中各类直接的关系。? WUA API中存在以下接口:? 要使用IUpdateSearcher、IUpdateDownloader、IUpdateInstaller、WebProxy等类必须先建立? IUpdateSession对象。这里所有类的属性基本上都有Get操作,部分是Put操作。? 而IUpdateSession则必须通过com来产生一个实例。
2 要想获得补丁的信息先得通过IUpdateSearcher接口进行查询。?2.1 IUpdateSearcher接口的使用方法。???? 主要调用IUpdateSearcher.Search方法,进行同步查询。??? HRESULT Search(? ??? [in]?? BSTR criteria,? ??? [out]? ISearchResult **retval??? );???? 其中BSTR criteria是我们的查询条件字符串,其格式和SQL语句的条件类似,???? 支持And或Or等逻辑运算,以及=、!=等运算。???? 通常我们关心的criteria查询条件有:Type、IsInstalled、IsHidden等,其他的条件可以参考:???? /en-us/library/aa386526(VS.85).aspx。???? Type 是String类型,指查询更新的类型,如Driver和Software。???? IsInstalled 是int类型,指查询更新的补丁是否已经安装。???? criteria = Type = Software and IsInstalled = 0;???? 查询的返回结果是ISearchResult类型,下面我们再来看ISearchResult接口。
?2.2 ISearchResult接口的使用方法。???? ISearchResult接口有四个属性,ResultCode、RootCategories、Updates、Warnings,这里我们关心的是???? Updates这个属性。???? Updates属性包含了我们查询更新后的结果的接口集。???? ISearchResult::Updates???? Updates有get_Updates这个方法,来进一步返回数据。???? HRESULT get_Updates(???? ?[out]? IUpdateCollection **retval??? );???? ISearchResult::Updates.get_Updates();???? 这其中使用到了IUpdateCollection类来存放结果,下面我们在来看IUpdateCollection接口的使用。
?2.3 IUpdateCollection接口的使用方法。???? IUpdateCollection有5个方法,Add,Clear,Copy,Insert,RemoveAt。不过这些方法不是我们现在关心的。???? 我们关心的是它的另外四个属性,_NewEnum、Count、Item、ReadOnly。???? 其中Count指的是返回的满足我们的跟新查询条件的结果的记录个数。???? Item则是进一步的存放了我们需要的信息。???? Item属性有有两个对应的操作,put和get,可以用来修改或取得信息。??? HRESULT put_Item(? ??? [in]?? long index,? ??? [in]?? IUpdate *value??? );??? HRESULT get_Item(? ??? ?[in]?? long index,???? ?[out]? IUpdate **retval??? );???? IUpdateCollection::Item.get_Item();方法可以取出查询结果记录中第i条记录的值,当然了这里的值又是???? 以IUpdate类的
文档评论(0)