Windows安全补丁检

主要通过WUA API实现,源代码如下:

#include <wuapi.h>
#pragma comment(lib, "comsupp.lib")

//检测操作系统安全补丁是否最新

BOOL DetectSecPatch()
{
	HRESULT ret ;

	IUpdateSession *Session = NULL;//定义更新域

	ret = CoInitialize(NULL);//初始化COM接口
	if (FAILED(ret))
		return ERROR;

	ret = CoCreateInstance(CLSID_UpdateSession,
		NULL,
		CLSCTX_INPROC_SERVER, 
		IID_IUpdateSession ,
		(LPVOID*)&Session);//实例化COM接口
	if (FAILED(ret))
		return ERROR;

	IUpdateSearcher *Searcher = NULL;
	ret = Session->CreateUpdateSearcher(&Searcher);//创建搜索对象
	if(FAILED(ret))
		return ERROR;

	ret = Searcher->put_Online(VARIANT_FALSE);//查询模式
	if(FAILED(ret))
		return ERROR;  

	ISearchResult *SearchResult = NULL;
	BSTR barBstr = ::SysAllocString(L"IsInstalled = 0 and Type = 'Software'");//IsInstalled = 0表示未安装,1表示安装。
	ret = Searcher->Search(barBstr, &SearchResult); //执行搜索,结果集放在SearchResult中
	::SysFreeString(barBstr);
	if(SearchResult == NULL)//获取补丁信息失败
		return ERROR;
	if(FAILED(ret))
		return ERROR;

	IUpdateCollection *Collection;
	ret = SearchResult->get_Updates(&Collection);
	if(FAILED(ret))
		return ERROR;

	long Colnum;
	ret = Collection->get_Count(&Colnum);//安全补丁个数
	if(FAILED(ret))
		return ERROR;

	for (int i = 0;i < Colnum;i++)
	{
		IUpdate *Update;
		ret = Collection->get_Item(i,&Update);

		BSTR SecLevel = NULL;
		ret = Update->get_MsrcSeverity(&SecLevel);//Critical Important Moderate Low

		if(SecLevel != NULL)//补丁不是最新.(有些补丁没有安全等级,无需安装的。只要安装了有安全等级的补丁,认为最新)
                                    //个人认为
		{
			::SysFreeString(SecLevel);
			return FALSE;
		}
		::SysFreeString(SecLevel);
	}
	return TRUE;//补丁为最新
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章