1*6777b538SAndroid Build Coastguard Worker // Copyright 2012 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker
5*6777b538SAndroid Build Coastguard Worker #include "base/win/scoped_handle.h"
6*6777b538SAndroid Build Coastguard Worker #include "base/win/scoped_handle_verifier.h"
7*6777b538SAndroid Build Coastguard Worker #include "base/win/windows_types.h"
8*6777b538SAndroid Build Coastguard Worker
9*6777b538SAndroid Build Coastguard Worker namespace base {
10*6777b538SAndroid Build Coastguard Worker namespace win {
11*6777b538SAndroid Build Coastguard Worker
12*6777b538SAndroid Build Coastguard Worker using base::win::internal::ScopedHandleVerifier;
13*6777b538SAndroid Build Coastguard Worker
operator <<(std::ostream & os,HandleOperation operation)14*6777b538SAndroid Build Coastguard Worker std::ostream& operator<<(std::ostream& os, HandleOperation operation) {
15*6777b538SAndroid Build Coastguard Worker switch (operation) {
16*6777b538SAndroid Build Coastguard Worker case HandleOperation::kHandleAlreadyTracked:
17*6777b538SAndroid Build Coastguard Worker return os << "Handle Already Tracked";
18*6777b538SAndroid Build Coastguard Worker case HandleOperation::kCloseHandleNotTracked:
19*6777b538SAndroid Build Coastguard Worker return os << "Closing an untracked handle";
20*6777b538SAndroid Build Coastguard Worker case HandleOperation::kCloseHandleNotOwner:
21*6777b538SAndroid Build Coastguard Worker return os << "Closing a handle owned by something else";
22*6777b538SAndroid Build Coastguard Worker case HandleOperation::kCloseHandleHook:
23*6777b538SAndroid Build Coastguard Worker return os << "CloseHandleHook validation failure";
24*6777b538SAndroid Build Coastguard Worker case HandleOperation::kDuplicateHandleHook:
25*6777b538SAndroid Build Coastguard Worker return os << "DuplicateHandleHook validation failure";
26*6777b538SAndroid Build Coastguard Worker }
27*6777b538SAndroid Build Coastguard Worker }
28*6777b538SAndroid Build Coastguard Worker
29*6777b538SAndroid Build Coastguard Worker // Static.
CloseHandle(HANDLE handle)30*6777b538SAndroid Build Coastguard Worker bool HandleTraits::CloseHandle(HANDLE handle) {
31*6777b538SAndroid Build Coastguard Worker return ScopedHandleVerifier::Get()->CloseHandle(handle);
32*6777b538SAndroid Build Coastguard Worker }
33*6777b538SAndroid Build Coastguard Worker
34*6777b538SAndroid Build Coastguard Worker // Static.
StartTracking(HANDLE handle,const void * owner,const void * pc1,const void * pc2)35*6777b538SAndroid Build Coastguard Worker void VerifierTraits::StartTracking(HANDLE handle,
36*6777b538SAndroid Build Coastguard Worker const void* owner,
37*6777b538SAndroid Build Coastguard Worker const void* pc1,
38*6777b538SAndroid Build Coastguard Worker const void* pc2) {
39*6777b538SAndroid Build Coastguard Worker return ScopedHandleVerifier::Get()->StartTracking(handle, owner, pc1, pc2);
40*6777b538SAndroid Build Coastguard Worker }
41*6777b538SAndroid Build Coastguard Worker
42*6777b538SAndroid Build Coastguard Worker // Static.
StopTracking(HANDLE handle,const void * owner,const void * pc1,const void * pc2)43*6777b538SAndroid Build Coastguard Worker void VerifierTraits::StopTracking(HANDLE handle,
44*6777b538SAndroid Build Coastguard Worker const void* owner,
45*6777b538SAndroid Build Coastguard Worker const void* pc1,
46*6777b538SAndroid Build Coastguard Worker const void* pc2) {
47*6777b538SAndroid Build Coastguard Worker return ScopedHandleVerifier::Get()->StopTracking(handle, owner, pc1, pc2);
48*6777b538SAndroid Build Coastguard Worker }
49*6777b538SAndroid Build Coastguard Worker
DisableHandleVerifier()50*6777b538SAndroid Build Coastguard Worker void DisableHandleVerifier() {
51*6777b538SAndroid Build Coastguard Worker return ScopedHandleVerifier::Get()->Disable();
52*6777b538SAndroid Build Coastguard Worker }
53*6777b538SAndroid Build Coastguard Worker
OnHandleBeingClosed(HANDLE handle,HandleOperation operation)54*6777b538SAndroid Build Coastguard Worker void OnHandleBeingClosed(HANDLE handle, HandleOperation operation) {
55*6777b538SAndroid Build Coastguard Worker return ScopedHandleVerifier::Get()->OnHandleBeingClosed(handle, operation);
56*6777b538SAndroid Build Coastguard Worker }
57*6777b538SAndroid Build Coastguard Worker
58*6777b538SAndroid Build Coastguard Worker } // namespace win
59*6777b538SAndroid Build Coastguard Worker } // namespace base
60