关于用WUA API获取系统已装配补丁
关于用WUA API获取系统已安装补丁
我用下面代码获取系统已安装补丁:
BOOL GetSystemDefects(struct defects *system_defects)
{
int res = NO_ERROR;
HRESULT ret;
int flag = 1;
struct defects *p;
try
{
IUpdateSession *Session = NULL;
ret = CoInitialize(NULL);
if (FAILED(ret))
{
Log("GetSystemDefects():Initializes the COM Failed.");
throw -1;
}
ret = CoCreateInstance(CLSID_UpdateSession, NULL, CLSCTX_INPROC_SERVER,
IID_IUpdateSession , (LPVOID*)&Session);
if ((Session == NULL) || FAILED(ret))
{
//return -1;
throw -2;
}
IUpdateSearcher *Searcher = NULL;
ret = Session->CreateUpdateSearcher(&Searcher);
if (FAILED(ret) || (Searcher == NULL))
{
Session->Release();
//return -1;
throw -3;
}
Searcher->put_Online(VARIANT_FALSE); //离线查询
// Searcher->put_Online(VARIANT_TRUE); //在线查询
ISearchResult *SearchResult = NULL;
ret = Searcher->Search(_bstr_t("IsInstalled = 0 and Type = 'Software'"), &SearchResult);
if (FAILED(ret))
{
Searcher->Release();
Session->Release();
//return -1;
throw -4;
}
IUpdateCollection *Collection;
ret = SearchResult->get_Updates(&Collection);
if (FAILED(ret) || Collection == NULL)
{
Log("//////////////////////////////////////////////////////////////////////////");
Log("GetSystemDefects():failed to call ISearchResult::Updates!");
Log("//////////////////////////////////////////////////////////////////////////");
//return 0;
throw -5;
}
long Colnum;
long i = 0;
long j = 0;
Collection->get_Count(&Colnum);
if (Colnum < 0)
{
//system_defects = NULL;
//printf("There are no appliable update./n");
}
else
{
//printf("Total update count:%d/n", Colnum);
}
for (i = 0; i < Colnum; i++)
{
IUpdate *Update;
ret = Collection->get_Item(i, &Update);
if (FAILED(ret) || Update == NULL)
{
Log("Collection->get_Item(i, &Update)");
throw -6;
}
BSTR Title = NULL;
ret = Update->get_Title(&Title);
//安全等级
//Critical Important Moderate Low
BSTR SecLevel = NULL;
ret = Update->get_MsrcSeverity(&SecLevel);
//Download Url
//
IUpdateDownloadContentCollection *DownloadUrlCol = NULL;
//获取安全公告号
我用下面代码获取系统已安装补丁:
BOOL GetSystemDefects(struct defects *system_defects)
{
int res = NO_ERROR;
HRESULT ret;
int flag = 1;
struct defects *p;
try
{
IUpdateSession *Session = NULL;
ret = CoInitialize(NULL);
if (FAILED(ret))
{
Log("GetSystemDefects():Initializes the COM Failed.");
throw -1;
}
ret = CoCreateInstance(CLSID_UpdateSession, NULL, CLSCTX_INPROC_SERVER,
IID_IUpdateSession , (LPVOID*)&Session);
if ((Session == NULL) || FAILED(ret))
{
//return -1;
throw -2;
}
IUpdateSearcher *Searcher = NULL;
ret = Session->CreateUpdateSearcher(&Searcher);
if (FAILED(ret) || (Searcher == NULL))
{
Session->Release();
//return -1;
throw -3;
}
Searcher->put_Online(VARIANT_FALSE); //离线查询
// Searcher->put_Online(VARIANT_TRUE); //在线查询
ISearchResult *SearchResult = NULL;
ret = Searcher->Search(_bstr_t("IsInstalled = 0 and Type = 'Software'"), &SearchResult);
if (FAILED(ret))
{
Searcher->Release();
Session->Release();
//return -1;
throw -4;
}
IUpdateCollection *Collection;
ret = SearchResult->get_Updates(&Collection);
if (FAILED(ret) || Collection == NULL)
{
Log("//////////////////////////////////////////////////////////////////////////");
Log("GetSystemDefects():failed to call ISearchResult::Updates!");
Log("//////////////////////////////////////////////////////////////////////////");
//return 0;
throw -5;
}
long Colnum;
long i = 0;
long j = 0;
Collection->get_Count(&Colnum);
if (Colnum < 0)
{
//system_defects = NULL;
//printf("There are no appliable update./n");
}
else
{
//printf("Total update count:%d/n", Colnum);
}
for (i = 0; i < Colnum; i++)
{
IUpdate *Update;
ret = Collection->get_Item(i, &Update);
if (FAILED(ret) || Update == NULL)
{
Log("Collection->get_Item(i, &Update)");
throw -6;
}
BSTR Title = NULL;
ret = Update->get_Title(&Title);
//安全等级
//Critical Important Moderate Low
BSTR SecLevel = NULL;
ret = Update->get_MsrcSeverity(&SecLevel);
//Download Url
//
IUpdateDownloadContentCollection *DownloadUrlCol = NULL;
//获取安全公告号