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;//補丁爲最新
}


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