1// Copyright (c) 2010 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 SANDBOX_SRC_EAT_RESOLVER_H__ 6#define SANDBOX_SRC_EAT_RESOLVER_H__ 7 8#include "base/basictypes.h" 9#include "sandbox/win/src/nt_internals.h" 10#include "sandbox/win/src/resolver.h" 11 12namespace sandbox { 13 14// This is the concrete resolver used to perform exports table interceptions. 15class EatResolverThunk : public ResolverThunk { 16 public: 17 EatResolverThunk() : eat_entry_(NULL) {} 18 virtual ~EatResolverThunk() {} 19 20 // Implementation of Resolver::Setup. 21 virtual NTSTATUS Setup(const void* target_module, 22 const void* interceptor_module, 23 const char* target_name, 24 const char* interceptor_name, 25 const void* interceptor_entry_point, 26 void* thunk_storage, 27 size_t storage_bytes, 28 size_t* storage_used); 29 30 // Implementation of Resolver::ResolveTarget. 31 virtual NTSTATUS ResolveTarget(const void* module, 32 const char* function_name, 33 void** address); 34 35 // Implementation of Resolver::GetThunkSize. 36 virtual size_t GetThunkSize() const; 37 38 private: 39 // The entry to patch. 40 DWORD* eat_entry_; 41 42 DISALLOW_COPY_AND_ASSIGN(EatResolverThunk); 43}; 44 45} // namespace sandbox 46 47 48#endif // SANDBOX_SRC_EAT_RESOLVER_H__ 49