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