in ospatch/updates_windows.go [184:229]
func GetWUAUpdates(ctx context.Context, session *packages.IUpdateSession, classFilter, kbExcludes, exclusivePatches []string) (*packages.IUpdateCollection, error) {
// Search for all not installed updates but filter out ones that will be installed after a reboot.
filter := "IsInstalled=0 AND RebootRequired=0"
clog.Debugf(ctx, "Searching for WUA updates with query %q", filter)
updts, err := session.GetWUAUpdateCollection(ctx, filter)
if err != nil {
return nil, fmt.Errorf("GetWUAUpdateCollection error: %v", err)
}
if len(classFilter) == 0 && len(kbExcludes) == 0 && len(exclusivePatches) == 0 {
return updts, nil
}
defer updts.Release()
count, err := updts.Count()
if err != nil {
return nil, err
}
clog.Debugf(ctx, "Found %d total updates avaiable (pre filter).", count)
newUpdts, err := packages.NewUpdateCollection()
if err != nil {
return nil, err
}
clog.Debugf(ctx, "Using filters: Excludes: %q, Classifications: %q, ExclusivePatches: %q", kbExcludes, classFilter, exclusivePatches)
for i := 0; i < int(count); i++ {
updt, err := updts.Item(i)
if err != nil {
return nil, err
}
ok, err := checkFilters(ctx, updt, kbExcludes, classFilter, exclusivePatches)
if err != nil {
return nil, err
}
if !ok {
continue
}
if err := newUpdts.Add(updt); err != nil {
return nil, err
}
}
return newUpdts, nil
}