// Copyright 2013 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "base/process/process_iterator.h" #include "base/strings/string_util.h" namespace base { ProcessIterator::ProcessIterator(const ProcessFilter* filter) : snapshot_(CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)), filter_(filter) {} ProcessIterator::~ProcessIterator() { CloseHandle(snapshot_); } bool ProcessIterator::CheckForNextProcess() { InitProcessEntry(&entry_); if (!started_iteration_) { started_iteration_ = true; return !!Process32First(snapshot_, &entry_); } return !!Process32Next(snapshot_, &entry_); } void ProcessIterator::InitProcessEntry(ProcessEntry* entry) { memset(entry, 0, sizeof(*entry)); entry->dwSize = sizeof(*entry); } bool NamedProcessIterator::IncludeEntry() { // Case insensitive. return !_wcsicmp(executable_name_.c_str(), entry().exe_file()) && ProcessIterator::IncludeEntry(); } } // namespace base