|  | // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 
|  | // 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" | 
|  |  | 
|  | namespace base { | 
|  |  | 
|  | ProcessIterator::ProcessIterator(const ProcessFilter* filter) | 
|  | : started_iteration_(false), | 
|  | filter_(filter) { | 
|  | snapshot_ = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); | 
|  | } | 
|  |  | 
|  | 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()) == 0 && | 
|  | ProcessIterator::IncludeEntry(); | 
|  | } | 
|  |  | 
|  | }  // namespace base |