IUpdateSearchers BrowseOnly=1 возвращает (ошибочно) 0

Я пытаюсь собрать еще не установленные необязательные обновления Windows для машины через IUpdateSearcher, аналогично этот вопрос.

документация IUpdateSearchers заявляет, что обновления могут быть отфильтрованы по критерию BrowseOnly. Тем не менее, у меня не работает этот код:

CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);

ISearchResult *pResult;
IUpdateSession *pSession;
IUpdateSearcher *pSearcher;

CoCreateInstance(CLSID_UpdateSession, NULL, CLSCTX_INPROC_SERVER, IID_IUpdateSession, (LPVOID*)&pSession);
pSession->CreateUpdateSearcher(&pSearcher);

LONG updateSizeT, updateSizeB1, updateSizeB0;
IUpdateCollection *pCollection;

BSTR criteria = SysAllocString(L"IsInstalled=0");
pSearcher->Search(criteria, &pResult);
pResult->get_Updates(&pCollection);
pCollection->get_Count(&updateSizeT);

SysFreeString(criteria);
criteria = SysAllocString(L"IsInstalled=0 and BrowseOnly=0");
pSearcher->Search(criteria, &pResult);
pResult->get_Updates(&pCollection);
pCollection->get_Count(&updateSizeB0);

SysFreeString(criteria);
criteria = SysAllocString(L"IsInstalled=0 and BrowseOnly=1");
pSearcher->Search(criteria, &pResult);
pResult->get_Updates(&pCollection);
pCollection->get_Count(&updateSizeB1);

SysFreeString(criteria);
wcout << L"Total: " << updateSizeT << endl
    << L"BrowseOnly=0: " << updateSizeB0 << endl
    << L"BrowseOnly=1: " << updateSizeB1 << endl;

Производит следующий вывод:

Total: 86
BrowseOnly=0: 49
BrowseOnly=1: 0

Помимо уродливого кода, что я делаю неправильно?
Еще одна проверка панели управления Центром обновления Windows показывает, что должно быть 0 необязательных (BrowseOnly=0) обновлений, однако коды возвращают 49.


person crunsher    schedule 24.10.2014    source источник