123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- // Copyright (c) 2012 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.
- #ifndef BASE_WIN_SCOPED_PROCESS_INFORMATION_H_
- #define BASE_WIN_SCOPED_PROCESS_INFORMATION_H_
- #include <windows.h>
- #include "base/base_export.h"
- #include "base/macros.h"
- #include "base/win/scoped_handle.h"
- namespace base {
- namespace win {
- // Manages the closing of process and thread handles from PROCESS_INFORMATION
- // structures. Allows clients to take ownership of either handle independently.
- class BASE_EXPORT ScopedProcessInformation {
- public:
- ScopedProcessInformation();
- explicit ScopedProcessInformation(const PROCESS_INFORMATION& process_info);
- ~ScopedProcessInformation();
- // Returns true iff this instance is holding a thread and/or process handle.
- bool IsValid() const;
- // Closes the held thread and process handles, if any.
- void Close();
- // Populates this instance with the provided |process_info|.
- void Set(const PROCESS_INFORMATION& process_info);
- // Populates this instance with duplicate handles and the thread/process IDs
- // from |other|. Returns false in case of failure, in which case this instance
- // will be completely unpopulated.
- bool DuplicateFrom(const ScopedProcessInformation& other);
- // Transfers ownership of the held PROCESS_INFORMATION, if any, away from this
- // instance.
- PROCESS_INFORMATION Take();
- // Transfers ownership of the held process handle, if any, away from this
- // instance. Note that the related process_id will also be cleared.
- HANDLE TakeProcessHandle();
- // Transfers ownership of the held thread handle, if any, away from this
- // instance. Note that the related thread_id will also be cleared.
- HANDLE TakeThreadHandle();
- // Returns the held process handle, if any, while retaining ownership.
- HANDLE process_handle() const { return process_handle_.Get(); }
- // Returns the held thread handle, if any, while retaining ownership.
- HANDLE thread_handle() const { return thread_handle_.Get(); }
- // Returns the held process id, if any.
- DWORD process_id() const { return process_id_; }
- // Returns the held thread id, if any.
- DWORD thread_id() const { return thread_id_; }
- private:
- ScopedHandle process_handle_;
- ScopedHandle thread_handle_;
- DWORD process_id_ = 0;
- DWORD thread_id_ = 0;
- DISALLOW_COPY_AND_ASSIGN(ScopedProcessInformation);
- };
- } // namespace win
- } // namespace base
- #endif // BASE_WIN_SCOPED_PROCESS_INFORMATION_H_
|