scoped_open_process.h revision ddb351dbec246cf1fab5ec20d2d5520909041de1
1// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef BASE_MEMORY_SCOPED_OPEN_PROCESS_H_
6#define BASE_MEMORY_SCOPED_OPEN_PROCESS_H_
7#pragma once
8
9#include "base/process.h"
10#include "base/process_util.h"
11
12namespace base {
13
14// A class that opens a process from its process id and closes it when the
15// instance goes out of scope.
16class ScopedOpenProcess {
17 public:
18  ScopedOpenProcess() : handle_(kNullProcessHandle) {
19  }
20
21  // Automatically close the process.
22  ~ScopedOpenProcess() {
23    Close();
24  }
25
26  // Open a new process by pid. Closes any previously opened process (even if
27  // opening the new one fails).
28  bool Open(ProcessId pid) {
29    Close();
30    return OpenProcessHandle(pid, &handle_);
31  }
32
33  // Close the previously opened process.
34  void Close() {
35    if (handle_ == kNullProcessHandle)
36      return;
37
38    CloseProcessHandle(handle_);
39    handle_ = kNullProcessHandle;
40  }
41
42  ProcessHandle handle() const { return handle_; }
43
44 private:
45  ProcessHandle handle_;
46  DISALLOW_COPY_AND_ASSIGN(ScopedOpenProcess);
47};
48}  // namespace base
49
50#endif  // BASE_MEMORY_SCOPED_OPEN_PROCESS_H_
51